如何在Ansible中配置Guest OS自定义规范?能否用vmware_guest模块从模板创VM?
关于Ansible vmware_guest模块的Guest OS自定义规范问题解答
我来帮你梳理下这两个问题的实操方案,刚好之前用vmware_guest模块做过类似的虚拟机部署操作~
1. 在Ansible中配置Guest OS自定义规范的方法
vmware_guest模块提供了customization_spec参数来处理Guest OS的自定义,主要有两种实用方式:
方式一:引用VMware中已存在的自定义规范
如果你已经在VMware vCenter里创建好了自定义规范,直接通过规范名称调用即可,非常省心。示例Playbook片段:
- name: 使用已有自定义规范配置虚拟机 community.vmware.vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: false name: "new-vm-01" template: "centos-7-template" datacenter: "DC01" folder: "/DC01/vm" customization_spec: "CentOS7-Custom-Spec" # 这里填你已有的规范名称 state: poweredon
方式二:在Playbook中临时定义自定义规范
如果需要灵活调整配置,也可以直接在Playbook里用字典形式定义自定义规则,不用依赖vCenter里的预定义规范。示例如下(以CentOS静态IP配置为例):
- name: 临时定义自定义规范配置虚拟机 community.vmware.vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: false name: "new-vm-02" template: "centos-7-template" datacenter: "DC01" folder: "/DC01/vm" customization_spec: hostname: "new-vm-02" domain: "example.com" ip: type: "static" ip: "192.168.1.100" netmask: "255.255.255.0" gateway: "192.168.1.1" dns_servers: - "8.8.8.8" - "8.8.4.4" state: poweredon
2. 是否可通过该模块从虚拟机模板创建带有Guest OS自定义规范的虚拟机?
完全可以,这其实是vmware_guest模块的核心应用场景之一。不管你是用上面提到的「引用已有规范」还是「临时定义规范」,只要在Playbook中同时指定template参数(你的虚拟机模板名称)和customization_spec参数即可完成部署。
需要注意几个关键点:
- 确保你的虚拟机模板已经安装了VMware Tools,否则自定义规范可能无法正常生效
- 执行Ansible的用户需要有访问该模板和自定义规范的权限
- 如果是使用vCenter里的预定义规范,要保证规范名称拼写完全一致(区分大小写)
给你一个完整的示例Playbook,整合模板部署和已有规范调用:
- hosts: localhost gather_facts: no vars: vcenter_hostname: "vcenter.example.com" vcenter_username: "administrator@vsphere.local" vcenter_password: "your-password" vm_template: "ubuntu-20.04-template" custom_spec_name: "Ubuntu20-Custom-Spec" tasks: - name: 从模板创建带自定义规范的虚拟机 community.vmware.vmware_guest: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: false name: "ubuntu-vm-01" template: "{{ vm_template }}" datacenter: "Production-DC" folder: "/Production-DC/vm/Servers" customization_spec: "{{ custom_spec_name }}" hardware: memory_mb: 4096 num_cpus: 2 state: poweredon
内容的提问来源于stack exchange,提问作者TeguhTujuh
相关产品推荐
相关产品推荐

