Ansible vmware_vm_facts: получить MAC-адрес для конкретной виртуальной машины и записать его в существующий инвентарь - PullRequest
0 голосов
/ 21 мая 2019

У меня есть цели с моим плакатом:

а) получить MAC-адрес от конкретной виртуальной машины, работающей на vsphere б) добавить его в мой инвентарный файл

Моя тестовая среда:
-Всфера 6,5
-Ansible 2.7 работает на Centos 7.6

Я смог указать а) после этого поста Как получить название конкретного словаря - Ansible

Playbook:

# Deploy a guest from a template*  
- hosts: 127.0.0.1  
  vars:
    vcenter_hostname: virtvcsami1.virtlab.local  
    vcenter_user: administrator@vsphere.local  
    vcenter_pass: Esxilab!1  
    vcenter_datastore: vsanDatastore  
    vcenter_datacenter: DatacenterMI  
  tasks:  
  - name: Gather VMware guest facts  
    vmware_vm_facts:  
      validate_certs: False  
      hostname: "{{ vcenter_hostname }}"  
      username: "{{ vcenter_user }}"  
      password: "{{ vcenter_pass }}"  
      vm_type: vm  
    delegate_to: localhost  
    register: vm_guest_facts  

  - debug: msg="{{ item.value.mac_address }}"  
    loop: "{{ vm_guest_facts.virtual_machines|dict2items }}"

но теперь мне осталось решить две проблемы:

Задача 1)

Playbook получает ВСЕ виртуальные машины, а мне нужна только виртуальная машина с именем "testvm"

[root @ nlnxmi1 testvmcdromiso] # ansible-playbook getvminfo.yml

PLAY [127.0.0.1] ***************************************** ************************************************** ************************************************** **************************************************
ЗАДАЧА [Сбор фактов] ********************************************* ************************************************** ************************************************** ****************************************
хорошо: [127.0.0.1]
ЗАДАЧА [Соберите факты о гостях VMware] ******************************************* ************************************************** ************************************************** ********************************
хорошо: [127.0.0.1 -> localhost]
ЗАДАЧА [отладка] ********************************************** ************************************************** ************************************************** *************************************************
ok: [127.0.0.1] => (item = {'key': u'kubemst01 ',' value ': {u'guest_fullname': u'CentOS 7 (64-bit) ', u'vm_network': {u '00: 50: 56: be: de: b9 ': {u'ipv4': [u'192.168.40.31 '], u'ipv6': [u'fe80 :: 250: 56ff: febe: deb9 ']} , u'52: 54: 00: 62: fe: fe ': {u'ipv4': [u'192.168.122.1 '], u'ipv6': []}}, u'cluster ': u'VirtlabMI' , u'esxi_hostname ': u'virtesxmi3.virtlab.local', u'mac_address ': [u'00: 50: 56: be: de: b9'], u'power_state ': u'poweredOn', u'ip_address ': u'192.168.40.31', u'uuid ': u'423e7580-1ca4-a6ca-5cb4-5b8fa963d527'}}) => { "сообщение": [ "00: 50: 56: быть: от: b9" ] }

ok: [127.0.0.1] => (item = {'key': u'testvm ',' value ': {u'guest_fullname':> u'CentOS 7 (64-bit) ', u'vm_network ': {}, u'cluster': u'VirtlabMI ',> u'esxi_hostname': u'virtesxmi1.virtlab.local ', u'mac_address':> [u'00: 50: 56: be: a3: a0 '], u'power_state': u'poweredOn ', u'ip_address': u '',> u'uuid ': u'423e8645-ca2a-1097-2e1c-624810a461d1'}}) => { "сообщение": [ "00: 50: 56: быть: a3: a0" ] } ......

Задача 2)

Добавить mac адрес в существующий файл инвентаризации или, если это невозможно, хотя бы в какой-то файл

Я попытался добавить следующий код в конце:

  - set_fact: vm_mac_address="prova"  

  - name: Register host to Inventory  
    lineinfile:  
      path: /etc/ansible/testvmcdromiso/inventory  
      regexp: '(testvm)'  
      line: '\1 macaddres={{ vm_mac_address }}'  
      backrefs: yes  

[root @ nlnxmi1 testvmcdromiso] # инвентарь кошки [Testhost] testvm macaddress = prova

но, как вы можете видеть, я просто использовал вместо этого "фиксированную" строку, мне нужно получить MAC-адрес из запущенного vm, но никогда не узнаю его даже после 2 дней попыток: (

Я только начинающий с ansible. Не могли бы вы помочь мне?

лучший Marco

1 Ответ

0 голосов
/ 21 мая 2019

Playbook получает ВСЕ виртуальные машины, а мне нужна только виртуальная машина с именем "testvm"

Это не проблема. Похоже, модуль vmware_vm_facts возвращает словарь, поэтому просто спросите, какой виртуальный компьютер вам нужен:

  - debug: msg="{{ vm_guest_facts.virtual_machines['testvm'].mac_address }}"  

Добавить MAC-адрес в существующий файл инвентаризации или, если это невозможно, хотя бы в некоторый файл

Поскольку теперь вы знаете, как получить MAC-адрес, вы изменили задачу lineinfile, используя эту информацию:

  - name: Register host to Inventory  
    lineinfile:  
      path: /etc/ansible/testvmcdromiso/inventory  
      regexp: '(testvm)'  
      line: '\1 macaddres={{ vm_guest_facts.virtual_machines['testvm'].mac_address }}'  
      backrefs: yes  
...