我正在创build可以在AWS中创build我们的系统基础架构的Ansible操作手册。 涉及到使用ec2.py的dynamic库存。
我首先创build一个实用程序服务器,然后创build一个Web服务器,并为每个服务器分别创build一个操作手册。 我在Web服务器上需要使用模板添加实用程序服务器的私有IP文件。
检索公用服务器的私有IP用于Web服务器的Playbook的最佳方法是什么?
服务器的IP是关于主机的可发现事实的一部分。 除非您明确禁用gather_facts
,否则在运行剧本时会自动检索这些事实。
即使如此,您可以明确地使用setup
模块来收集事实。
这个值可以在下一个任务中使用。
举个例子:
$ ansible -c local -m setup -a 'filter=ansible_*address*' localhost 127.0.0.1 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "172.17.0.1", "192.168.122.1", "192.168.0.12", "172.18.0.1" ], "ansible_all_ipv6_addresses": [ "fe80::e8b5:946f:410b:aff5" ] }, "changed": false
}
有三个问题:
3的解决scheme是在命令行中使用如下所示的额外variables来指定variables: ansible-playbook -i ./ec2.py –extra-vars“chaos = test”aws_playground.yaml
2的解决scheme是从hostvars的组variables中find你需要的主机名。 当与上述3结合使用时,您需要如下所示: – debug:var = hostvars [groups ['tag_Name _'+ chaos +'_ util'] [0]]。ansible_all_ipv4_addresses [0]
对于1的解决scheme是先在其他服务器上收集事实,然后再在您正在configuration的服务器上工作。 下面是一个收集所有这一切在一个地方的剧本:
# Called like: ansible-playbook -i ./ec2.py --extra-vars "chaos=test" aws_playground.yaml - name: Collect our facts on util hosts: "tag_Name_{{ chaos }}_util" tasks: [ ] - name: Set up a web server hosts: "tag_Name_{{ chaos }}_web" tasks: - debug: var=hostvars[groups['tag_Name_'+chaos+'_util'][0]].ansible_all_ipv4_addresses[0]