Como passar variáveis para playbooks Ansible

AnsibleBeginner
Pratique Agora

Introdução

O Ansible é uma poderosa ferramenta de automação que permite otimizar a gestão da sua infraestrutura de TI. Uma das funcionalidades chave do Ansible é a sua capacidade de lidar com variáveis, o que permite tornar os seus playbooks mais dinâmicos e adaptáveis. Neste tutorial, exploraremos como passar variáveis para playbooks do Ansible, desde os conceitos básicos até técnicas mais avançadas, para o ajudar a otimizar os seus fluxos de trabalho de automação.

Introdução às Variáveis do Ansible

O Ansible é uma poderosa ferramenta de automação de TI que permite gerir a sua infraestrutura e aplicações com facilidade. Uma das funcionalidades chave do Ansible é a sua capacidade de trabalhar com variáveis, que são usadas para armazenar e manipular dados nos seus playbooks.

As variáveis no Ansible podem ser definidas em vários níveis, incluindo:

Variáveis de nível de Host

Estas são variáveis específicas de um determinado host ou grupo de hosts. Podem ser definidas no ficheiro de inventário ou em ficheiros de variáveis separados.

## inventory.yml
all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.100
      app_version: 2.0
    webserver2:
      ansible_host: 192.168.1.101
      app_version: 2.1

Variáveis de nível de Grupo

Estas são variáveis aplicadas a um grupo de hosts. Podem ser definidas no ficheiro de inventário ou em ficheiros de variáveis separados.

## group_vars/webservers.yml
app_name: MyApp
db_host: 10.0.0.50

Variáveis de nível de Play

Estas são variáveis específicas de um determinado play dentro de um playbook. Podem ser definidas no próprio play.

- hosts: webservers
  vars:
    app_port: 8080
    log_level: info

Variáveis de nível de Tarefa

Estas são variáveis específicas de uma determinada tarefa dentro de um play. Podem ser definidas na própria tarefa.

- name: Instalar pacote
  apt:
    name: "{{ package_name }}"
    state: present
  vars:
    package_name: nginx

Compreender como trabalhar com estes diferentes tipos de variáveis é crucial para gerir eficazmente os seus playbooks do Ansible e automatizar a sua infraestrutura.

Passagem de Variáveis para Playbooks do Ansible

Agora que tem um conhecimento básico das variáveis do Ansible, vamos explorar como passar variáveis para os seus playbooks do Ansible. Existem várias maneiras de o fazer:

Argumentos da Linha de Comando

Pode passar variáveis para o seu playbook usando a opção -e ou --extra-vars ao executar o comando ansible-playbook.

ansible-playbook site.yml -e "app_version=2.2 db_host=10.0.0.60"

Ficheiros de Variáveis

Pode definir variáveis em ficheiros YAML separados e passá-los para o seu playbook usando a opção --extra-vars.

ansible-playbook site.yml --extra-vars "@vars.yml"
## vars.yml
app_name: MyApp
app_version: 2.2
db_host: 10.0.0.60

Variáveis do Inventário

Como mencionado na secção anterior, pode definir variáveis no seu ficheiro de inventário e elas estarão disponíveis para o seu playbook.

## inventory.yml
all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.100
      app_version: 2.0
    webserver2:
      ansible_host: 192.168.1.101
      app_version: 2.1

Variáveis do Playbook

Também pode definir variáveis dentro do seu playbook usando a palavra-chave vars.

- hosts: webservers
  vars:
    app_name: MyApp
    app_version: 2.2
    db_host: 10.0.0.60
  tasks:
    - name: Imprimir variáveis
      debug:
        msg: "Nome da aplicação: {{ app_name }}, Versão da aplicação: {{ app_version }}, Host do BD: {{ db_host }}"

Compreendendo estas diferentes formas de passar variáveis para os seus playbooks do Ansible, pode tornar a sua automação mais flexível e adaptável a diferentes ambientes e requisitos.

Manipulação Avançada de Variáveis no Ansible

Embora os métodos básicos de passagem de variáveis para playbooks do Ansible sejam diretos, o Ansible também oferece recursos mais avançados para trabalhar com variáveis. Vamos explorar alguns deles:

Prioridade de Variáveis

O Ansible possui uma ordem de precedência bem definida para variáveis, o que é importante entender ao trabalhar com múltiplas fontes de variáveis. A ordem, do mais alto para o mais baixo, é:

  1. Parâmetros da linha de comando (ex.: -e "var=valor")
  2. Parâmetros da tarefa (ex.: vars dentro de uma tarefa)
  3. Parâmetros de inclusão (ex.: vars dentro de um ficheiro incluído)
  4. Parâmetros de bloco (ex.: vars dentro de um bloco)
  5. Parâmetros do play (ex.: vars dentro de um play)
  6. Variáveis padrão de roles (ex.: defaults/main.yml)
  7. Variáveis do inventário (ex.: em inventory.yml)
  8. Factos do host (ex.: recolhidos pelo módulo setup)
  9. Variáveis de roles e inclusão (ex.: vars/main.yml)
  10. Factos definidos (ex.: usando o módulo set_fact)

Compreender esta ordem de precedência pode ajudá-lo a resolver conflitos e garantir que as suas variáveis estão a ser usadas como pretendido.

Filtros e Testes de Variáveis

O Ansible fornece um conjunto rico de filtros e testes Jinja2 que pode usar para manipular e validar as suas variáveis. Alguns exemplos incluem:

  • Filtro default: {{ my_var | default('valor_padrão') }}
  • Filtro to_json: {{ my_dict | to_json }}
  • Teste is_defined: {% if my_var is defined %}...{% endif %}
  • Teste is_number: {% if my_var is number %}...{% endif %}

Estes podem ser muito úteis para lidar com cenários de variáveis complexos.

Variáveis Criptografadas com Vault

O recurso Vault do Ansible permite criptografar variáveis sensíveis, como senhas ou chaves API, para que possam ser armazenadas e usadas nos seus playbooks de forma segura. Isto é particularmente importante para manter a segurança na sua automação de infraestrutura.

## vars.yml
db_password: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  32313633326533343161663036623463
  3163303236303836343239653533326134
  3134613161623464

Ao compreender estas técnicas avançadas de manipulação de variáveis, pode levar a sua automação Ansible a um nível superior, tornando-a mais robusta, segura e adaptável às necessidades da sua organização.

Resumo

Neste tutorial do Ansible, aprendeu a passar variáveis para os seus playbooks, desde a atribuição simples de variáveis até técnicas mais complexas de manipulação de variáveis. Dominando a gestão de variáveis, pode criar playbooks Ansible flexíveis e dinâmicos que se adaptam às suas necessidades de infraestrutura em mudança. Aplique estas estratégias para melhorar a sua automação baseada no Ansible e levar as suas operações de TI ao próximo nível.