Arquivo de inventário (inventários/teste/ambientes/tmp6.yml):
test:
children:
environments:
children:
tmp6:
tmp6:
vars:
ansible_user: superuser
ansible_password: superuser
ansible_become_password: "{{ ansible_password }}"
children:
infra:
hosts:
host_5:
ansible_host: 192.168.1.72
host_6:
ansible_host: 192.168.1.83
tools:
hosts:
host_7:
ansible_host: 192.168.1.239
host_8:
ansible_host: 192.168.1.46
Em geral playbook.yml
:
- hosts: environments
roles:
- role: host-configuration
- role: host-users
- role: node-exporter
post_tasks:
- ansible.builtin.copy:
content: |
- target:
- {{ ansible_host }}:9100
labels:
environment_name: {{ inventory_file | ansible.builtin.basename | ansible.builtin.regex_replace('.yml$', '') }}
environment_type: {{ inventory_file | ansible.builtin.dirname | ansible.builtin.dirname | ansible.builtin.basename }}
dest: "./{{ inventory_file | ansible.builtin.basename }}"
delegate_to: localhost
Após instalar com sucesso o node_exporter nos nós, é necessário criar um arquivo de configuração comum para o ambiente:
- target:
- 192.168.1.72:9100
- 192.168.1.83:9100
- 192.168.1.239:9100
- 192.168.1.46:9100
labels:
environment_name: tmp6
environment_type: test
O principal problema na formação da lista de alvos.
Se criar esse modelo:
- target:
- {{ ansible_host }}:9100
labels:
environment_name: {{ inventory_file | ansible.builtin.basename | ansible.builtin.regex_replace('.yml$', '') }}
environment_type: {{ inventory_file | ansible.builtin.dirname | ansible.builtin.dirname | ansible.builtin.basename }}
o valor da variável ansible_host
sempre muda. Portanto não é uma solução.
Como criar uma lista dinâmica de hosts em um manual?
PS: O Playbook pode ser aplicado a vários ambientes:
ansible-playbook playbook.yml -i inventories/test -l tmp1,tmp3,tmp6
Tarefa geral:
- instale o node_exporter nos nós do grupo "ambientes"
- crie arquivos de configuração comuns no host local
- copie os arquivos de configuração para o host "prometheus"