# 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"
]
}
}