Ansible vmware_guest 带有 Ansible Tower 调查的可选磁盘
Ansible vmware_guest optional disk with Ansible Tower survey
我有一本用于从 VMware ESXi 6.7 中的模板创建 VM 的手册。我的剧本在下面。如果 DISK1_SIZE_GB 变量 > 0,我只想配置第二个(和可能的后续)磁盘。这是行不通的。我也试过使用 'when: DISK1_SIZE_GB is defined' 但没有成功。我在 Ansible Tower 中使用调查,第二个磁盘配置是一个可选答案。在这种情况下,我得到一个关于 0 是无效磁盘大小的错误,或者当我检查变量定义时,我得到一个关于 DISK1_SIZE_GB 未定义的错误。无论哪种方式,'when' 条件似乎都不起作用。
如果我对大小进行硬编码,如在第一个 'disk' 条目中那样,它工作正常。如果我从 Ansible Tower 输入有效大小,则同样如此。除非在 Tower 调查中定义了大小,否则我不需要配置额外的磁盘。
谢谢!
---
- name: Create a VM from a template
hosts: localhost
gather_facts: no
tasks:
- name: Clone a template to a VM
vmware_guest:
hostname: "{{ lookup('env', 'VMWARE_HOST') }}"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASSWORD') }}"
validate_certs: 'false'
name: "{{ HOSTNAME }}"
template: RHEL-Server-7.7
datacenter: Production
folder: Templates
state: poweredon
hardware:
num_cpus: "{{ CPU_NUM }}"
memory_mb: "{{ MEM_MB }}"
disk:
- size_gb: 20
autoselect_datastore: true
- size_gb: "{{ DISK1_SIZE_GB }}"
autoselect_datastore: true
when: DISK1_SIZE_GB > 0
networks:
- name: "{{ NETWORK }}"
type: static
ip: "{{ IP_ADDR }}"
netmask: "{{ NETMASK }}"
gateway: "{{ GATEWAY }}"
dns_servers: "{{ DNS_SERVERS }}"
start_connected: true
wait_for_ip_address: yes
据我所知,这无法在一项任务中完成。如果 disk:
是一项任务而不是参数,那么您使用 when: DISK1_SIZE_GB is defined
就走在了正确的轨道上。以下是我将如何处理这个问题。
创建两个调查问题:
DISK1_SIZE_GB
- 整数 - 必填项 - 强制非零
最小值,例如 20(因为您正在部署 RHEL)
DISK2_SIZE_GB
- 整数 - 可选答案 - 没有最小值或最大值
值
在您现有的 vmware_guest 任务中创建磁盘 1:
disk:
- size_gb: "{{ DISK1_SIZE_GB }}"
autoselect_datastore: true
创建一个新的 vmware_guest_disk 任务,该任务随后立即运行并有条件地添加第二个磁盘:
- name: Add second hard disk if necessary
vmware_guest_disk:
hostname: "{{ lookup('env', 'VMWARE_HOST') }}"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASSWORD') }}"
validate_certs: 'false'
name: "{{ HOSTNAME }}"
datacenter: Production
folder: Templates
state: poweredon
disk:
- size_gb: "{{ DISK2_SIZE_GB }}"
autoselect_datastore: true
when: DISK2_SIZE_GB is defined
我有一本用于从 VMware ESXi 6.7 中的模板创建 VM 的手册。我的剧本在下面。如果 DISK1_SIZE_GB 变量 > 0,我只想配置第二个(和可能的后续)磁盘。这是行不通的。我也试过使用 'when: DISK1_SIZE_GB is defined' 但没有成功。我在 Ansible Tower 中使用调查,第二个磁盘配置是一个可选答案。在这种情况下,我得到一个关于 0 是无效磁盘大小的错误,或者当我检查变量定义时,我得到一个关于 DISK1_SIZE_GB 未定义的错误。无论哪种方式,'when' 条件似乎都不起作用。 如果我对大小进行硬编码,如在第一个 'disk' 条目中那样,它工作正常。如果我从 Ansible Tower 输入有效大小,则同样如此。除非在 Tower 调查中定义了大小,否则我不需要配置额外的磁盘。 谢谢!
---
- name: Create a VM from a template
hosts: localhost
gather_facts: no
tasks:
- name: Clone a template to a VM
vmware_guest:
hostname: "{{ lookup('env', 'VMWARE_HOST') }}"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASSWORD') }}"
validate_certs: 'false'
name: "{{ HOSTNAME }}"
template: RHEL-Server-7.7
datacenter: Production
folder: Templates
state: poweredon
hardware:
num_cpus: "{{ CPU_NUM }}"
memory_mb: "{{ MEM_MB }}"
disk:
- size_gb: 20
autoselect_datastore: true
- size_gb: "{{ DISK1_SIZE_GB }}"
autoselect_datastore: true
when: DISK1_SIZE_GB > 0
networks:
- name: "{{ NETWORK }}"
type: static
ip: "{{ IP_ADDR }}"
netmask: "{{ NETMASK }}"
gateway: "{{ GATEWAY }}"
dns_servers: "{{ DNS_SERVERS }}"
start_connected: true
wait_for_ip_address: yes
据我所知,这无法在一项任务中完成。如果 disk:
是一项任务而不是参数,那么您使用 when: DISK1_SIZE_GB is defined
就走在了正确的轨道上。以下是我将如何处理这个问题。
创建两个调查问题:
DISK1_SIZE_GB
- 整数 - 必填项 - 强制非零 最小值,例如 20(因为您正在部署 RHEL)DISK2_SIZE_GB
- 整数 - 可选答案 - 没有最小值或最大值 值
在您现有的 vmware_guest 任务中创建磁盘 1:
disk:
- size_gb: "{{ DISK1_SIZE_GB }}"
autoselect_datastore: true
创建一个新的 vmware_guest_disk 任务,该任务随后立即运行并有条件地添加第二个磁盘:
- name: Add second hard disk if necessary
vmware_guest_disk:
hostname: "{{ lookup('env', 'VMWARE_HOST') }}"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASSWORD') }}"
validate_certs: 'false'
name: "{{ HOSTNAME }}"
datacenter: Production
folder: Templates
state: poweredon
disk:
- size_gb: "{{ DISK2_SIZE_GB }}"
autoselect_datastore: true
when: DISK2_SIZE_GB is defined