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 <blanc...@abes.fr <mailto: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
    <http://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 <mailto: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
        <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
        <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 <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@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
    <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
        <blanc...@abes.fr <mailto: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 <mailto: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 <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
                blanc...@abes.fr <mailto:blanc...@abes.fr>

                _______________________________________________
                Users mailing list
                Users@ovirt.org <mailto:Users@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
blanc...@abes.fr <mailto:blanc...@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
blanc...@abes.fr <mailto:blanc...@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
blanc...@abes.fr <mailto:blanc...@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
blanc...@abes.fr

_______________________________________________
Users mailing list
Users@ovirt.org
http://lists.ovirt.org/mailman/listinfo/users

Reply via email to