Uso de Fabric en un dispositivo Cisco: "La línea tiene un comando automático no válido"

8

No estaba seguro de dónde preguntar esto, pero parece ser algo en el lado del interruptor, así que pensé que comenzaría aquí primero.

Estoy trabajando en un pequeño proyecto para automatizar las actualizaciones a los archivos de configuración en masa usando Fabric . Tengo todo instalado y aparentemente funciona correctamente en Python y he llegado al punto en que estoy listo para comenzar a construir algunas pruebas. Sin embargo, todos los comandos que realizo a través de Fabric vuelven con el siguiente error:

La línea tiene un comando automático no válido "/ bin / bash -l -c" X ""

Donde X es el comando que estoy tratando de ejecutar en el switch. Tengo problemas para entender por qué esto falla, ¿tal vez alguien puede ofrecer una explicación? ¿Es esto algo que debe configurarse en el lado de Cisco? Estoy probando esto en un conmutador 3750 que ejecuta 12.2, no estoy seguro de qué otros detalles proporcionar.

jmreicha
fuente

Respuestas:

7

Entonces resulta que hay un argumento que está implícito cuando invocas un comando desde Fabric llamado shell = True. Para que las cosas funcionen correctamente, tuve que especificar un argumento shell = False .

Entonces, por ejemplo, aquí hay un comando que estaba ejecutando que estaba fallando.

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

El que estaba produciendo la línea tiene un error de comando automático no válido "/ bin / bash -l -c" config t "" . Cambie su comando para incluir el shell = False

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

Todo funcionó sin problemas para mí después de que hice este cambio. Para obtener más información, hay una sección en la documentación que describe esto. Documentos de tela .

jmreicha
fuente
5

No estoy familiarizado con Fabric, pero por el error, está claro que está intentando ejecutar un shell (bash) para ejecutar el comando seleccionado. Los dispositivos IOS no tienen un "shell"; simplemente dele a la CLI el comando para ejecutar.

(En otras palabras, Fabric no parece estar diseñado para hablar con nada que no sea un sistema UNIX (tm)).

Ricky Beam
fuente