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.

Reply via email to