是否可以在以下脚本中自动生成 vm10、vm11、vm12(如 terraform 中使用的 count.index)?我想传递/定义名称“vm”,并且应该能够部署 3 个具有不同名称 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
使用清单而不是字典。您想要 100 个虚拟机吗?
vms:
hosts:
vm[001:100]:
mem: 1024
vcpu: 1
这将被解释为vm001
,,vm002
... vm099
,,vm100
。
代表任务将它们创建到本地主机,因为在任务运行时它们不存在。之后您可以运行设置模块并直接在新创建的虚拟机上运行任务。
相应的剧本如下:
---
- 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