使用模式填充 Ansible 清单文件中的主机属性
Using patterns to populate host properties in Ansible inventory file
我有一个看起来像
的主机文件
[foo]
foox 192.168.0.1 id=1
fooy 192.168.0.1 id=2
fooz 192.168.0.1 id=3
但是,我想使用以下模式更简洁地编写此代码:
[foo]
foo[x:z] 192.168.0.1 id=[1:3]
但这被解释为 id 等于“[1:3]”的原始文本,而不是 1、2 或 3。有没有办法在清单文件中实现这一点,或者我需要通过主机变量 and/or 组变量做某事?
这不能在清单文件中完成。我认为 set_fact
是您以编程方式构建如此简单的库存的最佳选择。
---
- hosts: all
tasks:
- add_host:
name: "host{{ item }}"
ansible_ssh_host: "127.0.0.1"
ansible_connection: "local"
group: "new"
id: "{{ item }}"
with_sequence: count=3
delegate_to: localhost
run_once: yes
- hosts: new
tasks:
- debug:
msg: "{{ id }}"
如果我没记错的话,Jinja 功能已从它们不应该出现的每个地方删除,即外部引号、大括号、特殊情况,如 YML 文件中的 when:
。
不过,当我以编程方式说时,我们谈论的是 Ansible.. 地球上最后的通用脚本候选者之一。动态清单脚本是解决此类问题的更好方法,除非我们说的是三台服务器。
完成此操作的最简单清单脚本是(在您的 hosts
目录中或由 -i
开关指向:
#!/usr/bin/env python
import json
inv = {}
for i in range(3):
inv[i] = {"hosts":["host%s" % i],"vars":{"id":i,"ansible_ssh_host":"127.0.0.1", "ansible_connection":"local"}}
print json.dumps(inv)
同样,恐怕 "pretty" 没有您要找的东西。如果您的用例变得更加复杂,那么 set_fact
、set_host
和 group_by
可能会派上用场,或者库存脚本,或者 group_vars
(我目前使用 group_vars
服务器编号的文件)。
这最好使用 Ansible 的 Dynamic Inventory features. See Developing Dynamic Inventory Sources 来完成。
这意味着编写一个脚本,returns 您的主机名采用 JSON 格式。
我有一个看起来像
的主机文件[foo]
foox 192.168.0.1 id=1
fooy 192.168.0.1 id=2
fooz 192.168.0.1 id=3
但是,我想使用以下模式更简洁地编写此代码:
[foo]
foo[x:z] 192.168.0.1 id=[1:3]
但这被解释为 id 等于“[1:3]”的原始文本,而不是 1、2 或 3。有没有办法在清单文件中实现这一点,或者我需要通过主机变量 and/or 组变量做某事?
这不能在清单文件中完成。我认为 set_fact
是您以编程方式构建如此简单的库存的最佳选择。
---
- hosts: all
tasks:
- add_host:
name: "host{{ item }}"
ansible_ssh_host: "127.0.0.1"
ansible_connection: "local"
group: "new"
id: "{{ item }}"
with_sequence: count=3
delegate_to: localhost
run_once: yes
- hosts: new
tasks:
- debug:
msg: "{{ id }}"
如果我没记错的话,Jinja 功能已从它们不应该出现的每个地方删除,即外部引号、大括号、特殊情况,如 YML 文件中的 when:
。
不过,当我以编程方式说时,我们谈论的是 Ansible.. 地球上最后的通用脚本候选者之一。动态清单脚本是解决此类问题的更好方法,除非我们说的是三台服务器。
完成此操作的最简单清单脚本是(在您的 hosts
目录中或由 -i
开关指向:
#!/usr/bin/env python
import json
inv = {}
for i in range(3):
inv[i] = {"hosts":["host%s" % i],"vars":{"id":i,"ansible_ssh_host":"127.0.0.1", "ansible_connection":"local"}}
print json.dumps(inv)
同样,恐怕 "pretty" 没有您要找的东西。如果您的用例变得更加复杂,那么 set_fact
、set_host
和 group_by
可能会派上用场,或者库存脚本,或者 group_vars
(我目前使用 group_vars
服务器编号的文件)。
这最好使用 Ansible 的 Dynamic Inventory features. See Developing Dynamic Inventory Sources 来完成。
这意味着编写一个脚本,returns 您的主机名采用 JSON 格式。