Módulo Script do Ansible

AnsibleBeginner
Pratique Agora

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ável script_output para 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ódulo debug que exibe a saída padrão do script da tarefa anterior. script_output.stdout_lines conté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ódulo debug exibe a saída padrão do script da tarefa anterior. variable_script_output.stdout_lines conté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 como yes para permitir que o Ansible continue executando tarefas subsequentes, mesmo que esta tarefa de script falhe. A falha será registrada na variável failing_script_output.
  • debug: Este é o módulo Ansible usado para imprimir informações de depuração.
  • msg: Este parâmetro para o módulo debug imprime 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!