<div dir="ltr"><div><div>This worked for me:<br><br>---<br>- hosts: localhost<br> connection: local<br> vars_files:<br> - ../vars.yml<br><br> tasks:<br> - name: Obtain SSO token<br> ovirt_auth:<br> url: "{{ url }}"<br> username: "{{ username }}"<br> password: "{{ password }}"<br> insecure: "{{ insecure }}"<br><br> - name: List vms<br> ovirt_vms_facts:<br> fetch_nested: true<br> nested_attributes:<br> - description<br> auth: "{{ ovirt_auth }}"<br> <br> - name: set vms<br> set_fact:<br> vm: "{{ <a href="http://item.name">item.name</a> }}: {{ item.snapshots | map(attribute='description') | join(',') }}"<br> with_items: "{{ ovirt_vms }}"<br> loop_control:<br> label: "{{ <a href="http://item.name">item.name</a> }}"<br> register: all_vms<br><br> - name: make a list<br> set_fact: vms="{{ all_vms.results | map(attribute='ansible_facts.vm') | list }}"<br><br> - name: Print vms<br> debug:<br> var: vms<br><br></div>Can you please open an issue on Ansible github[1], and describe what exactly issue do you have?<br></div>Thanks!<br><div><br>[1] <a href="https://github.com/ansible/ansible/issues">https://github.com/ansible/ansible/issues</a><br><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 12, 2017 at 7:11 PM, Nathanaël Blanchet <span dir="ltr"><<a href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<p>Great, it works like a charm!</p>
<p>But how could I obtain a several map display?</p>
<p>For example, I need to display the vm name ; its relative
snaphost id and snaphot description.</p>
<p> I tried to change filter, but notyhing works<br>
</p>
<p>msg: "{{ ovirt_snapshots | map(attribute='description') |
map(attribute='id') | join(' ') }}"</p>
<p>or something like<br>
</p>
<p>msg: "{{ ovirt_snapshots.vm | map(attribute='name') |
map(attribute='id') | join(' ') }}"</p>
<p>Thanks for helping.</p>
<p>ps: I tried nearly all modules, and the permissions one is
bugged, only internal-authz domain displays users, none of ldap
one can display.<br>
</p><div><div class="h5">
<br>
<div class="m_-5403566790855348559moz-cite-prefix">Le 11/05/2017 à 20:14, Ondra Machacek a
écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>I am not Ansible expert, this maybe worth
asking on Ansible users list,<br>
</div>
but one thing which you can do is following:<br>
<br>
</div>
in tasks/main.yml<br>
<br>
</div>
- include: "{{ item }}"<br>
</div>
with_items: "{{ resources | default('vms') }}.yml"<br>
<br>
then have following files:<br>
- tasks/vms.yml<br>
- tasks/clusters.yml<br>
- tasks/disks.yml<br>
- ...<br>
<br>
</div>
then run it as:<br>
<br>
</div>
$ ansible-playbook -e "resources: [vms,disks]" play.yml<br>
$ ansible-playbook -e "resources: [clusters]
clusters_pattern=name=x*" play.yml<br>
<br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Thu, May 11, 2017 at 6:34 PM,
Nathanaël Blanchet <span dir="ltr"><<a href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<p>Thanks, all works as expected.</p>
<p>Now, I try make roles.</p>
<p>here it is : <br>
</p>
<p><b>cat /etc/ansible/roles/ovirt_vm_fa<wbr>cts/tasks/main.yml</b></p>
<p> - name: get vm facts<br>
ovirt_vms_facts:<br>
auth:<br>
url: <a class="m_-5403566790855348559m_7298570659494759391moz-txt-link-freetext">https://</a>{{
engine }}.<a href="http://v100.abes.fr/ovirt-engine/api" target="_blank">v100.abes.fr/ovirt-engine/a<wbr>pi</a><br>
username: "{{ username }}"<br>
password: "{{ password }}"<br>
insecure: "{{ insecure }}"<br>
pattern: "{{ pattern }}"<br>
- debug:<br>
msg: "{{ ovirt_vms | map(attribute='name') |
join(' ') }}"</p>
<p><b>cat /etc/ansible/roles/ovirt_vm_fa<wbr>cts/vars/main.yml</b></p>
<p>pattern: "os=rhel_5x64 or os=rhel_5"<br>
engine: air<span><br>
username: admin@internal<br>
password: ovirt123<br>
insecure: true</span></p>
<p>and I call those files with <b>/tmp/ovirt_vm_facts.yml</b>
with extra variables if needed<br>
</p>
<p><span>- hosts: localhost<br>
connection: local<br>
</span> roles:<br>
- ovirt_vm_fact</p>
<p>running ansible-playbook /tmp/ovirt_vm_facts.ym -e
'pattern="name=acier* and cluster=Dev"'<br>
</p>
<p><b>But..</b></p>
<p>I don't want to do the same for each ansible module
shipped with 2.3.</p>
<p>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:</p>
<p><span>- hosts: localhost<br>
connection: local<br>
</span> roles:<br>
- ovirt_facts (with somewhere a variable "myfact")<br>
</p>
<p>which would play an unique role <b>/etc/ansible/roles/ovirt_facts<wbr>/tasks/main.yml
with</b></p>
<p><br>
- name: get vm facts<br>
myfact<br>
auth:<br>
....<br>
</p>
<p>Hope to be clear enough, thank your for your help.<br>
</p>
<div>
<div class="m_-5403566790855348559h5"> <br>
<div class="m_-5403566790855348559m_7298570659494759391moz-cite-prefix">Le
10/05/2017 à 13:14, Ondra Machacek a écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, May 10, 2017 at
12:38 PM, Nathanaël Blanchet <span dir="ltr"><<a href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF"><span class="m_-5403566790855348559m_7298570659494759391gmail-"> Le
10/05/2017 à 10:29, Ondra Machacek a
écrit :<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>Not sure I
understand. You
can use Ansible
module to list
VMs, you<br>
</div>
can use ovirt_vms
_facts[1] module.<br>
<br>
</div>
For example to get
only stopped VMs,
you can use
following:<br>
<br>
</div>
- name: Get stopped
VMs<br>
</div>
ovirt_vms_facts:<br>
</div>
auth:<br>
</div>
url: <a href="https://ovirt.example.com/ovirt-engine/api" target="_blank">https://ovirt.example.com/ovir<wbr>t-engine/api</a><br>
</div>
username: admin@internal<br>
</div>
password: password<br>
</div>
ca_file:
/etc/pki/ovirt-engine/ca.pem<br>
</div>
pattern: "status = down"<br>
</div>
</blockquote>
</span> I want a list of vms sorted by any
possible attributes, i.e. sorted by
datacenter or cluster, not only by status.<br>
<ul>
<li>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:</li>
</ul>
<br>
- hosts: localhost<br>
connection: local<br>
tasks:<span class="m_-5403566790855348559m_7298570659494759391gmail-"><br>
- name: Get stopped VMs<br>
ovirt_vms_facts:<br>
auth:<br>
</span> url: <a class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143moz-txt-link-freetext" href="https://acore.v100.abes.fr/ovirt-engine/api" target="_blank">https://acore.v100.abes.fr/ovi<wbr>rt-engine/api</a><br>
username: admin@internal<br>
password: ovirt123<br>
insecure: true<br>
pattern: name=centos* and
cluster=west<br>
- debug:<br>
var: ovirt_vms<br>
- shell: echo "{{ <a href="http://ovirt_vms.name" target="_blank">ovirt_vms.name</a> }}"<br>
</div>
</blockquote>
<div><br>
<br>
</div>
<div>Ok, I understand, now.<br>
</div>
<div>You have few options here.<br>
</div>
<div>If you want for example only VMs from
datacenter 'X', you can use following:<br>
<br>
- hosts: localhost<br>
connection: local<br>
tasks:<span class="m_-5403566790855348559m_7298570659494759391gmail-im"><br>
- name: Get VMs from datacenter X<br>
ovirt_vms_facts:</span><br>
<span class="m_-5403566790855348559m_7298570659494759391gmail-im">
pattern: datacenter=X<br>
auth:<br>
</span> url: <a class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143moz-txt-link-freetext" href="https://acore.v100.abes.fr/ovirt-engine/api" target="_blank">https://acore.v100.abes.fr/ovi<wbr>rt-engine/api</a><br>
username: admin@internal<br>
password: ovirt123<br>
insecure: true<br>
- debug:<br>
msg: "{{ ovirt_vms |
map(attribute='name') | list }}"<br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF"> <br>
How can I successfully display this list
of vms like described here :<br>
<table cellpadding="4" border="1">
<tbody>
<tr>
<th class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143head">name</th>
<th class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143head">description</th>
<th class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143head">returned</th>
<th class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143head">type</th>
<th class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143head">sample</th>
</tr>
<tr>
<td> ovirt_vms </td>
<td> List of dictionaries describing
the VMs. VM attribues are mapped
to dictionary keys, all VMs
attributes can be found at
following url: <a class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143moz-txt-link-freetext" href="https://ovirt.example.com/ovirt-engine/api/model#types/vm" target="_blank">https://ovirt.example.com/ovir<wbr>t-engine/api/model#types/vm</a>.
</td>
<td align="center"> On success. </td>
<td align="center"> list </td>
<td align="center"> <br>
</td>
</tr>
</tbody>
</table>
<br>
<ul>
<li>About the python SDK:</li>
</ul>
list_vms.py could be what I expect, but
vm.datacenter_name doesn't exist</div>
</blockquote>
<div><br>
</div>
<div>Yes, because the 'data_center' parameter
isn't part of the VM type. Take a look
here[1],<br>
</div>
<div>you will find there all attributes the VM
has. As you can see there is no
'datacenter', but<br>
</div>
<div>there is a 'cluster', but as said in
documentation, it's just a reference to the
cluster. That<br>
</div>
<div>means that it contains the ID of the
cluster and the 'href' to the cluster, so
you can get<br>
</div>
<div>the cluster object by following that
reference using this code:<br>
<br>
</div>
<div> vm_cluster = connection.follow_link(vm.clus<wbr>ter)<br>
</div>
<div> print <a href="http://vm_cluster.name" target="_blank">vm_cluster.name</a><br>
<br>
</div>
<div> # Same for datacenter:<br>
</div>
<div> vm_dc = connection.follow_link(vm_clus<wbr>ter.data_center)<br>
</div>
<div> print <a href="http://vm_dc.name" target="_blank">vm_dc.name</a><br>
<br>
</div>
What you need to understand is, what is the
difference between the 'full'<br>
</div>
<div class="gmail_quote">object and the
reference to the object. It's good to take a
look at the XML<br>
</div>
<div class="gmail_quote">output of the API and
learn to read the API specification
documentation,<br>
</div>
<div class="gmail_quote">when working with oVirt
Ansible and Python SDK.<br>
</div>
<div class="gmail_quote">
<div><br>
[1] <a href="http://ovirt.github.io/ovirt-engine-api-model/master/#types/vm" target="_blank">http://ovirt.github.io/ovirt-e<wbr>ngine-api-model/master/#types/<wbr>vm</a><br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF">
<div>
<div class="m_-5403566790855348559m_7298570659494759391gmail-h5"><br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><br>
[1] <a href="http://docs.ansible.com/ansible/ovirt_vms_facts_module.html" target="_blank">http://docs.ansible.com/ansibl<wbr>e/ovirt_vms_facts_module.html</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed,
May 10, 2017 at 10:13 AM,
Nathanaël Blanchet <span dir="ltr"><<a href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF">
<p>Thanks, I knew this
python script, but I
believed it was possible
to do the same with an
ansible module.</p>
<p>That's mean we need
several tools to do
different tasks, it is not
a very convergent way to
proceed... but it is
feasable.<br>
</p>
<div>
<div class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143h5">
<br>
<div class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143m_-2614652977139427754moz-cite-prefix">Le
10/05/2017 à 07:56,
Ondra Machacek a
écrit :<br>
</div>
<blockquote type="cite">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On
Tue, May 9, 2017
at 6:52 PM,
Nathanaël
Blanchet <span dir="ltr"><<a href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
I didn't find
anyway to easy
list all my
vms thanks to
the ansible
modules...<br>
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:<br>
<br>
File
"./ovirt4.py",
line 262, in
<module><br>
main()<br>
File
"./ovirt4.py",
line 254, in
main<br>
vm_name=args.host,<br>
File
"./ovirt4.py",
line 213, in
get_data<br>
vms[name]
=
get_dict_of_struct(connection,
vm)<br>
File
"./ovirt4.py",
line 185, in
get_dict_of_struct<br>
(<a href="http://device.name" rel="noreferrer" target="_blank">device.name</a>,
[ip.address
for ip in
device.ips])
for device in
devices<br>
File
"./ovirt4.py",
line 185, in
<genexpr><br>
(<a href="http://device.name" rel="noreferrer" target="_blank">device.name</a>,
[ip.address
for ip in
device.ips])
for device in
devices<br>
TypeError:
'NoneType'
object is not
iterable<br>
</blockquote>
<div><br>
</div>
<div>This error
was fixed
already, try
to download
latest
ovirt4.py
file.<br>
<br>
</div>
<div>The other
way is to use
fatcs[1]
module.<br>
<br>
[1] <a href="http://docs.ansible.com/ansible/ovirt_vms_facts_module.html" target="_blank">http://docs.ansible.com/ansibl<wbr>e/ovirt_vms_facts_module.html</a><br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
What is the
simpliest way
to get this
basic
information
with sdk4???
(with sdk3 :
ovirt-shell -E
"list vms")<br>
</blockquote>
<div><br>
</div>
<div>Please take
a look at the
following
example:<br>
<br>
<a href="https://github.com/oVirt/ovirt-engine-sdk/blob/master/sdk/examples/list_vms.py" target="_blank">https://github.com/oVirt/ovir<wbr>t-engine-sdk/blob/master/sdk/e<wbr>xamples/list_vms.py</a><br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
<br>
-- <br>
Nathanaël
Blanchet<br>
<br>
Supervision
réseau<br>
Pôle
Infrastrutures
Informatiques<br>
227 avenue
Professeur-Jean-Louis-Viala<br>
34193
MONTPELLIER
CEDEX 5 <br>
Tél. 33 (0)4
67 54 84 55<br>
Fax 33 (0)4
67 54 84 14<br>
<a href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a><br>
<br>
______________________________<wbr>_________________<br>
Users mailing
list<br>
<a href="mailto:Users@ovirt.org" target="_blank">Users@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman<wbr>/listinfo/users</a><br>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
<pre class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143m_-2614652977139427754moz-signature" cols="72">--
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
<a class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143m_-2614652977139427754moz-txt-link-abbreviated" href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a> </pre>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<pre class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143moz-signature" cols="72">--
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
<a class="m_-5403566790855348559m_7298570659494759391gmail-m_344037001981379143moz-txt-link-abbreviated" href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a> </pre>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
<pre class="m_-5403566790855348559m_7298570659494759391moz-signature" cols="72">--
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
<a class="m_-5403566790855348559m_7298570659494759391moz-txt-link-abbreviated" href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a> </pre>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<pre class="m_-5403566790855348559moz-signature" cols="72">--
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
<a class="m_-5403566790855348559moz-txt-link-abbreviated" href="mailto:blanchet@abes.fr" target="_blank">blanchet@abes.fr</a> </pre>
</div></div></div>
</blockquote></div><br></div>