У меня есть цели с моим плакатом:
а) получить 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