[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