Ansible Inventory Scripts

Ansible Inventory Scripts

# TIL

It appears that you are required to use a .ini file with inventory scripts in Ansible. If you try and use static variables in the script, it will appear to work when running the raw Python or whatever you’re using to gather the data. It will then fail with seemingly nondescript errors when you try and actually use the inventory. 

So, in short make sure you use .ini files, and don’t try and hard code vars in your script. 

Example import script: https://github.com/bile0026/ansible_prtg_inventory_import

Example of output:

[user@host github]$ ansible-inventory -i import.py --list -vvvvv
ansible-inventory 2.9.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible-inventory
  python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
host_list declined parsing /home/user/Documents/github/import.py as it did not pass its verify_file() method
auto declined parsing /home/user/Documents/github/import.py as it did not pass its verify_file() method
yaml declined parsing /home/user/Documents/github/import.py as it did not pass its verify_file() method
toml declined parsing /home/user/Documents/github/import.py as it did not pass its verify_file() method
[WARNING]:  * Failed to parse /home/user/Documents/github/import.py with script plugin: failed to parse executable inventory script results from
/home/user/Documents/github/import.py: Expecting value: line 1 column 1 (char 0) /usr/lib/python3.6/site-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS
request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings   InsecureRequestWarning)
  File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 280, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/script.py", line 161, in parse
    raise AnsibleParserError(to_native(e))
[WARNING]:  * Failed to parse /home/user/Documents/github/import.py with ini plugin: /home/user/Documents/github/import.py:3: Expected key=value host variable
assignment, got: argparse
  File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 280, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/ini.py", line 138, in parse
    raise AnsibleParserError(e)
[WARNING]: Unable to parse /home/user/Documents/github/import.py as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
    "_meta": {
        "hostvars": {}
    },
    "all": {
        "children": [
            "ungrouped"
        ]
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *