SUR CETTE PAGE
Exemple : importation de fichiers à l’aide d’un script OP
Le script op de cet exemple utilise le protocole file-get
XML Junos pour lire le contenu d’un fichier à partir d’un serveur distant.
Exigences
Cet exemple utilise un périphérique exécutant Junos OS.
Présentation et script opérationnel
L’opération du protocole file-get
XML Junos lit le contenu d’un fichier. La syntaxe de base pour l’utilisation de la commande est la file-get
suivante :
<rpc> <file-get> <filename>value</filename> <encoding>value</encoding> </file-get> </rpc>
Les éléments de balise suivants sont utilisés avec la file-get
commande.
encoding
—(Obligatoire) Spécifie le type de codage utilisé. Vous pouvez utiliserASCII
,base64
ouraw
le codage.filename
—(Obligatoire) Dans cette balise, vous incluez le chemin d’accès complet ou relatif et le nom de fichier du fichier à importer. Lorsque vous utilisez un chemin relatif, le chemin spécifié est relatif au répertoire / var/tmp/ si l’opérationfile-get
est exécutée localement. Si l’opération est exécutée à distance dans le contexte d’un descripteur de connexion, le chemin d’accès est relatif au répertoire de base de l’utilisateur.
Lorsque vous utilisez le codage ASCII, l’opération convertit tous les caractères de contrôle du fichier importé en caractère Unicode 'SECTION SIGN' file-get
(U+00A7).
Syntaxe XSLT
L’exemple de script suivant se connecte à un périphérique distant et lit le contenu du fichier spécifié. Le script prend trois arguments : l’adresse IP ou le nom d’hôte du périphérique distant, le nom de fichier et le codage du fichier. La arguments
variable est déclarée au niveau global du script afin que les noms et les descriptions des arguments soient visibles dans l’interface de ligne de commande (CLI).
Le script déclare la fileget
variable, qui contient l’appel de procédure distante (RPC) pour l’opérationfile-get
. Les arguments de ligne de commande définissent les valeurs des éléments et encoding
de la filename
balise. Si l’argument myhost
obligatoire est manquant, le script émet une erreur et arrête l’exécution. Sinon, le script vous invite à entrer le nom d’utilisateur et le mot de passe qui seront utilisés pour se connecter au périphérique distant.
Si la connexion au périphérique distant réussit, le script exécute le RPC dans le contexte du descripteur de connexion. La sortie de l’opérationfile-get
, qui est le résultat de la fonction, est stockée dans la jcs:execute()
out
variable. Si l’opération rencontre une erreur, le script imprime l’erreur dans l’interface de ligne de commande. Si l’opération réussit, le contenu du fichier est stocké dans la out
variable, qui est imprimée dans l’interface file-get
de ligne de commande. La connexion à l’hôte distant est alors fermée.
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0" version="1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:variable name="arguments"> <argument> <name>myhost</name> <description>IP address or hostname of the remote host</description> </argument> <argument> <name>filename</name> <description>name of file</description> </argument> <argument> <name>encoding</name> <description>ascii, base64, or raw</description> </argument> </xsl:variable> <xsl:param name="myhost"/> <xsl:param name="filename"/> <xsl:param name="encoding"/> <xsl:template match="/"> <op-script-results> <xsl:variable name="fileget"> <file-get> <filename> <xsl:value-of select="$filename"/> </filename> <encoding> <xsl:value-of select="$encoding"/> </encoding> </file-get> </xsl:variable> <xsl:choose> <xsl:when test="$myhost = ''"> <xnm:error> <message>missing mandatory argument 'myhost'</message> </xnm:error> </xsl:when> <xsl:otherwise> <xsl:variable name="username" select="jcs:get-input('Enter username: ')"/> <xsl:variable name="pw" select="jcs:get-secret('Enter password: ')"/> <xsl:variable name="connect" select="jcs:open($myhost, $username, $pw)"/> <xsl:choose> <xsl:when test="$connect"> <output>Connected to host. Reading file... </output> <xsl:variable name="out" select="jcs:execute($connect, $fileget)"/> <xsl:choose> <xsl:when test="$out//xnm:error"> <xsl:copy-of select="$out//xnm:error"/> </xsl:when> <xsl:otherwise> <output> <xsl:value-of select="concat('File contents: ', $out)"/> </output> </xsl:otherwise> </xsl:choose> <xsl:value-of select="jcs:close($connect)"/> </xsl:when> <xsl:otherwise> <output>No connection to host.</output> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </op-script-results> </xsl:template> </xsl:stylesheet>
Syntaxe SLAX
version 1.0; 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"; var $arguments = { <argument> { <name> "myhost"; <description> "IP address or hostname of the remote host"; } <argument> { <name> "filename"; <description> "name of file"; } <argument> { <name> "encoding"; <description> "ascii, base64, or raw"; } } param $myhost; param $filename; param $encoding; match / { <op-script-results> { var $fileget = { <file-get> { <filename>$filename; <encoding>$encoding; } } if ($myhost = '') { <xnm:error> { <message> "missing mandatory argument 'myhost'"; } } else { var $username = jcs:get-input("Enter username: "); var $pw = jcs:get-secret("Enter password: "); var $connect = jcs:open($myhost, $username, $pw); if ($connect) { <output> "Connected to host. Reading file... \n"; var $out = jcs:execute($connect, $fileget); if ($out//xnm:error) { copy-of $out//xnm:error; } else { <output> "File contents: " _ $out; } expr jcs:close($connect); } else { <output> "No connection to host."; } } } }
Configuration
Procédure
Procédure étape par étape
Pour télécharger, activer et tester le script :
Copiez le script XSLT ou SLAX dans un fichier texte, nommez le fichier import.xsl ou import.slax selon le cas, puis copiez-le dans le répertoire / var/db/scripts/op/ du périphérique.
En mode configuration, incluez l’instruction
file
au niveau de la[edit system scripts op]
hiérarchie et import.xsl ou import.slax, selon le cas.[edit system scripts op] user@host# set file import.(slax | xsl)
Exécutez la commande pour valider la
commit and-quit
configuration et revenir en mode opérationnel.[edit] user@host# commit and-quit
Exécutez le script op en émettant la
op import
commande mode opérationnel et incluez tous les arguments nécessaires.
Vérification
Vérification des arguments de script
But
Vérifiez que les noms et descriptions des arguments apparaissent dans l’interface de ligne de commande.
Action
Exécutez la op import ?
commande du mode opérationnel. L’interface de ligne de commande répertorie les complétions possibles des arguments de script en fonction des définitions de la variable globale arguments
du script.
user@host> op import ? Possible completions: <[Enter]> Execute this command <name> Argument name detail Display detailed output encoding ascii, base64, or raw filename name of file myhost IP address or hostname of the remote host | Pipe through a command
Vérification de l’exécution du script opérationnel
But
Vérifiez que le script se comporte comme prévu.
Action
Exécutez la op import myhost host encoding encoding filename file
commande mode de fonctionnement et incluez le nom d’utilisateur et le mot de passe appropriés lorsque vous y êtes invité. Si l’exécution du script réussit, le contenu du fichier demandé s’affiche. Par exemple :
root@host> op import myhost router1 encoding ascii filename /var/db/scripts/op/test.slax Enter username: root Enter password: Connected to host. Reading file... File contents: version 1.0; 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"; ...
Si vous ne fournissez pas l’adresse IP ou le nom d’hôte du périphérique distant dans les arguments de ligne de commande, le script émet une erreur et arrête l’exécution.
root@host> op import error: missing mandatory argument 'myhost'
En outre, si le chemin d’accès ou le fichier spécifié n’existe pas, le script génère une erreur.
root@host> op import myhost router1 encoding ascii filename /var/db/scripts/op/test1.slax Enter username: root Enter password: Connected to host. Reading file... File contents: Failed to open file (/var/db/scripts/op/test1.slax): No such file or directory