Ansible дополнительный диск vmware_guest с Ansible обзором башни - PullRequest
1 голос
/ 18 января 2020

У меня есть книга игр для создания виртуальной машины из шаблона в VMware ESXi 6.7. Моя книга игр ниже. Я хочу настроить второй (и, возможно, последующие) диски, только если переменная DISK1_SIZE_GB> 0. Это не работает. Я также попытался использовать «когда: DISK1_SIZE_GB определен», но безуспешно. Я использую опрос в Ansible Tower, со вторым диском в качестве дополнительного ответа. В этом случае я получаю сообщение об ошибке, что 0 является неверным размером диска, или когда я проверяю определение переменной, я получаю сообщение об ошибке DISK1_SIZE_GB, которая не определена. В любом случае, условие «когда» не работает. Если я жестко закодирую размер, как в первой записи «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

1 Ответ

0 голосов
/ 18 января 2020

AFAIK это не может быть выполнено в одной задаче. Вы были на правильном пути с when: DISK1_SIZE_GB is defined, если disk: была задачей, а не параметром. Ниже я подхожу к этому.

Создайте два вопроса опроса:

  • DISK1_SIZE_GB - целочисленный - обязательный ответ - введите ненулевое минимальное значение, например 20 (поскольку вы развертываете RHEL)

  • DISK2_SIZE_GB - целое число - необязательный ответ - нет минимального или максимального значения

Создать диск 1 в существующая задача vmware_guest:

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
...