vmware_vm_inventory filters

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

@abijit reported community.vmware.vmware_vm_inventory but i did not find doc about it ie what all capabilities its filter has

tried but no luck

plugin: community.vmware.vmware_vm_inventory
strict: False
hostname: xxx
username: administrator@vsphere.local
password: xxx
validate_certs: False
#properties:
#- runtime.powerState
#- config.name
properties:

  • ‘name’
  • ‘config.uuid’
  • ‘config.name’
  • ‘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)”

i tested & found below works though

filters: - runtime.powerState == “poweredOff”

i am using
ansible 2.9.10

The page

https://docs.ansible.com/ansible/devel/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.html

Does not talk or give examples of filter …

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.

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

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

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: administrator@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.

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 …

Link :

https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html

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

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”
]
}
}

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 ?

Please ignore…i removed & re-added the tag & its working … Thanks @ Abhijeet Kasurde

Great …it filter not only based on Tags but custom attributes as well… !!!

BTW how to use this as dynamic inv ?

Tried below
ansible-playbook uptime-inv-based.yml -i vmware.yml

fixed

i changed

hosts: localhost

to

hosts: all

Is it possible to connect multiple vCenters at same time ?

No, for different vCenter you need to have multiple configuration files.

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