[ovirt-users] ansible and list of vms

Nathanaël Blanchet blanchet at abes.fr
Fri May 12 17:11:01 UTC 2017


Great, it works like a charm!

But how could I obtain a several map display?

For example, I need to display the vm name ; its relative snaphost id 
and snaphot description.

I tried to change filter, but notyhing works

msg: "{{ ovirt_snapshots | map(attribute='description') | 
map(attribute='id') | join(' ') }}"

or something like

msg: "{{ ovirt_snapshots.vm | map(attribute='name') | 
map(attribute='id') | join(' ') }}"

Thanks for helping.

ps: I tried nearly all modules, and the permissions one is bugged, only 
internal-authz domain displays users, none of ldap one can display.


Le 11/05/2017 à 20:14, Ondra Machacek a écrit :
> I am not Ansible expert, this maybe worth asking on Ansible users list,
> but one thing which you can do is following:
>
> in tasks/main.yml
>
> - include: "{{ item }}"
>   with_items: "{{ resources | default('vms') }}.yml"
>
> then have following files:
>  - tasks/vms.yml
>  - tasks/clusters.yml
>  - tasks/disks.yml
>  - ...
>
> then run it as:
>
>  $ ansible-playbook -e "resources: [vms,disks]" play.yml
>  $ ansible-playbook -e "resources: [clusters] 
> clusters_pattern=name=x*" play.yml
>
>
> On Thu, May 11, 2017 at 6:34 PM, Nathanaël Blanchet <blanchet at abes.fr 
> <mailto:blanchet at abes.fr>> wrote:
>
>     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
>     <http://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
>>     <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 <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/20170512/9a87c68d/attachment-0001.html>


More information about the Users mailing list