count.index para diccionario en Ansible

count.index para diccionario en Ansible

¿Es posible generar automáticamente vm10,vm11,vm12 en el siguiente script (como count.index usado en terraform)? Me gustaría pasar/definir el nombre "vm" y debería poder implementar 3 máquinas virtuales con los diferentes nombres vm10, vm11 y vm12. Por favor sugiera una manera, gracias.

---
- 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 }}"

Respuesta1

Utilice un inventario en lugar de un dictado. ¿Quieres 100 vms?

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

Esto se interpretará como vm001, vm002,..., vm099, vm100. Delegarla tarea para crearlos en localhost, ya que no existen cuando se ejecuta la tarea. Después puedes ejecutar elmódulo de configuracióny ejecutar tareas directamente en las máquinas virtuales recién creadas.

El libro de jugadas correspondiente se vería así:

---
- 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

información relacionada