在Ansible中进行循环检查

时间:2017-06-06 06:43:27

标签: loops automation ansible conditional

例如,我有一个这样的列表:

vms:
  - name: "vm1"
    desc: "first"
    network:
      ip: "10.0.0.10"
      prefix: "16"
  - name: "vm2"
    desc: "second"
    network:
      ip: "10.0.0.11"
      prefix: "16"

我想在循环中创建带有OpenNebula的VM,并检查是否已经创建了VM。我做了一个检查任务:

- name: Check if VM "{{ item.name }}" already created
  become_user: oneadmin
  ignore_errors: yes
  shell: onevm list --csv | grep "{{ item.name }}"
  register: created_vms
  with_items:
    - "{{ vms }}"

但我不知道如何使用loop +'when'语句正确地创建“创建VM”任务。

1 个答案:

答案 0 :(得分:0)

感谢@Konstantin Suvorov的评论! 以下是我案例的答案:

- name: Check if VMs already created
  become_user: oneadmin
  ignore_errors: yes
  shell: onevm list --csv | grep "{{ item.name }}"
  register: created_vms
  with_items: "{{ vms }}"

- name: Create VMs
  become_user: oneadmin
  command: onevm create --name "{{ item.1.name }}"
  when: item.0|failed
  with_together:
    - "{{ created_vms.results }}"
    - "{{ vms }}"