count.index для словаря в Ansible

count.index для словаря в Ansible

Возможно ли автоматически сгенерировать vm10,vm11,vm12 в скрипте ниже (как count.index, используемый в terraform)? Я хотел бы передать/определить имя "vm" и должен иметь возможность развернуть 3 vm с разными именами vm10, vm11 и vm12. Пожалуйста, предложите способ, спасибо

---
- hosts: Target                         
  vars:
    machines:                  
      v10:
        mem: 1024
        vcpu: 1
      v11:
        mem: 1024
        vcpu: 1
  tasks:
  - name: img cpy
    copy:
      src: /root/pri.qcow2
      dest: /test/{{ item.key }}.qcow2
      remote_src: yes
    with_dict: "{{ machines }}"
  - name: Import/Load VM
    command: >
             virt-install --name {{ item.key }} --memory {{ item.value.mem }} --vcpus {{ item.value.vcpu }} --disk /test/{{ item.key }}.qcow2,bus=sata --import --os-variant generic --network default --noreboot
    with_dict: "{{ machines }}"

решение1

Используйте inventory вместо dict. Вам нужно 100 vms?

vms:
  hosts:
    vm[001:100]:
      mem: 1024
      vcpu: 1

Это будет интерпретироваться как vm001, vm002,..., vm099, vm100. Делегатзадача создать их на localhost, так как они не существуют, когда задача выполняется. После этого вы можете запуститьмодуль настройкии запускать задачи непосредственно на вновь созданных виртуальных машинах.

Соответствующая схема будет выглядеть так:

---
- hosts: vms
  gather_facts: no
  tasks:
  - name: copy qcow image to target path
    copy:
      src: /root/ovms/pri.qcow2
      dest: /root/ovms/test/{{ inventory_hostname }}.qcow2
      remote_src: yes
    delegate_to: target
  - name: Import/Load VM
    command: >
            virt-install --name {{ inventory_hostname }} --memory {{ mem }} --vcpus {{ vcpu }} --disk /root/ovms/test/{{ inventory_hostname }}.qcow2,bus=sata --import --os-variant generic --network default --noreboot
    delegate_to: target

Связанный контент