Автоматизация Ansible VMware с поиском dig - PullRequest
0 голосов
/ 18 июня 2020

Сейчас я пытаюсь еще больше автоматизировать автоматизацию ВМ, не добавляя IP-адрес в файл переменных. Я нашел модуль nslookup с dig, но чувствую, что поступаю неправильно, например, вот файл переменных, который читается при создании для получения подробной информации:

# VMware Launch Variables

# If this is a test deployment you must ensure the vm is terminated after use.
vmname: agent5

esxi_datacenter: Datacenter
esxi_cluster: Cluster
esxi_datastore: ds1 # Do not change value.
esxi_template: template-v2
esxi_folder: agents # Folder must be pre-created

# Static IP Addresses
esxi_static_ip: "{{ lookup('dig', '{{ vmname }}.example.com.') }}"
esxi_netmask: 255.255.252.0
esxi_gateway: 10.0.0.1

Что я надеялся сделать с ними просто должен был иметь "esxi_static_ip", но вытащить на лету из поиска с помощью dig. Однако в текущем состоянии это не работает.

Происходит то, что виртуальная машина либо запускается без адреса ipv4, либо чаще происходит сбой со следующей ошибкой:

fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "Failed to create a virtual machine : A specified parameter was not correct: spec.nicSettingMap.adapter.ip.ipAddress"}

I получить IP-адрес и передать его, что работает, когда я жестко кодирую esxi_static_ip: в моем файле vmware-lanch-vars.yml. Однако, если я использую (включая примеры), он не работает.

Newvm регистрируется, когда я запускаю свою книгу воспроизведения vmware_guest.

- name: Make virtual machine IP persistant
  set_fact:
    newvm_ip_address: '{{ newvm.instance.ipv4 }}'

- name: Add host to in memory inventory
  add_host:
    hostname: "{{ newvm_ip_address }}"
    groups: just_created
    newvm_ip_address: "{{ newvm.instance.ipv4 }}"

Когда я запускаю с -vvvv, я вижу, что IP-адрес не прикреплен:

    "networks": [
        {
            "device_type": "vmxnet3",
            "gateway": "0.0.0.01",
            "ip": "",
            "name": "Network",
            "netmask": "255.255.252.0",
            "type": "static"
        }
    ],

ОБНОВЛЕНИЕ 3

Когда я создал простую пьесу, она работает, но не тогда, когда я помещаю ее в свой обычный поток, это работает ниже:

---
- hosts: localhost
  vars:
    vmname: "apim-sb-ng1-agent2"
    vm_dig_fqdn: "{{ vmname }}.example.com."
    esxi_static_ip: "{{ lookup('dig', vm_dig_fqdn) }}"

  tasks:
    - debug: msg="{{ esxi_static_ip }}" 

1 Ответ

1 голос
/ 18 июня 2020

Я не уверен, что это первая проблема, с которой вы столкнулись (см. Мой комментарий выше), но ваше выражение шаблона jinja2 неверно.

Вы не можете использовать расширение выражения jinja2, находясь внутри расширения выражения jinja2.

В этом случае вам нужно объединить вашу переменную и строку с помощью оператора +:

esxi_static_ip: "{{ lookup('dig', vmname + '.example.com.') }}"

Если вы предпочитаете везде использовать расширение jinja2, вы можете разделить это на разные переменные , например:

vm_dig_fqdn: "{{ vmname }}.example.com."
esxi_static_ip: "{{ lookup('dig', vm_dig_fqdn) }}"
...