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 :
$ ansible-playbook -e "resources: [vms,disks]" play.ymlthen run it as:with_items: "{{ resources | default('vms') }}.yml"- include: "{{ item }}"in tasks/main.ymlI am not Ansible expert, this maybe worth asking on Ansible users list,but one thing which you can do is following:
then have following files:
- tasks/vms.yml
- tasks/clusters.yml
- tasks/disks.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@abes.fr> wrote:
Thanks, all works as expected.
Now, I try make roles.
here it is :
cat /etc/ansible/roles/ovirt_vm_fa
cts/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_fa
cts/vars/main.yml pattern: "os=rhel_5x64 or os=rhel_5"
engine: air
username: admin@internal
password: ovirt123
insecure: trueand I call those files with /tmp/ovirt_vm_facts.yml with extra variables if needed
- hosts: localhost
connection: local
roles:
- ovirt_vm_factrunning 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@abes.fr> wrote:
Le 10/05/2017 à 10:29, Ondra Machacek a écrit :
I want a list of vms sorted by any possible attributes, i.e. sorted by datacenter or cluster, not only by status.pattern: "status = down"ca_file: /etc/pki/ovirt-engine/ca.pempassword: passwordusername: admin@internalurl: https://ovirt.example.com/ovirauth:ovirt_vms_facts:- name: Get stopped VMsFor example to get only stopped VMs, you can use following:Not sure I understand. You can use Ansible module to list VMs, youcan use ovirt_vms _facts[1] module.
t-engine/api
- 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/ovir t-engine/api/model#types/vm .On success. list
list_vms.py could be what I expect, but vm.datacenter_name doesn't exist
- About the python SDK:
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)
# Same for datacenter:
vm_dc = connection.follow_link(vm_clusWhat you need to understand is, what is the difference between the 'full'ter.data_center)
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.
On Wed, May 10, 2017 at 10:13 AM, Nathanaël Blanchet <blanchet@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@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@abes.fr
_______________________________________________
Users mailing list
Users@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 14 blanchet@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@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@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@abes.fr