获取剧本中的IP地址列表
Get list of ip adresses in playbook
我是 Ansible 的新手,无法从文档中弄清楚如何实现这一点:
我有一个这样的库存文件:
example_site:
children:
...
example_hosts:
hosts:
h1:
ansible_host: "192.168.0.1"
h2:
ansible_host: "192.168.0.2"
现在我想在剧本中启动一个 Gluster 集群:
tasks:
- name: Create a trusted storage pool
become: yes
gluster.gluster.gluster_peer:
state: present
nodes:
- "192.168.0.1"
- "192.168.0.2"
有没有办法不对这个 IP 地址列表进行硬编码?我尝试了 node: groups['example_hosts']
,但没有用。
如何从清单中获取 IP 地址列表?
可以使用 ansible_host
变量访问清单中定义的主机的 IP 地址,即 hostvars['h1']['ansible_host']
=>“192.168.0.1”。由于您需要该组中主机的 IP 地址作为数组,我们可以遍历 group['example_hosts']
中的主机,这也是一个列表 ["h1", "h2"]
。
在下面的示例中,我们使用 example_hosts
组中主机的 IP 地址列表创建另一个变量:
- set_fact:
cluster_hosts: "{{ cluster_hosts|default([]) + [ hostvars[item]['ansible_host'] ] }}"
loop: "{{ groups['example_hosts'] }}"
run_once: true
- debug:
var: cluster_hosts
这给出了 cluster_hosts
中的 IP 地址列表:
"cluster_hosts": [
"192.168.0.1",
"192.168.0.2"
]
这个变量可以传递给gluster_peer
模块的nodes
参数:
nodes: "{{ cluster_hosts }}"
我是 Ansible 的新手,无法从文档中弄清楚如何实现这一点: 我有一个这样的库存文件:
example_site:
children:
...
example_hosts:
hosts:
h1:
ansible_host: "192.168.0.1"
h2:
ansible_host: "192.168.0.2"
现在我想在剧本中启动一个 Gluster 集群:
tasks:
- name: Create a trusted storage pool
become: yes
gluster.gluster.gluster_peer:
state: present
nodes:
- "192.168.0.1"
- "192.168.0.2"
有没有办法不对这个 IP 地址列表进行硬编码?我尝试了 node: groups['example_hosts']
,但没有用。
如何从清单中获取 IP 地址列表?
可以使用 ansible_host
变量访问清单中定义的主机的 IP 地址,即 hostvars['h1']['ansible_host']
=>“192.168.0.1”。由于您需要该组中主机的 IP 地址作为数组,我们可以遍历 group['example_hosts']
中的主机,这也是一个列表 ["h1", "h2"]
。
在下面的示例中,我们使用 example_hosts
组中主机的 IP 地址列表创建另一个变量:
- set_fact:
cluster_hosts: "{{ cluster_hosts|default([]) + [ hostvars[item]['ansible_host'] ] }}"
loop: "{{ groups['example_hosts'] }}"
run_once: true
- debug:
var: cluster_hosts
这给出了 cluster_hosts
中的 IP 地址列表:
"cluster_hosts": [
"192.168.0.1",
"192.168.0.2"
]
这个变量可以传递给gluster_peer
模块的nodes
参数:
nodes: "{{ cluster_hosts }}"