I have not reached a successful resolution. Here is the summary of the issue
The inventory.py script which is supposed to output JSON data is working fine when Ansible is managed via Pip.
The script doesn’t work when Ansible package is installed via DNF or YUM.
We cannot use pip in produdction as it’s not part of our audit system.
According to various comments, it appears that the plugins/helper packages provided with Ansible in DNF/YUM may be corrupted. Pip seems to be providing all the correct items.
[WARNING]: * Failed to parse /******/inventory/inventory.py with
script plugin: failed to parse executable inventory
script results from /********/inventory/inventory.py: Expecting
property name enclosed in double quotes: line 1 column 2
(char 1)
is clear. The inventory.py script returns an invalid json/yaml.
Could you please share Line 1 of the output of
inventory.py --list
?
As stated in the issue, ansible doesn't parse directly json, but yaml,
which is a superset of json.
If your script returns an invalid json/yaml newer ansible version may
not understand it correctly. And you can't expect that since a version
that accidentally understood it, it will accepted forever.
[WARNING]: * Failed to parse //inventory/inventory.py with
script plugin: failed to parse executable inventory
script results from /**/inventory/inventory.py: Expecting
property name enclosed in double quotes: line 1 column 2
(char 1)
is clear. The inventory.py script returns an invalid json/yaml.
Could you please share Line 1 of the output of
inventory.py --list
?
I am not sure if you read my post. The problem isn’t with JSON/YAML. When I install Ansible with pip package manager, this works just fine (2.6,2.7,2.8,2.9,latest).
When I install Ansible using DNF or YUM - it doesn’t work and outputs that error message. How is it possible that the JSON is invalid in once case, but not both?
As stated in the issue, ansible doesn’t parse directly json, but yaml,
which is a superset of json.
If your script returns an invalid json/yaml newer ansible version may
not understand it correctly. And you can’t expect that since a version
that accidentally understood it, it will accepted forever.
Repeating my previous question, how is it possible that versions 2.6,2.7,2.8,2.9 (and latest 2.9.9) all works just fine when installed using pip? I am not sure if anyone is reading my question
[WARNING]: * Failed to parse //inventory/inventory.py with
script plugin: failed to parse executable inventory
script results from /**/inventory/inventory.py: Expecting
property name enclosed in double quotes: line 1 column 2
(char 1)
This warning is raising alarm in everyone’s mind. If we take a look at the sample excerpt of JSON returned by inventory.py might help in troubleshooting the issue.
Also, could you please provide the operating system used and exact version of Ansible packages so that it will easy for others to reproduce?
ansible isn't an all-in-one product, relies on external libs.
Please check all the libraries used by ansible packaged and by ansible
installed via pip.
Depends also if you're are installing in virtualenv, which installs
all the deps from scratch, or on an OS which already has the required
libraries.