Utilisation de la fonction d’extension sysctl() sur les équipements Junos
Junos OS et Junos OS Evolved s’exécutent sur des systèmes d’exploitation de type *nix, qui vous permettent de récupérer diverses informations sur l’état du noyau et le processus. Vous pouvez appeler la sysctl() fonction d’extension de vos scripts d’automatisation pour récupérer ces mêmes informations d’état du noyau, comme vous utiliseriez la sysctl commande dans l’shell pour récupérer ces valeurs. La sysctl() fonction prend les mêmes noms de variable que vous fournissez pour la sysctl commande dans l’environnement de commande. Le nom de la variable est un nom de style MIB, qui utilise un ensemble de composants en pointillés. Étant donné que Junos OS est basé sur FreeBSD et que Junos OS Evolved s’exécute nativement sur Linux, les variables sysctl et les noms des variables sont différents pour chaque système d’exploitation.
Vous pouvez exécuter la sysctl -a commande dans le shell pour voir la liste complète des états disponibles et les noms correspondants que vous pouvez fournir en tant qu’arguments pour la sysctl() fonction. Cependant, la sortie peut être étendue.
Par exemple, sur Junos OS, l’exemple de script SLAX op suivant récupère et imprime les valeurs pour les états kern.hostname sysctl et hw.product.model:
version 1.1;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
match / {
<op-script-results> {
var $host = jcs:sysctl("kern.hostname");
expr jcs:output($host);
var $model = jcs:sysctl("hw.product.model");
expr jcs:output($model);
}
}
user@router1> op sysctl-junos router1 mx960
De même, sur Junos OS Evolved, l’exemple de script d’exploitation SLAX suivant récupère et imprime les valeurs pour les états kernel.hostname sysctl et kernel.osrelease:
version 1.1;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
match / {
<op-script-results> {
var $host = jcs:sysctl("kernel.hostname");
expr jcs:output($host);
var $osrelease = jcs:sysctl("kernel.osrelease");
expr jcs:output($osrelease);
}
}
user@router2-re0> op sysctl-evo router2-re0 5.2.60-yocto-standard-g9a086a2b7
Pour Junos OS Evolved, le type de retour est toujours une chaîne (« s »). Si vous omettez l’argument de type, la valeur par défaut est « s ».
Junos OS et Junos OS Evolved ont des noms d’état différents sysctl , car les systèmes d’exploitation sous-jacents sont différents. Par exemple, dans Junos OS, vous pouvez récupérer l’état du noyau pour hw.product.model, mais Junos OS Evolved n’a pas de nom de variable similaire sysctl . Dans ces cas, vous pouvez utiliser des RPC ou d’autres moyens pour récupérer les mêmes informations.
Par exemple, le script op SLAX suivant exécute le RPC pour récupérer le get-software-information nom du modèle sur Junos OS Evolved, ce qui équivaut à renvoyer la sysctl hw.product.model valeur sur Junos OS.
version 1.1;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
match / {
<op-script-results> {
var $local = jcs:open();
var $rpc = "get-software-information";
var $result = jcs:execute($local, $rpc);
expr jcs:output($result/product-model);
}
}
user@router2-re0> op sysctl-evo-model ptx10008
Si vous appelez la sysctl() fonction dans un script et spécifiez un nom de variable sysctl inexistant, Junos OS ne génère pas d’erreur, mais Junos OS Evolved génère une sysctl error: No such file or directory erreur.
Par exemple, supposons que la sysctl() fonction demande la valeur pour hw.product.model, qui est un nom de variable sysctl valide sur Junos OS, mais pas un nom de variable sysctl valide sur Junos OS Evolved. Si vous exécutez le script sur un équipement exécutant Junos OS Evolved, le script émet le résultat suivant :
user@router2-re0> op sysctl-evo-invalid error: sysctl error: No such file or directory error: xmlXPathCompiledEval: No result on the stack. error: runtime error: file /var/db/scripts/op/sysctl-evo-invalid.slax line 10 element variable error: Failed to evaluate the expression of variable 'model'.