Como usar o módulo de shell Ansible

Como usar o módulo de shell Ansible
Ansible é amplamente utilizado como um mecanismo de automação para as necessidades, como gerenciamento de configuração, provisionamento em nuvem e muito mais. A automação parece ótima, mas como o Ansible o alcança? Ele usa "módulos" responsáveis ​​pela automação. Sem esses módulos, um usuário teria que usar comandos ad hoc para executar tarefas.

No entanto, comandos ad hoc não são reutilizáveis. Claro, eles fornecem uma maneira de executar rapidamente tarefas individuais, mas não podem ser reutilizadas. Uma analogia pode ser desenhada onde o modo Playbook é como um script de shell, enquanto os comandos individuais são liners.

Falando em Shell, Ansible também tem um módulo de shell. Este módulo é usado para executar comandos de shell em sistemas de destino. Neste guia, examinaremos o módulo de shell ansible e demonstraremos exemplos de como ele pode ser usado.

Qual é o módulo Shell?

O módulo Ansible Shell permite que o usuário execute comandos complexos com redirecionamento, tubos, etc. É preciso um nome de comando, seus argumentos com delimitadores de espaço em branco e o executa em hosts remotos.

Pode parecer exatamente a mesma coisa que o módulo de comando Ansible, mas a diferença é que ele executa os comandos no host usando um shell. O módulo Shell também tem acesso a variáveis ​​de ambiente e operadores especiais, como | &; etc. Melhor ainda, você pode executar scripts inteiros usando o módulo Shell. No entanto, é do conhecimento comum entre os usuários que o módulo de comando é uma opção mais segura e previsível do que o módulo Shell.

Finalmente, é importante ter em mente que este módulo funciona apenas com sistemas Linux. Os usuários do Windows podem usar Ansible.janelas.win_shell em seu lugar. Com isso dito, vamos entrar nos detalhes do módulo Ansible Shell.

Usando o módulo de shell Ansible

Antes de começarmos a executar comandos e scripts, vamos dar uma olhada nos parâmetros para os quais você precisará transmitir valores ao usar este módulo.

  • CHDIR - Altera o diretório atual antes da execução.
  • CMD - uma sequência que contém o comando a ser executado, juntamente com seus argumentos.
  • executável - requer um caminho absoluto para alterar o shell que você está usando.
  • Removes - Reme um nome de arquivo. Usado para excluir etapas quando um arquivo não existe.
  • stdin - permite que o usuário defina o stdin de um comando para um valor específico.
  • Warn - leva sim (padrão) ou não, habilitando ou desativando avisos de tarefas.

Com isso fora do caminho, vamos fazer alguns exemplos de como usar a Ansible Shell.

Exemplo 1: Alterar o diretório de trabalho

Se você quiser alterar o diretório de trabalho antes de executar um comando, eis como seria feito.

- Nome: Alterar o diretório de trabalho para mydir

Ansible.construídas em.Shell: MyScript.sh >> mylog.TXT

args:

chdir: mydir/

Agora que criamos um manual, você pode executá -lo usando o terminal Linux executando:

Livro de teste Ansible-PlayBook.yml

Exemplo 2: Extraindo saída de comando

Se você deseja capturar e armazenar o valor de retorno de um comando shell, a palavra -chave do registro pode ser usada.

- Nome: Criando um .arquivo txt em $ home

concha: eco "me salve!"> $ Home/teste.TXT

Registro: Shell_Output

- Debug: var = shell_output

Exemplo 3: Verificando a data

Vamos começar verificando a data em nosso servidor remoto chamado teste. Observe como a sintaxe do módulo Shell é diferente aqui. Esta é apenas outra maneira de usar o módulo Ansible Shell.

- Nome: Verificando a data

concha:

"data"

Registro: DATECMD

Tags: DATECMD

- Debug: msg = "DATECMD.stdout "

Usamos o comando de data simples para verificar a data em um sistema remoto. Além disso, a saída do comando (a própria data) está sendo devolvida a um registro chamado Datecmd. Por fim, exibimos o conteúdo da variável de registro DATecmd, imprimindo seu atributo stdout.

Exemplo 4: Executando vários comandos

Neste exemplo, criaremos alguns arquivos de texto em um diretório temporário.

tarefas:

- Nome: Criando vários arquivos

Ansible.construídas em.concha: |

eco "eu sou o arquivo 1"> /tmp /myfile1.TXT
eco "eu sou arquivo 2"> /tmp /myfile2.TXT
eco "eu sou o arquivo 3"> /tmp /myfile3.TXT
tornar verdade
args:
chdir: /var /log

Aqui, usamos o código do shell para criar três arquivos, a saber, myfile1, myfile2, e myfile3. O TRUE: True Line permite que você "se torne" o usuário do host remoto. Finalmente, passamos por um argumento chdir e mudamos o diretório.

Exemplo 5: Aplicando redirecionamento e tubo

Agora, vamos ver como os tubos e o redirecionamento funcionam no módulo Ansible Shell. Vamos executar um comando LS simples com algum pré -processamento através de Awk. Além disso, usamos sed para remover linhas vazias. No final, redirecionaremos a saída para um arquivo de texto.

- Nome: Pegue uma lista do diretório e alimente -o a um arquivo

concha:

"ls -lrt/apps | awk 'print $ 9' | sed '/^$/d'>/tmp/mydir.TXT "

Registro: LSOUT

Tags: lsout

- Nome: Exiba o arquivo

Shell: Cat /TMP /Dirlist.TXT

Registro: DisplayList

- Debug: msg = "displaylist.stdout_lines "

Primeiro, executamos o comando mencionado e armazenamos seu resultado em mydir.TXT. Depois, usamos outro gato de comando para salvar o conteúdo do arquivo em um registro. Finalmente, essa variável de registro é exibida.

Como evitar a injeção de comando?

Como mencionamos anteriormente, o módulo de comando é considerado uma maneira mais segura de fazer as coisas. No entanto, tem funcionalidade um tanto limitada. Então, como se usa o módulo Shell com segurança?

Você pode usar o filtro de cotação para proteger os nomes de variáveis ​​que você passa para o módulo Shell da injeção de comando. Dado abaixo, é um exemplo desta higienização.

- Nome: Criando um .txt com o filtro de cotação

shell: eco "estou seguro"> $ home/Safefile | citar .TXT

É uma boa prática sempre usar o filtro de cotação com suas variáveis. Isso impedirá que os hackers mudem o comando no tempo de execução. É muito parecido com a injeção de SQL, mas enquanto você tomar precauções de segurança, você não precisa se preocupar!

Conclusão

O módulo Ansible Shell é um módulo versátil e poderoso que aumenta o controle do usuário e facilita muito a configuração remota. Neste artigo, analisamos o que faz, quais parâmetros ele tem e quais argumentos exigem e mais. Felizmente, agora você está bem equipado para usar o módulo Ansible Shell.