count.index para dicionário em Ansible

count.index para dicionário em Ansible

É possível gerar automaticamente vm10,vm11,vm12 no script abaixo (como count.index usado no terraform)? Gostaria de passar/definir o nome "vm" e ser capaz de implantar 3 VMs com os nomes diferentes vm10, vm11 e vm12. Por favor, sugira uma maneira, obrigado

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

Responder1

Use um inventário em vez de um ditado. Você quer 100 vms?

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

Isso será interpretado como vm001, vm002,..., vm099, vm100. Delegara tarefa de criá-los para localhost, pois eles não existem quando a tarefa é executada. Depois você pode executar omódulo de configuraçãoe execute tarefas diretamente nas VMs recém-criadas.

O manual correspondente ficaria assim:

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

informação relacionada