count.index für Wörterbuch in Ansible

count.index für Wörterbuch in Ansible

Ist es möglich, vm10, vm11, vm12 im folgenden Skript automatisch zu generieren (wie count.index in Terraform verwendet)? Ich möchte den Namen „vm“ übergeben/definieren und sollte in der Lage sein, 3 VMs mit den unterschiedlichen Namen vm10, vm11 und vm12 bereitzustellen. Bitte schlagen Sie eine Möglichkeit vor, Danke

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

Antwort1

Verwenden Sie ein Inventar anstelle eines Wörterbuchs. Sie möchten 100 VMs?

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

vm001Dies wird als , vm002,..., vm099, interpretiert vm100. Delegierendie Aufgabe, sie auf localhost zu erstellen, da sie nicht existieren, wenn die Aufgabe ausgeführt wird. Anschließend können Sie dieSetup-Modulund führen Sie Aufgaben direkt auf den neu erstellten VMs aus.

Das entsprechende Playbook würde folgendermaßen aussehen:

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

verwandte Informationen