库存文件(inventories/test/environments/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
一般的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
在节点上成功安装node_exporter后,需要创建环境的通用配置文件:
- 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
主要问题是制定目标清单。
如果创建这样一个模板:
- 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 }}
变量的值ansible_host
总是在变化。因此这不是一个解决方案。
如何在剧本中创建动态主机列表?
PS:Playbook可以应用于多种环境:
ansible-playbook playbook.yml -i inventories/test -l tmp1,tmp3,tmp6
一般任务:
- 在“环境”组的节点上安装node_exporter
- 在本地主机上创建通用配置文件
- 将配置文件复制到主机“prometheus”