Utilisation de Fabric sur un périphérique Cisco: «La ligne a une autocommande non valide»

8

Je ne savais pas trop où demander cela, mais il semble que ce soit quelque chose du côté des commutateurs, alors j'ai pensé commencer par ici.

Je travaille sur un petit projet pour automatiser les mises à jour des fichiers de configuration en masse à l'aide de Fabric . J'ai tout installé et fonctionne apparemment correctement en Python et suis arrivé au point où je suis prêt à commencer à construire des tests. Cependant, toutes les commandes que j'alimente via Fabric reviennent avec l'erreur suivante:

La ligne a une autocommande non valide "/ bin / bash -l -c" X ""

X est la commande que j'essaie d'exécuter sur le commutateur. J'ai du mal à comprendre pourquoi cela échoue, peut-être que quelqu'un peut offrir une explication? Est-ce quelque chose qui doit être configuré du côté Cisco? Je teste cela sur un commutateur 3750 exécutant 12.2, je ne sais pas quels autres détails fournir.

jmreicha
la source

Réponses:

7

Fabric est conçu avec un certain modèle d'exécution ; Il suppose que quelque chose, Bash par défaut, s'exécutera sur la télécommande pour exécuter votre commande.

Vous pouvez cependant modifier la commande distante. Vous pouvez essayer de changer la commande distante en un seul espace lorsque vous envoyez des commandes à quelque chose comme une CLI (par exemple, Cisco IOS).

Consultez le dictionnaire d'environnement de Fabric sur le paramètre «shell» .

Craig Constantine
la source
7

Il s'avère donc qu'il y a un argument qui est implicite lorsque vous appelez une commande de Fabric appelée shell = True. Pour que les choses fonctionnent correctement, j'ai dû spécifier un argument shell = False .

Ainsi, par exemple, voici une commande que j'exécutais qui échouait.

def config_t():
  run("config t")

Celui qui produisait la ligne a une erreur de commande automatique non valide "/ bin / bash -l -c" config t "" . Modifiez votre commande pour inclure le shell = False

def config_t():
    run("config t", shell=False)

Tout s'est bien passé pour moi après avoir effectué ce changement. Pour plus d'informations, une section de la documentation le décrit. Documents en tissu .

jmreicha
la source
5

Je ne connais pas Fabric, mais d'après l'erreur, il est clair qu'il tente d'exécuter un shell (bash) pour exécuter la commande sélectionnée. Les appareils IOS n'ont pas de "shell"; donnez simplement à la CLI la commande à exécuter.

(En d'autres termes, Fabric ne semble pas être conçu pour parler à tout ce qui n'est pas un système UNIX (tm).)

Ricky Beam
la source