Ansible plugin, usage with AWX.
-
Greetings. trying to setup new ansible plugin as inventory source for AWX 19.5.
created custom EE with comunity plugin.
used a basic code from example https://docs.ansible.com/ansible/devel/collections/community/general/xen_orchestra_inventory.htmlfile named xen_orchestra.yml
simple_config_file: plugin: community.general.xen_orchestra api_host: ip user: awx password: awx validate_certs: no use_ssl: no
output for inventory update success, but:
ansible-inventory [core 2.11.7.post0] config file = None configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.8/site-packages/ansible ansible collection location = /runner/requirements_collections:/home/runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections executable location = /usr/local/bin/ansible-inventory python version = 3.8.8 (default, Aug 25 2021, 16:13:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] jinja version = 2.10.3 libyaml = True No config file found; using defaults setting up inventory plugins host_list declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method script declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method [WARNING]: Skipping key (plugin) in group (simple_config_file) as it is not a mapping, it is a <class 'ansible.parsing.yaml.objects.AnsibleUnicode'> [WARNING]: Skipping key (api_host) in group (simple_config_file) as it is not a mapping, it is a <class 'ansible.parsing.yaml.objects.AnsibleUnicode'> [WARNING]: Skipping key (user) in group (simple_config_file) as it is not a mapping, it is a <class 'ansible.parsing.yaml.objects.AnsibleUnicode'> [WARNING]: Skipping key (password) in group (simple_config_file) as it is not a mapping, it is a <class 'ansible.parsing.yaml.objects.AnsibleUnicode'>
if remove "simple_config_file:"
ansible-inventory [core 2.11.7.post0] config file = None configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.8/site-packages/ansible ansible collection location = /runner/requirements_collections:/home/runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections executable location = /usr/local/bin/ansible-inventory python version = 3.8.8 (default, Aug 25 2021, 16:13:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] jinja version = 2.10.3 libyaml = True No config file found; using defaults setting up inventory plugins host_list declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method script declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method Loading collection community.general from /usr/share/ansible/collections/ansible_collections/community/general toml declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method [WARNING]: * Failed to parse /runner/project/inventory/xen_orchestra.yml with auto plugin: [Errno 111] Connection refused File "/usr/local/lib/python3.8/site-packages/ansible/inventory/manager.py", line 290, in parse_source plugin.parse(self._inventory, self._loader, source, cache=cache) File "/usr/local/lib/python3.8/site-packages/ansible/plugins/inventory/auto.py", line 58, in parse plugin.parse(inventory, loader, path, cache=cache)
why all keys not valid?
-
A question for @shinuza
-
@tristis-oris Hey, so yeah. The doc was confusing, I've created a pull request to fix it.
As for your issue. It says
auto plugin: [Errno 111] Connection refused
, meaning you can't connect to the API from the machine that tries to execute the inventory. -
@shinuza but no refused error with a structure:
simple_config_file: plugin: community.general.xen_orchestra
-
@tristis-oris As I said, this was an error in the example config. You need to use
plugin: community.general.xen_orchestra api_host: ip user: awx password: awx validate_certs: no use_ssl: no
-
@shinuza got it. any reason why it can be refused?
i created a user account, is it enough?
or a screening password. -
with a
plugin: community.general.xen_orchestra api_host: ip user: awx password: "awx" validate_certs: no use_ssl: no
i got
ansible-inventory [core 2.11.7.post0] config file = None configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.8/site-packages/ansible ansible collection location = /runner/requirements_collections:/home/runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections executable location = /usr/local/bin/ansible-inventory python version = 3.8.8 (default, Aug 25 2021, 16:13:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] jinja version = 2.10.3 libyaml = True No config file found; using defaults setting up inventory plugins host_list declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method script declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method Loading collection community.general from /usr/share/ansible/collections/ansible_collections/community/general toml declined parsing /runner/project/inventory/xen_orchestra.yml as it did not pass its verify_file() method [WARNING]: * Failed to parse /runner/project/inventory/xen_orchestra.yml with auto plugin: 'result' File "/usr/local/lib/python3.8/site-packages/ansible/inventory/manager.py", line 290, in parse_source plugin.parse(self._inventory, self._loader, source, cache=cache) File "/usr/local/lib/python3.8/site-packages/ansible/plugins/inventory/auto.py", line 58, in parse plugin.parse(inventory, loader, path, cache=cache)
-
@tristis-oris It's not a credentials issue, if it was the plugin would explicitly say so.
Errno 111
means the low-level socket connection can't be established. Try connecting with telnet? -
@shinuza both VM in same network, disabled firewall at orchestra.
same error. what it could be?File "/usr/local/lib/python3.8/site-packages/websocket/_http.py", line 130, in connect sock = _open_socket(addrinfo_list, options.sockopt, options.timeout) File "/usr/local/lib/python3.8/site-packages/websocket/_http.py", line 208, in _open_socket raise err File "/usr/local/lib/python3.8/site-packages/websocket/_http.py", line 185, in _open_socket sock.connect(address) [WARNING]: * Failed to parse /runner/project/inventory/xen_orchestra.yml with yaml plugin: Plugin configuration YAML file, not YAML inventory File "/usr/local/lib/python3.8/site-packages/ansible/inventory/manager.py", line 290, in parse_source plugin.parse(self._inventory, self._loader, source, cache=cache) File "/usr/local/lib/python3.8/site-packages/ansible/plugins/inventory/yaml.py", line 112, in parse raise AnsibleParserError('Plugin configuration YAML file, not YAML inventory') [WARNING]: * Failed to parse /runner/project/inventory/xen_orchestra.yml with ini plugin: Invalid host pattern 'plugin:' supplied, ending in ':' is not allowed, this character is reserved to provide a port. File "/usr/local/lib/python3.8/site-packages/ansible/inventory/manager.py", line 290, in parse_source plugin.parse(self._inventory, self._loader, source, cache=cache) File "/usr/local/lib/python3.8/site-packages/ansible/plugins/inventory/ini.py", line 136, in parse raise AnsibleParserError(e) [WARNING]: Unable to parse /runner/project/inventory/xen_orchestra.yml as an inventory source ERROR! No inventory was parsed, please check your configuration and options.
-
@tristis-oris It's hard to say remotely, you could try install xo-cli on the same machine you are trying to run ansible-inventory.
Maybe there will be more details on why the connection is failing.
-
@shinuza it's a password.
with long one with symbols xo-cli can't register.
changed to simple, it works now.tried "" or '' in playbook, it didnt work.
-
is it any way to translate uuid to names at inventory?
-
@tristis-oris Nope, unfortunately:
- ansible needs a stable unique id to identify hosts
- name-labels from the xo api are not stable and may not be unique
- if a vm doesn't have the guest-tools installed then we cannot know its ip and or hostname.
- the only property that's stable between pools, hosts and vms are the uuid
Using hostnames or ip as inventory id means there's no way to for example to: start a vm using the inventory, but you can do it using the inventory and a JSON-RPC call.
-
@shinuza got it, thanks. sad of course(
"ansible needs a stable unique id to identify hosts"
not realy, with manual host lists awx download new every time and remove old\chenged info.
same for netbox integration.for most of task just enough tags like linux, db, etc.