Introdução
Neste laboratório, você aprenderá como usar o módulo Script do Ansible para executar scripts personalizados em hosts remotos. O módulo Script permite que você execute scripts escritos em qualquer linguagem de programação nos hosts de destino, fornecendo flexibilidade e opções de personalização em suas tarefas de automação.
Executar um Script Simples
Nesta etapa, você executará um script simples em um host remoto usando o módulo Script do Ansible.
Primeiro, crie um novo arquivo de playbook do Ansible chamado /home/labex/project/script-module-playbook.yaml e abra-o em um editor de texto.
Adicione o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Execute a simple script
script: /home/labex/project/simple_script.sh
register: script_output
- name: Display script output
debug:
var: script_output.stdout_lines
hosts: Isso especifica o host de destino no qual o playbook será executado. Neste caso, o playbook será executado no host local porque o host de destino é "localhost".tasks: Esta é uma lista de tarefas a serem executadas.name: Este é o nome descritivo para a tarefa que identifica o propósito da tarefa.script: Este é o comando real que a tarefa executa. Ele instrui o Ansible a executar o script chamado "simple_script.sh" localizado no diretório "/home/labex/project/" no host de destino.register: Isso registra a saída do script na variávelscript_outputpara uso posterior no playbook.debug: Este é o módulo Ansible usado para imprimir informações de depuração.var: Este é um parâmetro para o módulodebugque exibe a saída padrão do script da tarefa anterior.script_output.stdout_linescontém cada linha da saída do script.
Em resumo, o principal objetivo deste playbook é executar um script no host local e exibir a saída padrão do script após sua execução. A variável registrada script_output contém a saída do script, que é então impressa usando o módulo Debug.
Em seguida, crie um arquivo de script simples chamado /home/labex/project/simple_script.sh com o seguinte conteúdo:
#!/bin/bash
echo "This is a simple script."
Certifique-se de que o arquivo de script seja executável (chmod +x simple_script.sh) e coloque o arquivo de script no diretório /home/labex/project/ especificado no playbook.
Finalmente, execute o playbook com o seguinte comando:
chmod +x simple_script.sh
ansible-playbook script-module-playbook.yaml
Observe a saída do script exibida na saída da execução do playbook. Exemplo de saída:
...
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute a simple script] *************************************************
changed: [localhost]
TASK [Display script output] ***************************************************
ok: [localhost] => {
"script_output.stdout_lines": [
"This is a simple script."
]
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Aqui "This is a simple script." é a saída do script simple_script.sh.
Passar Variáveis para Scripts
Nesta etapa, você aprenderá como passar variáveis do seu playbook Ansible para scripts executados usando o módulo Script.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Execute script with a variable
script: /home/labex/project/var_script.sh "{{ message }}"
register: variable_script_output
- name: Display variable script output
debug:
var: variable_script_output.stdout_lines
script: Este é o comando real que a tarefa executará. E{{ message }}é uma variável que é passada para o script. As chaves duplas indicam que esta é uma variável Ansible, e seu valor será substituído dinamicamente durante a execução.register: Isso registra a saída do script na variável "variable_script_output" para uso posterior no playbook.debug: Este é o módulo Ansible usado para imprimir informações de depuração.var: Este parâmetro para o módulodebugexibe a saída padrão do script da tarefa anterior.variable_script_output.stdout_linescontém cada linha da saída do script.
Em resumo, este playbook executa um script no host local, passando uma variável chamada "message" para o script. A saída do script é registrada na variável variable_script_output e, em seguida, é impressa usando o módulo debug.
Em seguida, crie um arquivo de script simples chamado /home/labex/project/var_script.sh com o seguinte conteúdo:
#!/bin/bash
echo $1
Certifique-se de que o arquivo de script seja executável (chmod +x var_script.sh) e coloque o arquivo de script no diretório /home/labex/project/ especificado no playbook.
Finalmente, passando a variável message como uma variável extra usando a opção -e ao executar o playbook.
chmod +x var_script.sh
ansible-playbook script-module-playbook.yaml -e "message=Hello,Ansible"
Observe a saída do script com a mensagem fornecida. Exemplo de saída:
...
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute script with a variable] ******************************************
changed: [localhost]
TASK [Display variable script output] ******************************************
ok: [localhost] => {
"variable_script_output.stdout_lines": [
"Hello,Ansible"
]
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Aqui "Hello,Ansible" é a saída do script simple_script.sh.
Lidar com Falhas de Script
Nesta etapa, você aprenderá como lidar com falhas de script ao executar scripts usando o módulo Script. Você lidará com casos em que o script retorna um status de saída diferente de zero, indicando uma falha.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Execute a failing script
script: /home/labex/project/failing_script.sh
register: failing_script_output
ignore_errors: yes
- name: Handle script failure
debug:
msg: "The script failed. Performing fallback action."
when: failing_script_output.failed
script: Este é o comando real que a tarefa executará.register: Isso registra a saída do script na variável "failing_script_output" para uso posterior no playbook.ignore_errors: Este parâmetro é definido comoyespara permitir que o Ansible continue executando tarefas subsequentes, mesmo que esta tarefa de script falhe. A falha será registrada na variávelfailing_script_output.debug: Este é o módulo Ansible usado para imprimir informações de depuração.msg: Este parâmetro para o módulodebugimprime uma mensagem indicando que o script falhou. Esta tarefa só será executada quando a tarefa anterior (failing_script_output) falhar.when: Esta condição garante que esta tarefa seja executada somente quando o script na primeira tarefa falhar. Se o script for bem-sucedido, esta tarefa será ignorada.
Em resumo, este playbook tenta executar um script que pode falhar. Se o script falhar, o playbook lida com a falha imprimindo uma mensagem de depuração e executando uma ação de fallback. O parâmetro ignore_errors: yes permite que o playbook continue mesmo que o script falhe, e a condição when: failing_script_output.failed garante que a tarefa de tratamento seja executada somente quando necessário.
Em seguida, crie um arquivo de script com falha chamado /home/labex/project/failing_script.sh com o seguinte conteúdo:
#!/bin/bash
exit 1
Certifique-se de que o arquivo de script seja executável (chmod +x failing_script.sh) e coloque o arquivo de script no diretório /home/labex/project/ especificado no playbook.
Finalmente, execute o playbook e observe que o script com falha é executado, mas ignorado devido a ignore_errors: yes.
chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml
O playbook exibirá uma mensagem de depuração indicando a falha e executando uma ação de fallback. Exemplo de saída:
...
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute a failing script] ************************************************
fatal: [localhost]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle script failure] ***************************************************
ok: [localhost] => {
"msg": "The script failed. Performing fallback action."
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
A mensagem "msg": "The script failed. Performing fallback action." indica que o script failing_script.sh falhou ao ser executado.
Resumo
Parabéns! Você concluiu com sucesso o laboratório do Módulo Script do Ansible. Você aprendeu como usar o módulo Script para executar scripts personalizados em hosts remotos, passar variáveis para scripts e lidar com falhas de script.
O módulo Script oferece grande flexibilidade e opções de personalização em suas tarefas de automação, permitindo que você aproveite o poder de scripts personalizados. No entanto, certifique-se de escrever scripts seguros e confiáveis e validar quaisquer entradas para evitar vulnerabilidades de segurança.
Agora que você tem um bom entendimento do módulo Script, você pode incorporá-lo em seus playbooks Ansible para automatizar várias tarefas e alcançar cenários de automação mais avançados. Feliz scripting com Ansible!


