使用模式来填充Ansible清单文件主机属性
问题描述:
我有一个主机文件看起来像使用模式来填充Ansible清单文件主机属性
[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。有没有一种方法可以在清单文件中实现此目的,还是需要通过主机执行某些操作变量和/或组变量?
答
这不能在库存文件中完成。我认为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 }}"
如果我没有记错,神社能力已经从每一个他们不应该过的地方,如在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)
同样,恐怕没有什么比“漂亮”为你”重新寻找。如果你的使用情况变得更复杂,那么set_fact
,set_host
和group_by
可以派上用场,或库存脚本,或group_vars
(我目前使用group_vars
文件服务器的数量)。
答
这是最好的做法使用An sible的Dynamic Inventory功能。见Developing Dynamic Inventory Sources。
这意味着编写一个以JSON格式返回主机名的脚本。
因此,将主机“注入”附加到依赖它的剧本中?这似乎是一种ewww。你知道有样品的动态库存脚本的好资源吗? – Shark 2015-02-10 21:40:19
股票文档在这个话题上很不错:http://docs.ansible.com/developing_inventory.html和http://docs.ansible.com/intro_dynamic_inventory.html。修改或解构_ec2_ one是一个好开始 – 2015-02-10 22:16:52
@Shark我使用动态库存的“hello world”进行编辑。 – 2015-02-10 22:27:47