Middle
Qual é a hierarquia de variáveis nos diferentes papéis do DevOps?
sobes.tech IA
Resposta da IA
As variáveis no Ansible têm uma hierarquia estrita de prioridades. O Ansible combina variáveis de várias fontes, sobrescrevendo os valores de prioridade inferior com os de prioridade superior.
Hierarquia (do menor ao maior prioridade):
- Valores padrão do papel (Role defaults): Variáveis definidas em
defaults/main.ymldentro do papel. Têm a prioridade mais baixa, destinadas a definir valores padrão que podem ser facilmente sobrescritos. - Variáveis no diretório do papel (Role vars): Variáveis definidas em
vars/main.ymldentro do papel. Têm uma prioridade mais alta do que as variáveis padrão do papel. - Variáveis do inventário (Inventory variables):
- Variáveis globais do inventário (
group_vars/all/host_vars/allou no arquivo principal do inventário). - Variáveis de grupos do inventário (
group_vars/<nome_grupo>). A prioridade depende da ordem dos grupos no inventário e no playbook, mas geralmente os grupos com maior profundidade ou definidos mais tarde têm prioridade mais alta. - Variáveis do host do inventário (
host_vars/<nome_host>ou no arquivo principal do inventário). Têm prioridade mais alta do que as variáveis de grupo.
- Variáveis globais do inventário (
- Variáveis do play (Play variables): Variáveis definidas diretamente na secção
varsdo play. - Variáveis de play_hosts (Play vars_files): Variáveis carregadas no play através de
vars_files. A ordem em que são listadas determina a prioridade. - Variáveis de facts (Facts): Variáveis recolhidas após executar o módulo
gather_facts. Têm alta prioridade, pois representam o estado atual do sistema. - Variáveis de tarefas registadas (Task variables): Variáveis definidas através de
registerapós executar uma tarefa. Têm alta prioridade, disponíveis apenas dentro do play atual após a tarefa. - Variáveis de linha de comando (Command line variables): Variáveis passadas usando a bandeira
-eou--extra-varsao executaransible-playbook. Têm a prioridade mais alta e sobrescrevem todas as outras variáveis.
Exemplo de playbook com variáveis:
---
# playbook main.yml
- hosts: webservers
vars:
global_var: "global_value_from_play" # Variável do play (prioridade 4)
roles:
- webservers # Papel com defaults/main.yml e vars/main.yml (prioridade 1 e 2)
tasks:
- name: Imprimir variável
debug:
msg: "O valor da variável é: {{ my_variable }}"
vars: # Variável de tarefa (prioridade 7)
my_variable: "task_specific_value"
Exemplo de inventário:
# inventário
[webservers]
webserver1 ansible_host=192.168.1.10 # Variável do host (prioridade 3)
[all:vars]
my_variable="inventory_all_value" # Variável global do inventário (prioridade 3)
Exemplo de defaults do papel:
# roles/webservers/defaults/main.yml
---
my_variable: "default_value_from_role" # Variável defaults do papel (prioridade 1)
Exemplo de vars do papel:
# roles/webservers/vars/main.yml
---
my_variable: "vars_value_from_role" # Variável vars do papel (prioridade 2)
Ao executar o playbook ansible-playbook -i inventory main.yml -e "my_variable=extra_vars_value":
- Será usada a valor de
-e:extra_vars_value(prioridade 8). - Se
-enão estiver presente, mas houver uma variável de tarefa, ela será usada:task_specific_value(prioridade 7). - Se não houver variável de tarefa nem
-e, será usada a fact (se aplicável). - Depois, a variável do play:
global_value_from_play(prioridade 4). - Depois, a variável do host do inventário:
ansible_host=192.168.1.10(prioridade 3). - Depois, a variável do grupo do inventário (
group_varsou no inventário). - Depois, a variável global do inventário:
inventory_all_value(prioridade 3). - Depois, a variável vars do papel:
vars_value_from_role(prioridade 2). - Finalmente, a variável defaults do papel:
default_value_from_role(prioridade 1).
O Ansible pega o primeiro valor encontrado com a prioridade mais alta nesta hierarquia. Compreender esta hierarquia é crucial para depuração e gestão correta da configuração.