[ovirt-users] ansible and list of vms

Nathanaël Blanchet blanchet at abes.fr
Thu May 11 16:34:22 UTC 2017


Thanks, all works as expected.

Now, I try make roles.

here it is :

*cat /etc/ansible/roles/ovirt_vm_facts/tasks/main.yml*

   - name: get vm facts
     ovirt_vms_facts:
       auth:
         url: https://{{ engine }}.v100.abes.fr/ovirt-engine/api
         username: "{{ username }}"
         password: "{{ password }}"
         insecure: "{{ insecure }}"
       pattern: "{{ pattern }}"
   - debug:
       msg: "{{ ovirt_vms | map(attribute='name') | join(' ') }}"

*cat /etc/ansible/roles/ovirt_vm_facts/vars/main.yml*

pattern: "os=rhel_5x64 or os=rhel_5"
engine: air
username: admin at internal
password: ovirt123
insecure: true

and I call those files with */tmp/ovirt_vm_facts.yml* with extra 
variables if needed

- hosts: localhost
   connection: local
   roles:
     - ovirt_vm_fact

running ansible-playbook /tmp/ovirt_vm_facts.ym -e 'pattern="name=acier* 
and cluster=Dev"'

*But..*

I don't want to do the same for each ansible module shipped with 2.3.

Knowing that each *facts module has the same structure auth/pattern, is 
there a way to play a generic playbook independant from the role, like:

- hosts: localhost
   connection: local
   roles:
     - ovirt_facts (with somewhere a variable "myfact")

which would play an unique role 
*/etc/ansible/roles/ovirt_facts/tasks/main.yml with*


- name: get vm facts
     myfact
       auth:
         ....

Hope to be clear enough, thank your for your help.


