vmware_vm_inventory filters

662 views
Skip to first unread message

esxi...@gmail.com

unread,
Sep 4, 2020, 3:12:04 PM9/4/20
to Ansible Project
Hi

Needs any suggestion in my case as below 

We have vCenter where many linux bases vm which are use by other lob, there is no proper naming standard , no ip based filter possible , no folders arranged properly 

With all this, one thing which is in my control is add  "custom attributes"  

Is there any way we can filter using "custom attributes' 

Thanks 

esxi...@gmail.com

unread,
Sep 4, 2020, 3:21:46 PM9/4/20
to Ansible Project
@abijit reported  community.vmware.vmware_vm_inventory  but i did not find doc about it ie what all capabilities its filter has 
Message has been deleted

esxi...@gmail.com

unread,
Sep 4, 2020, 11:16:22 PM9/4/20
to Ansible Project
tried but no luck 


plugin: community.vmware.vmware_vm_inventory
strict: False
hostname: xxx
username: admini...@vsphere.local
password: xxx
validate_certs: False
#properties:
#- runtime.powerState
properties:
- 'name'
- 'config.uuid'
- 'guest.toolsStatus'
- 'guest.toolsRunningStatus'
- 'guest.ipAddress'
- 'configIssue'
- 'config.bootOptions'
- 'config.annotation'
- 'config.alternateGuestName'
compose:
  ansible_host: 'guest.ipAddress'
keyed_groups:
    - key: 'tags'
      separator: ''
filters:
- guest.GuestFullName == "CentOS 7 (64-bit)"




esxi...@gmail.com

unread,
Sep 4, 2020, 11:25:48 PM9/4/20
to Ansible Project
i tested & found below works though 

filters: - runtime.powerState == "poweredOff" 


i am using 
ansible 2.9.10

esxi...@gmail.com

unread,
Sep 4, 2020, 11:40:36 PM9/4/20
to Ansible Project

Abhijeet Kasurde

unread,
Sep 8, 2020, 3:17:32 AM9/8/20
to ansible...@googlegroups.com
Hi,
I raised a PR to address - how to use filters in vmware_vm_inventory - https://github.com/ansible/ansible/pull/71670
Please provide the feedback.

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/e9399bfb-3e24-4ab6-9fa5-46016a86a925n%40googlegroups.com.


--
Thanks,
Abhijeet Kasurde

esxi...@gmail.com

unread,
Sep 8, 2020, 7:01:30 PM9/8/20
to Ansible Project
Thanks a lot Abhijit

I did look at  https://github.com/ansible/ansible/pull/71670  , but not sure where i can give feedback. 


I am sure you got it & see a value & hence raise PR ... so for records Again i can give below feedback :-

If user get filter based on "custom attributes " will provide a lot of flexibility to users & with their own queries ..  

eg my org has 1 vcenter & has many lobs using it, a linux vm can be of of engg, infra, infosec & so on .. so i have a custom tag called "lob"... 

Thanks 

esxi...@gmail.com

unread,
Feb 7, 2021, 5:12:59 AM2/7/21
to Ansible Project
I checked that one, seems close, does that mean this feature is now in ? the docs does not talk about that - https://docs.ansible.com/ansible/devel/scenario_guides/vmware_scenarios/vmware_inventory_filters.html

Thanks

On Tuesday, September 8, 2020 at 12:17:32 AM UTC-7 Abhijeet Kasurde wrote:

Abhijeet Kasurde

unread,
Feb 7, 2021, 11:17:41 PM2/7/21
to ansible...@googlegroups.com
Hi,

You can use custom attributes assigned to vms using inventory. Let us assume that a VM has attributes as "OS" = "Linux" and "Backup" = "Monday" then
your inventory configuration looks like -

plugin: community.vmware.vmware_vm_inventory
strict: False
hostname: 10.8.36.25
username: admini...@vsphere.local
password: 2gJ.aGq8AU*tPAaii_
validate_certs: False
hostnames:
- 'config.name'
properties:
- 'config.name'
- 'config.guestId'
- 'guest.ipAddress'
- 'summary.runtime.powerState'
- 'customValue' # <----------------------------------  This way you can specify the customValues
filters:
- OS is defined and OS == 'Linux' #   <---------------------------------- This way you can filter customValue


You will get results like

# ansible-inventory -i filters_custom_attributes_vmware.yml --list
{
    "_meta": {
        "hostvars": {
            "centos_7": {
                "Backup": "Monday",
                "OS": "Linux",
                "config.guestId": "centos7_64Guest",
                "config.name": "centos_7",
                "runtime.connectionState": "connected",
                "summary.runtime.powerState": "poweredOff"
            }
        }
    },
    "all": {
        "children": [
            "centos7_64Guest",
            "poweredOff",
            "ungrouped"
        ]
    },
    "centos7_64Guest": {
        "hosts": [
            "centos_7"
        ]
    },
    "poweredOff": {
        "hosts": [
            "centos_7"
        ]
    }
}


Let me know if you need any additional information.



--
Thanks,
Abhijeet Kasurde

esxi...@gmail.com

unread,
Feb 8, 2021, 7:33:47 PM2/8/21
to Ansible Project
Abhijit actually i came across that one & tried below .. "per the documents" .. which were confusing BTW .. soon i will give link

filters:
- "tag_category.OS is defined and 'Ubuntu16.04' in tag_category.OS"

I had difficult  time to get this tested .. as for "tags" you see some extra stuff install & that install though looks straighforward but took me for spin .. so i am more into fixing the python issues ... May be you can help.. soon i will give all i tried & error i got ..

