Ansible,AWS,基于标签的其他主机

我正在创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 

}

有三个问题:

  1. 您需要来自另一台服务器的信息才能在您正在configuration的当前服务器中使用。
  2. 您需要的其他服务器信息来自AWS。
  3. 您需要访问其他服务器的信息有一个variables名称。

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]