在Ansible playbook中使用vmware_guest模块时,使用runonce参数可以使自定义规范只运行一次。但是,有时runonce参数不会被执行,这可能是因为虚拟机已经运行了自定义规范并且已经被标记为已完成。要解决此问题,可以添加一个变量来将虚拟机标记为需要重新运行自定义规范。下面是一个示例:
- name: Create a new virtual machine
vmware_guest:
hostname: "example.com"
username: "user"
password: "password"
name: "new_vm"
state: "present"
disk:
- size_gb: 10
type: "thin"
datastore: "datastore1"
network:
- name: "VM Network"
device_type: "vmxnet3"
hardware:
memory_mb: 2048
num_cpus: 2
scsi: paravirtual
customization:
hostname: "new_vm.example.com"
domain: "example.com"
runonce:
command: "powershell.exe -ExecutionPolicy RemoteSigned -File C:\\path\\to\\script.ps1"
reboot: True
required: True
gui_run_once: True
run_once_ipv4_address: True
marking:
key: "customization_runonce"
value: "true"
在这个示例中,我们添加了一个名为"marking"的新参数。这将把一个键值对添加到虚拟机的批注中,告诉Ansible需要重新运行自定义规范。在以后的任务中,可以使用vmware_guest_find模块来搜索标记为需要重新运行自定义规范的虚拟机。之后,可以再次运行vmware_guest模块,并将runonce参数设置为True,以确保自定义规范被重新运行。