esxi...@gmail.com

unread,
Feb 8, 2021, 7:36:05 PM2/8/21
to Ansible Project

Link :


last 2 lines

filters: - "tag_category.OS is defined and 'Linux' in tag_category.OS"

How to i add "AND" or "OR" here ?

OS = CentOS7
And
LOB = Infra

esxi...@gmail.com

unread,
Feb 8, 2021, 7:46:24 PM2/8/21
to Ansible Project
Now the error :


 ansible-inventory --list -i vmware.yml
[WARNING]:  * Failed to parse /etc/ansible/playbooks/vmware.yml with ansible_collections.community.vmware.plugins.inventory.vmware_vm_inventory plugin: Unable to find 'vSphere
Automation SDK' Python library which is required. Please refer this URL for installation steps - https://code.vmware.com/web/sdk/7.0/vsphere-automation-python
[WARNING]: Unable to parse /etc/ansible/playbooks/vmware.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
    "_meta": {
        "hostvars": {}
    },
    "all": {
        "children": [
            "ungrouped"
        ]
    }
}









#######################################


tried below 2

scl enable rh-python36 bash
 ansible-inventory --list -i vmware.yml
[WARNING]:  * Failed to parse /etc/ansible/playbooks/vmware.yml with ansible_collections.community.vmware.plugins.inventory.vmware_vm_inventory plugin: Unable to find 'vSphere
Automation SDK' Python library which is required. Please refer this URL for installation steps - https://code.vmware.com/web/sdk/7.0/vsphere-automation-python
[WARNING]: Unable to parse /etc/ansible/playbooks/vmware.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
    "_meta": {
        "hostvars": {}
    },
    "all": {
        "children": [
            "ungrouped"
        ]
    }
}



#######################################



 python --version
Python 3.6.12

 ansible --version
ansible 2.9.14
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]


OS :-
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core


#######################################



Now i will try what you gave

#######################################

- 'customValue' # <----------------------------------  This way you can specify the customValues
filters:
- OS is defined and OS == 'Linux' #   <---------------------------------- This way you can filter customValue

###############################
########



Install was done & was ok when i upgrade to python 3x :


pip install --upgrade pip setuptools





Please suggest ( google did not give any clue for fix )

esxi...@gmail.com

unread,
Feb 9, 2021, 10:01:47 PM2/9/21
to Ansible Project
tested on Ubuntu 20.04 ..

I am able to see all vms

eg


            "xx": {
                "Application": "xx",
                "Environment": "xx",
                "LOB": "xx",
                "Location": "xx",
                "NB_LAST_BACKUP": "xx",
                "OS": "Ubuntu18.04",
                "ansible_host": "xx",
                "categories": [
                    "Backup Retention Policy",
                    "OS"
                ],
                "config.guestId": "ubuntu64Guest",
                "config.name": "xx",
                "guest.ipAddress": "xx",
                "runtime.connectionState": "connected",
                "summary.runtime.powerState": "poweredOn",
                "tag_category.Backup Retention Policy": [
                    "Backup-Bronze"
                ],
                "tag_category.OS": [
                    "Ubuntu18.04"
                ],
                "tags": [
                    "Backup-Bronze",
                    "Ubuntu18.04"
                ]
            }
        }
    },





As soon as i added


filters:
- OS is defined and OS == 'Ubuntu18.04'

I get below

{
    "_meta": {
        "hostvars": {}
    },
    "all": {
        "children": [
            "ungrouped"
        ]
    }
}




Any suggestions Please ?

esxi...@gmail.com

unread,
Feb 9, 2021, 10:06:40 PM2/9/21
to Ansible Project
Please ignore..i removed & re-added the tag & its working .. Thanks @ Abhijeet Kasurde

esxi...@gmail.com

unread,
Feb 9, 2021, 10:10:45 PM2/9/21
to Ansible Project
Great ...it filter not only based on Tags but custom attributes as well... !!!

esxi...@gmail.com

unread,
Feb 10, 2021, 6:42:24 PM2/10/21
to Ansible Project
BTW how to use this as dynamic inv ?
 Tried below
ansible-playbook  uptime-inv-based.yml  -i vmware.yml

---
## This playbook is for :

- name: Simple play
  hosts: localhost
  gather_facts: yes
  remote_user: ansible
  tasks:
    - name: find uptime
      command: uptime
      register: uptime_output
    - debug: msg="{{uptime_output.stdout_lines}}"

    - debug:
        var: vars.groups.all


its gives uptime of local box ..

esxi...@gmail.com

unread,
Feb 10, 2021, 8:32:33 PM2/10/21
to Ansible Project
fixed

i changed

hosts: localhost


to

hosts: all

esxi...@gmail.com

unread,
Feb 10, 2021, 10:10:30 PM2/10/21
to Ansible Project
Is it possible to connect multiple vCenters at same time ?

On Sunday, February 7, 2021 at 8:17:41 PM UTC-8 Abhijeet Kasurde wrote:

Abhijeet Kasurde

unread,
Feb 10, 2021, 11:12:00 PM2/10/21
to ansible...@googlegroups.com
No, for different vCenter you need to have multiple configuration files.



--
Thanks,
Abhijeet Kasurde

esxi...@gmail.com

unread,
Feb 10, 2021, 11:58:06 PM2/10/21
to Ansible Project
That will be a good & handy feature request... as you can imagin for so many use cases & for ease  .. BTW with powercli it is possible to do this.. so is technically possible as well

Please suggest what you think Abhijeet
Reply all
Reply to author
Forward
0 new messages