Le 10/05/2017 à 13:14, Ondra Machacek a écrit :
>
>
> On Wed, May 10, 2017 at 12:38 PM, Nathanaël Blanchet <blanchet at abes.fr 
> <mailto:blanchet at abes.fr>> wrote:
>
>     Le 10/05/2017 à 10:29, Ondra Machacek a écrit :
>>     Not sure I understand. You can use Ansible module to list VMs, you
>>     can use ovirt_vms _facts[1] module.
>>
>>     For example to get only stopped VMs, you can use following:
>>
>>     - name: Get stopped VMs
>>       ovirt_vms_facts:
>>         auth:
>>           url: https://ovirt.example.com/ovirt-engine/api
>>     <https://ovirt.example.com/ovirt-engine/api>
>>           username: admin at internal
>>           password: password
>>           ca_file: /etc/pki/ovirt-engine/ca.pem
>>         pattern: "status = down"
>     I want a list of vms sorted by any possible attributes, i.e.
>     sorted by datacenter or cluster, not only by status.
>
>       * For example, ovirt_vms_facts doesn't allow to get the
>         datacenter the vm belongs to , and the pattern filter doesn't
>         return a list of vms as expected:
>
>
>     - hosts: localhost
>       connection: local
>       tasks:
>       - name: Get stopped VMs
>         ovirt_vms_facts:
>           auth:
>             url: https://acore.v100.abes.fr/ovirt-engine/api
>     <https://acore.v100.abes.fr/ovirt-engine/api>
>             username: admin at internal
>             password: ovirt123
>             insecure: true
>             pattern: name=centos* and cluster=west
>       - debug:
>           var: ovirt_vms
>       - shell: echo "{{ ovirt_vms.name <http://ovirt_vms.name> }}"
>
>
>
> Ok, I understand, now.
> You have few options here.
> If you want for example only VMs from datacenter 'X', you can use 
> following:
>
> - hosts: localhost
>   connection: local
>   tasks:
>   - name: Get VMs from datacenter X
>     ovirt_vms_facts:
>       pattern: datacenter=X
>       auth:
>         url: https://acore.v100.abes.fr/ovirt-engine/api 
> <https://acore.v100.abes.fr/ovirt-engine/api>
>         username: admin at internal
>         password: ovirt123
>         insecure: true
>   - debug:
>       msg: "{{ ovirt_vms | map(attribute='name') | list }}"
>
>
>     How can I successfully display this list of vms like described here :
>     name 	description 	returned 	type 	sample
>     ovirt_vms 	List of dictionaries describing the VMs. VM attribues
>     are mapped to dictionary keys, all VMs attributes can be found at
>     following url:
>     https://ovirt.example.com/ovirt-engine/api/model#types/vm
>     <https://ovirt.example.com/ovirt-engine/api/model#types/vm>. 	On
>     success. 	list 	
>
>
>       * About the python SDK:
>
>     list_vms.py could be what I expect, but vm.datacenter_name doesn't
>     exist
>
>
> Yes, because the 'data_center' parameter isn't part of the VM type. 
> Take a look here[1],
> you will find there all attributes the VM has. As you can see there is 
> no 'datacenter', but
> there is a 'cluster', but as said in documentation, it's just a 
> reference to the cluster. That
> means that it contains the ID of the cluster and the 'href' to the 
> cluster, so you can get
> the cluster object by following that reference using this code:
>
>  vm_cluster = connection.follow_link(vm.cluster)
>  print vm_cluster.name <http://vm_cluster.name>
>
>  # Same for datacenter:
>  vm_dc = connection.follow_link(vm_cluster.data_center)
>  print vm_dc.name <http://vm_dc.name>
>
> What you need to understand is, what is the difference between the 'full'
> object and the reference to the object. It's good to take a look at 
> the XML
> output of the API and learn to read the API specification documentation,
> when working with oVirt Ansible and Python SDK.
>
> [1] http://ovirt.github.io/ovirt-engine-api-model/master/#types/vm
>
>
>>
>>     [1] http://docs.ansible.com/ansible/ovirt_vms_facts_module.html
>>     <http://docs.ansible.com/ansible/ovirt_vms_facts_module.html>
>>
>>     On Wed, May 10, 2017 at 10:13 AM, Nathanaël Blanchet
>>     <blanchet at abes.fr <mailto:blanchet at abes.fr>> wrote:
>>
>>         Thanks, I knew this python script, but I believed it was
>>         possible to do the same with an ansible module.
>>
>>         That's mean we need several tools to do different tasks, it
>>         is not a very convergent way to proceed... but it is feasable.
>>
>>
>>         Le 10/05/2017 à 07:56, Ondra Machacek a écrit :
>>>
>>>
>>>         On Tue, May 9, 2017 at 6:52 PM, Nathanaël Blanchet
>>>         <blanchet at abes.fr <mailto:blanchet at abes.fr>> wrote:
>>>
>>>             Hello,
>>>
>>>             I didn't find anyway to easy list all my vms thanks to
>>>             the ansible modules...
>>>             I tried the ovirt4.py script which is able to list the
>>>             whole facts, so vms list, when the number of them is
>>>             small in a test datacenter, but in a production
>>>             datacenter, I get an issue:
>>>
>>>               File "./ovirt4.py", line 262, in <module>
>>>                 main()
>>>               File "./ovirt4.py", line 254, in main
>>>                 vm_name=args.host,
>>>               File "./ovirt4.py", line 213, in get_data
>>>                 vms[name] = get_dict_of_struct(connection, vm)
>>>               File "./ovirt4.py", line 185, in get_dict_of_struct
>>>                 (device.name <http://device.name>, [ip.address for
>>>             ip in device.ips]) for device in devices
>>>               File "./ovirt4.py", line 185, in <genexpr>
>>>                 (device.name <http://device.name>, [ip.address for
>>>             ip in device.ips]) for device in devices
>>>             TypeError: 'NoneType' object is not iterable
>>>
>>>
>>>         This error was fixed already, try to download latest
>>>         ovirt4.py file.
>>>
>>>         The other way is to use fatcs[1] module.
>>>
>>>         [1]
>>>         http://docs.ansible.com/ansible/ovirt_vms_facts_module.html
>>>         <http://docs.ansible.com/ansible/ovirt_vms_facts_module.html>
>>>
>>>
>>>
>>>             What is the simpliest way to get this basic information
>>>             with sdk4??? (with sdk3 : ovirt-shell -E "list vms")
>>>
>>>
>>>         Please take a look at the following example:
>>>
>>>         https://github.com/oVirt/ovirt-engine-sdk/blob/master/sdk/examples/list_vms.py
>>>         <https://github.com/oVirt/ovirt-engine-sdk/blob/master/sdk/examples/list_vms.py>
>>>
>>>
>>>
>>>
>>>             -- 
>>>             Nathanaël Blanchet
>>>
>>>             Supervision réseau
>>>             Pôle Infrastrutures Informatiques
>>>             227 avenue Professeur-Jean-Louis-Viala
>>>             34193 MONTPELLIER CEDEX 5
>>>             Tél. 33 (0)4 67 54 84 55
>>>             Fax  33 (0)4 67 54 84 14
>>>             blanchet at abes.fr <mailto:blanchet at abes.fr>
>>>
>>>             _______________________________________________
>>>             Users mailing list
>>>             Users at ovirt.org <mailto:Users at ovirt.org>
>>>             http://lists.ovirt.org/mailman/listinfo/users
>>>             <http://lists.ovirt.org/mailman/listinfo/users>
>>>
>>>
>>
>>         -- 
>>         Nathanaël Blanchet
>>
>>         Supervision réseau
>>         Pôle Infrastrutures Informatiques
>>         227 avenue Professeur-Jean-Louis-Viala
>>         34193 MONTPELLIER CEDEX 5 	
>>         Tél. 33 (0)4 67 54 84 55
>>         Fax  33 (0)4 67 54 84 14
>>         blanchet at abes.fr <mailto:blanchet at abes.fr>  
>>
>>
>
>     -- 
>     Nathanaël Blanchet
>
>     Supervision réseau
>     Pôle Infrastrutures Informatiques
>     227 avenue Professeur-Jean-Louis-Viala
>     34193 MONTPELLIER CEDEX 5 	
>     Tél. 33 (0)4 67 54 84 55
>     Fax  33 (0)4 67 54 84 14
>     blanchet at abes.fr <mailto:blanchet at abes.fr>  
>
>

-- 
Nathanaël Blanchet

Supervision réseau
Pôle Infrastrutures Informatiques
227 avenue Professeur-Jean-Louis-Viala
34193 MONTPELLIER CEDEX 5 	
Tél. 33 (0)4 67 54 84 55
Fax  33 (0)4 67 54 84 14
blanchet at abes.fr

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/users/attachments/20170511/a52ec104/attachment-0001.html>


More information about the Users mailing list