mirror of https://github.com/ansible/ansible.git
vmware: Add docs for filters (#71670)
Add a scenario guide for filters in VMware documentation Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>pull/71770/head
parent
c36e939414
commit
760334303b
@ -0,0 +1,216 @@
|
|||||||
|
.. _vmware_ansible_inventory_using_filters:
|
||||||
|
|
||||||
|
***********************************************
|
||||||
|
Using VMware dynamic inventory plugin - Filters
|
||||||
|
***********************************************
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
|
||||||
|
VMware dynamic inventory plugin - filtering VMware guests
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
|
||||||
|
VMware inventory plugin allows you to filter VMware guests using the ``filters`` configuration parameter.
|
||||||
|
|
||||||
|
This section shows how you configure ``filters`` for the given VMware guest in the inventory.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
To use the VMware dynamic inventory plugins, you must install `pyVmomi <https://github.com/vmware/pyvmomi>`_
|
||||||
|
on your control node (the host running Ansible).
|
||||||
|
|
||||||
|
To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK <https://code.vmware.com/web/sdk/65/vsphere-automation-python>`_, which supports REST API features such as tagging and content libraries, on your control node.
|
||||||
|
You can install the ``vSphere Automation SDK`` following `these instructions <https://github.com/vmware/vsphere-automation-sdk-python#installing-required-python-packages>`_.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ pip install pyvmomi
|
||||||
|
|
||||||
|
Starting in Ansible 2.10, the VMware dynamic inventory plugin is available in the ``community.vmware`` collection included Ansible.
|
||||||
|
Alternately, to install the latest ``community.vmware`` collection:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ansible-galaxy collection install community.vmware
|
||||||
|
|
||||||
|
To use this VMware dynamic inventory plugin:
|
||||||
|
|
||||||
|
1. Enable it first by specifying the following in the ``ansible.cfg`` file:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[inventory]
|
||||||
|
enable_plugins = community.vmware.vmware_vm_inventory
|
||||||
|
|
||||||
|
2. Create a file that ends in ``vmware.yml`` or ``vmware.yaml`` in your working directory.
|
||||||
|
|
||||||
|
The ``vmware_vm_inventory`` inventory plugin takes in the same authentication information as any other VMware modules does.
|
||||||
|
|
||||||
|
Let us assume we want to list all RHEL7 VMs with the power state as "poweredOn". A valid inventory file with filters for the given VMware guest looks as follows:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
plugin: community.vmware.vmware_vm_inventory
|
||||||
|
strict: False
|
||||||
|
hostname: 10.65.223.31
|
||||||
|
username: administrator@vsphere.local
|
||||||
|
password: Esxi@123$%
|
||||||
|
validate_certs: False
|
||||||
|
with_tags: False
|
||||||
|
hostnames:
|
||||||
|
- config.name
|
||||||
|
filters:
|
||||||
|
- config.guestId == "rhel7_64Guest"
|
||||||
|
- summary.runtime.powerState == "poweredOn"
|
||||||
|
|
||||||
|
|
||||||
|
Here, we have configured two filters -
|
||||||
|
|
||||||
|
* ``config.guestId`` is equal to ``rhel7_64Guest``
|
||||||
|
* ``summary.runtime.powerState`` is equal to ``poweredOn``
|
||||||
|
|
||||||
|
This retrieves all the VMs which satisfy these two conditions and populates them in the inventory.
|
||||||
|
Notice that the conditions are combined using an ``and`` operation.
|
||||||
|
|
||||||
|
Using ``or`` conditions in filters
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Let us assume you want filter RHEL7 and Ubuntu VMs. You can use multiple filters using ``or`` condition in your inventory file.
|
||||||
|
|
||||||
|
A valid filter in the VMware inventory file for this example is:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
plugin: community.vmware.vmware_vm_inventory
|
||||||
|
strict: False
|
||||||
|
hostname: 10.65.223.31
|
||||||
|
username: administrator@vsphere.local
|
||||||
|
password: Esxi@123$%
|
||||||
|
validate_certs: False
|
||||||
|
with_tags: False
|
||||||
|
hostnames:
|
||||||
|
- config.name
|
||||||
|
filters:
|
||||||
|
- config.guestId == "rhel7_64Guest" or config.guestId == "ubuntu64Guest"
|
||||||
|
|
||||||
|
|
||||||
|
You can check all allowed properties for filters for the given virtual machine at :ref:`vmware_inventory_vm_attributes`.
|
||||||
|
|
||||||
|
If you are using the ``properties`` parameter with custom VM properties, make sure that you include all the properties used by filters as well in your VM property list.
|
||||||
|
|
||||||
|
For example, if we want all RHEL7 and Ubuntu VMs that are poweredOn, you can use inventory file:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
plugin: community.vmware.vmware_vm_inventory
|
||||||
|
strict: False
|
||||||
|
hostname: 10.65.223.31
|
||||||
|
username: administrator@vsphere.local
|
||||||
|
password: Esxi@123$%
|
||||||
|
validate_certs: False
|
||||||
|
with_tags: False
|
||||||
|
hostnames:
|
||||||
|
- 'config.name'
|
||||||
|
properties:
|
||||||
|
- 'config.name'
|
||||||
|
- 'config.guestId'
|
||||||
|
- 'guest.ipAddress'
|
||||||
|
- 'summary.runtime.powerState'
|
||||||
|
filters:
|
||||||
|
- config.guestId == "rhel7_64Guest" or config.guestId == "ubuntu64Guest"
|
||||||
|
- summary.runtime.powerState == "poweredOn"
|
||||||
|
|
||||||
|
Here, we are using minimum VM properties, that is ``config.name``, ``config.guestId``, ``summary.runtime.powerState``, and ``guest.ipAddress``.
|
||||||
|
|
||||||
|
* ``config.name`` is used by the ``hostnames`` parameter.
|
||||||
|
* ``config.guestId`` and ``summary.runtime.powerState`` are used by the ``filters`` parameter.
|
||||||
|
* ``guest.guestId`` is used by ``ansible_host`` internally by the inventory plugin.
|
||||||
|
|
||||||
|
Using regular expression in filters
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Let us assume you want filter VMs with specific IP range. You can use regular expression in ``filters`` in your inventory file.
|
||||||
|
|
||||||
|
For example, if we want all RHEL7 and Ubuntu VMs that are poweredOn, you can use inventory file:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
plugin: community.vmware.vmware_vm_inventory
|
||||||
|
strict: False
|
||||||
|
hostname: 10.65.223.31
|
||||||
|
username: administrator@vsphere.local
|
||||||
|
password: Esxi@123$%
|
||||||
|
validate_certs: False
|
||||||
|
with_tags: False
|
||||||
|
hostnames:
|
||||||
|
- 'config.name'
|
||||||
|
properties:
|
||||||
|
- 'config.name'
|
||||||
|
- 'config.guestId'
|
||||||
|
- 'guest.ipAddress'
|
||||||
|
- 'summary.runtime.powerState'
|
||||||
|
filters:
|
||||||
|
- guest.ipAddress is defined and guest.ipAddress is match('192.168.*')
|
||||||
|
|
||||||
|
Here, we are using ``guest.ipAddress`` VM property. This property is optional and depended upon VMware tools installed on VMs.
|
||||||
|
We are using ``match`` to validate the regular expression for the given IP range.
|
||||||
|
|
||||||
|
Executing ``ansible-inventory --list -i <filename>.vmware.yml`` creates a list of the virtual machines that are ready to be configured using Ansible.
|
||||||
|
|
||||||
|
What to expect
|
||||||
|
--------------
|
||||||
|
|
||||||
|
You will notice that the inventory hosts are filtered depending on your ``filters`` section.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
{
|
||||||
|
"_meta": {
|
||||||
|
"hostvars": {
|
||||||
|
"template_001": {
|
||||||
|
"config.name": "template_001",
|
||||||
|
"config.guestId": "ubuntu64Guest",
|
||||||
|
...
|
||||||
|
"guest.toolsStatus": "toolsNotInstalled",
|
||||||
|
"summary.runtime.powerState": "poweredOn",
|
||||||
|
},
|
||||||
|
"vm_8046": {
|
||||||
|
"config.name": "vm_8046",
|
||||||
|
"config.guestId": "rhel7_64Guest",
|
||||||
|
...
|
||||||
|
"guest.toolsStatus": "toolsNotInstalled",
|
||||||
|
"summary.runtime.powerState": "poweredOn",
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
Troubleshooting filters
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
If the custom property specified in ``filters`` fails:
|
||||||
|
|
||||||
|
- Check if the values provided for username and password are correct.
|
||||||
|
- Make sure it is a valid property, see :ref:`vmware_inventory_vm_attributes`.
|
||||||
|
- Use ``strict: True`` to get more information about the error.
|
||||||
|
- Please make sure that you are using latest version of the VMware collection.
|
||||||
|
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
`pyVmomi <https://github.com/vmware/pyvmomi>`_
|
||||||
|
The GitHub Page of pyVmomi
|
||||||
|
`pyVmomi Issue Tracker <https://github.com/vmware/pyvmomi/issues>`_
|
||||||
|
The issue tracker for the pyVmomi project
|
||||||
|
`vSphere Automation SDK GitHub Page <https://github.com/vmware/vsphere-automation-sdk-python>`_
|
||||||
|
The GitHub Page of vSphere Automation SDK for Python
|
||||||
|
`vSphere Automation SDK Issue Tracker <https://github.com/vmware/vsphere-automation-sdk-python/issues>`_
|
||||||
|
The issue tracker for vSphere Automation SDK for Python
|
||||||
|
:ref:`vmware_inventory_vm_attributes`
|
||||||
|
Using Virtual machine attributes in VMware dynamic inventory plugin
|
||||||
|
:ref:`working_with_playbooks`
|
||||||
|
An introduction to playbooks
|
||||||
|
:ref:`playbooks_vault`
|
||||||
|
Using Vault in playbooks
|
Loading…
Reference in New Issue