[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