Ansible对循环中的项执行when语句

时间:2018-04-30 17:01:18

标签: amazon-ec2 ansible eip

我试图根据变量中的数字创建一些AWS弹性IP - 到目前为止它都很好。但我需要检查这个EIP是否已存在于我从文件加载的一组变量中。如果EIP存在,我想跳过它的创建, 例如:

- set_fact: "number_of_ips=3
- name: load the local config file
  include_vars: profiles/{{ ec2_tag_environment }}/file_with_variables

- name: allocate a new elastic IP for server {{ item }} if not exists already
  ec2_eip:
    profile: "{{ boto_profile }}"
    region: "{{ ec2_region }}"
    state: present
  register: reg_eip_server_{{ item }}
  when: server_eip_{{ item }} is not defined
  with_sequence: start=1 end={{ number_of_ips}}

(请不要介意缩进 - 它有效,但可能是复制/粘贴问题) 在"当"我收到警告,当然如果我尝试使用reg_eip_server_1.public_ip它会失败,因为它不存在

以下是问题

  1. 有可能吗?
  2. 如何获取项目的公共IP并在下一步中使用它?
  3. 当我使用这种计数时,如何使用条件跳过某个项?

1 个答案:

答案 0 :(得分:0)

我设法搞清楚了。 使用项目本身,警告只是一个警告,但它实际上是有效的,所以如果文件中的变量确实存在,它将忽略循环的实例并继续。 所以:1。是的,可能。 2.从结果项中获取公共IP(使用结果项编号作为索引)。 3.警告本身仍然有效。