Ansible 中的循环检查
Looped checks in Ansible
例如,我有一个这样的列表:
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 }}"
但我不知道如何使用循环 + 'when' 语句正确地执行 "Create VM" 任务。
感谢@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 }}"
例如,我有一个这样的列表:
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 }}"
但我不知道如何使用循环 + 'when' 语句正确地执行 "Create VM" 任务。
感谢@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 }}"