使用with_items连接字符串并分配给Ansible中的变量

时间:2017-03-20 13:20:47

标签: ansible ansible-2.x ansible-inventory ansible-facts

我需要在启动ec2_instances时将两个IP保存到vars_file中的变量,这将在以后的部署中使用。

这就是我保存单个服务器ip的方式:

- name: Save server public IP to vars file
  lineinfile: line="server_public_ip{{':'}} {{ item.public_ip }}"
              dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}"
  with_items: server.instances  #server is registered in previous task

我在dynamic_ips文件中的输出是 server_public_ip: xxx.xxx.xx.x

现在我已启动并注册了2台服务器作为服务器。

我需要将其保存为 server_public_ips: xxx.xx.x.xx , xxx.x.xx.x

我试图声明一个空字符串并将ips附加到它上面,就像这样,但我收到了错误。

set_fact:
   ips: ""
set_fact:
   ips: " {{ ips }} + {{ item.public_ip}} "
with_items: servers.instances  #servers is registered in previous task
lineinfile: line="server_public_ips{{':'}} {{ ips }}"
            dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}"

我认为可以使用lineinfile insertafter和regex来完成。

最后,我需要在不同的服务器上执行此操作,

- name: Restrict access to outside world
  command: iptables INPUT {{ item }} ACCEPT
  with_items: {{ server_public_ips }}.split(,) #grant access for each ip 
  command: iptables INPUT DROP

1 个答案:

答案 0 :(得分:3)

_id
当servers.instances是一个列表时,

实际上应该可以工作。