
Возможно ли автоматически сгенерировать 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