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. For more options, visit https://groups.google.com/d/optout.
