Usando o Fabric em um dispositivo Cisco: "A linha possui comando automático inválido"

8

Eu não tinha certeza de onde perguntar isso, mas parece ser algo do lado do switch, então pensei em começar aqui primeiro.

Estou trabalhando em um pequeno projeto para automatizar atualizações para arquivos de configuração em massa usando o Fabric . Eu tenho tudo instalado e aparentemente funcionando corretamente no Python e cheguei ao ponto em que estou pronto para começar a criar alguns testes. No entanto, todos os comandos que alimento através do Fabric retornam com o seguinte erro:

A linha possui um comando automático inválido "/ bin / bash -l -c" X ""

Onde X é o comando que estou tentando executar no comutador. Estou tendo problemas para entender por que isso está falhando; talvez alguém possa oferecer uma explicação? Isso é algo que precisa ser configurado no lado da Cisco? Estou testando isso em um switch 3750 executando 12.2, não tenho certeza de quais outros detalhes fornecer.

jmreicha
fonte

Respostas:

7

O tecido é projetado com um determinado modelo de execução ; Assume que algo, o Bash, por padrão, será executado no controle remoto para executar seu comando.

Você pode alterar qual é o comando remoto. Você pode tentar alterar o comando remoto em um único espaço para quando estiver enviando comandos para algo como uma CLI (por exemplo, Cisco IOS).

Consulte o Dicionário de ambiente do Fabric sobre a configuração 'shell' .

Craig Constantine
fonte
7

Portanto, há um argumento implícito quando você invoca um comando do Fabric chamado shell = True. Para que as coisas funcionassem corretamente, tive que especificar um argumento shell = False .

Por exemplo, aqui está um comando que eu estava executando que estava falhando.

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

O que estava produzindo a linha tem erro de comando automático "/ bin / bash -l -c" config t "" inválido . Mude seu comando para incluir o shell = False

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

Tudo correu bem para mim depois que eu fiz essa alteração. Para mais informações, há uma seção na documentação que descreve isso. Documentos de tecido .

jmreicha
fonte
5

Não estou familiarizado com o Fabric, mas pelo erro, é claro que ele está tentando executar um shell (bash) para executar o comando selecionado. Os dispositivos IOS não têm um "shell"; simplesmente dê à CLI o comando para executar.

(Em outras palavras, o Fabric não parece ter sido projetado para falar com qualquer coisa que não seja um sistema UNIX (tm).)

Ricky Beam
fonte