Hi Marco, Correct if I am wrong.
Your base goal is to achieve adding a host based on the output of *vmware_vm_facts *in order to communicate or execute some a function on that VM via ansible. For that, you can use dynamic host configuration in Ansible. That will add a host dynamically and execute the module based on your configuration. If you want any further help regarding please let me know. I will help you. Regards, Indian Velumani On Thu, Jun 6, 2019 at 3:02 AM Marco Reale <[email protected]> wrote: > Hi guys > > Is there someone that coul help on this? > > Il mer 22 mag 2019, 10:55 PM Marco Reale <[email protected]> ha > scritto: > >> I have to goals with my plabook: >> >> >> a) get mac address from a specific VM running on vsphere >> >> b) add it to my inventory file >> >> >> My test environment is: >> -Vsphere 6.5 >> -Ansible 2.7 running on Centos 7.6 >> >> >> I have been able to make point a) following this post How retrieve the >> name of specific dictionary - Ansible >> <https://stackoverflow.com/questions/53453718/how-retrieve-the-name-of-specific-dictionary-ansible> >> >> >> Playbook: >> >> >> # Deploy a guest from a template* >> - hosts: 127.0.0.1 >> vars: >> vcenter_hostname: virtvcsami1.virtlab.local >> vcenter_user: [email protected] >> 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 }}" >> >> >> but now I still have two problems to solve: >> >> >> Problem 1) >> >> >> Playbook gets ALL virtual machines while I need to get just a VM named >> "testvm" >> >> [root@nlnxmi1 testvmcdromiso]# ansible-playbook getvminfo.yml >> >> PLAY [127.0.0.1] >> *********************************************************************************************************************************************************************************************** >> TASK [Gathering Facts] >> ***************************************************************************************************************************************************************************************** >> ok: [127.0.0.1] >> TASK [Gather VMware guest facts] >> ******************************************************************************************************************************************************************************* >> ok: [127.0.0.1 -> localhost] >> TASK [debug] >> *************************************************************************************************************************************************************************************************** >> 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'}}) => { >> "msg": [ "00:50:56:be:de: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'}}) => { "msg": [ >> "00:50:56:be:a3:a0" ] } ...... >> >> >> Trying to solve this tedious problem I posted on stackoverflow ( >> https://stackoverflow.com/questions/56243269/ansible-vmware-vm-facts-get-mac-address-for-a-specific-vm-and-write-it-to-exist/56245634#56245634) >> and a user gave me this suggestion: >> >> >> -----from stackoverflow---- >> >> That's not a problem. It looks like the vmware_vm_facts module returns a >> dictionary, so just ask for the vm you want: >> >> - debug: msg="{{ vm_guest_facts.virtual_machines['testvm'].mac_address }}" >> >> --------------------------------- >> >> >> So....I changed my playbook as suggested: >> >> >> # Deploy a guest from a template* >> - hosts: 127.0.0.1 >> vars: >> vcenter_hostname: virtvcsami1.virtlab.local >> vcenter_user: [email protected] >> 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 }}" >> - debug: msg="{{ vm_guest_facts.virtual_machines['testvm'].mac_address }}" >> >> >> but is this way I get an error: >> >> >> [root@nlnxmi1 testvmcdromiso]# ansible-playbook getvminfo.yml >> ERROR! Syntax Error while loading YAML. >> did not find expected key >> >> The error appears to have been in >> '/etc/ansible/testvmcdromiso/getvminfo.yml': line 22, column 4, but may be >> elsewhere in the file depending on the exact syntax problem. >> >> The offending line appears to be: >> >> #loop: "{{ vm_guest_facts.virtual_machines|dict2items }}" >> - debug: msg="{{ vm_guest_facts.virtual_machines['testvm'].mac_address }}" >> ^ here >> We could be wrong, but this one looks like it might be an issue with >> missing quotes. >Always quote template expression brackets when they >> start a value. For instance: >> >> with_items: >> - {{ foo }} >> >> Should be written as: >> >> with_items: >> - "{{ foo }}" >> >> >> Unfortunately the user on stackoverflow didn't reply anymore. This >> mailing list is last chance to get it working. >> >> >> Problem 2) >> >> >> Add mac address to existing inventory file or, if not possible, at least >> in some file >> >> Just as a stupid test I tried adding the following code at the end: >> >> >> - 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]# cat inventory >> [testhost] >> testvm macaddress=prova >> >> >> >> but as you can see I just used a "fixed" string instead I need to get the >> mac address from the running vm but never figure it out even after 2 days >> of attempts :( >> >> I'm just a beginner with ansible. Could you please help me? >> >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ansible Project" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ansible-project/59aa4ea9-fbb0-4165-9fc3-4a3e42cc5065%40googlegroups.com >> <https://groups.google.com/d/msgid/ansible-project/59aa4ea9-fbb0-4165-9fc3-4a3e42cc5065%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "Ansible Project" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/CAFHYfv_oQSKXmDa6E7TDpSCmVkfyYkbBYSosOjAiu24vJNHX-w%40mail.gmail.com > <https://groups.google.com/d/msgid/ansible-project/CAFHYfv_oQSKXmDa6E7TDpSCmVkfyYkbBYSosOjAiu24vJNHX-w%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAAcjD-Uhbx4dD9fh9Ad1yJ0GMSUuLYOBO90iXcdU_K9eaP4NSg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
