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.
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 mydirAgora que criamos um manual, você pode executá -lo usando o terminal Linux executando:
Livro de teste Ansible-PlayBook.ymlExemplo 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 $ homeExemplo 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 dataUsamos 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: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 arquivoPrimeiro, 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É 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.