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 <blanc...@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 <blanc...@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 <blanc...@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 <blanc...@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 >>>> blanc...@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 14blanc...@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 14blanc...@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 14blanc...@abes.fr > >
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users