This worked for me:
---
- hosts: localhost
connection: local
vars_files:
- ../vars.yml
tasks:
- name: Obtain SSO token
ovirt_auth:
url: "{{ url }}"
username: "{{ username }}"
password: "{{ password }}"
insecure: "{{ insecure }}"
- name: List vms
ovirt_vms_facts:
fetch_nested: true
nested_attributes:
- description
auth: "{{ ovirt_auth }}"
- name: set vms
set_fact:
vm: "{{ item.name }}: {{ item.snapshots |
map(attribute='description') | join(',') }}"
with_items: "{{ ovirt_vms }}"
loop_control:
label: "{{ item.name }}"
register: all_vms
- name: make a list
set_fact: vms="{{ all_vms.results | map(attribute='ansible_facts.vm') |
list }}"
- name: Print vms
debug:
var: vms
Can you please open an issue on Ansible github[1], and describe what
exactly issue do you have?
Thanks!
[1]
On Fri, May 12, 2017 at 7:11 PM, Nathanaël Blanchet <blanchet(a)abes.fr>
wrote:
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(a)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
> 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@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(a)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
>> username: admin@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
>> username: admin@internal
>> password: ovirt123
>> insecure: true
>> pattern: name=centos* and cluster=west
>> - debug:
>> var: ovirt_vms
>> - shell: echo "{{ 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
> username: admin@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. 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
>
> # Same for datacenter:
> vm_dc = connection.follow_link(vm_cluster.data_center)
> print 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
>>
>> On Wed, May 10, 2017 at 10:13 AM, Nathanaël Blanchet <blanchet(a)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(a)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, [ip.address for ip in device.ips]) for device in
>>>> devices
>>>> File "./ovirt4.py", line 185, in <genexpr>
>>>> (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
>>>
>>>
>>>>
>>>>
>>>> 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/e
>>> xamples/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(a)abes.fr
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users(a)ovirt.org
>>>>
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 14blanchet(a)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 14blanchet(a)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 14blanchet(a)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 14blanchet(a)abes.fr