Description
Ansible NetBox Collection version
v3.15.0
Ansible version
/opt/netbox$ ansible --version
" ansible [core 2.15.6]
config file = /opt/netbox/ansible.cfg
configured module search path = ['/home/bc-dev01/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /opt/netbox/collections
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True"
/opt/netbox$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
NetBox version
v3.6.5
Python version
3.10
Steps to Reproduce
I don't show the full IP.
Create the following ansible.cfg in main directory of the netbox project direcory. Here are the content:
[defaults]
collections_paths = ./collections
host_key_checking = false
inventory = ./inventory/netbox_inventory.yml
timeout = 120
nocows = 1
retry_files_enabled = False
[inventory]
cache = false
enable_plugins = netbox, ini
[inventory_plugins]
use_extra_vars = false
Then I created the netbox_inventory.yml under directory 'inventory'. here by the content of netbox_inventory.yml:
---
plugin: netbox.netbox.nb_inventory
api_endpoint: http://192.168.XXX.XX:8000
token: *************Netbox*API*******************************
validate_certs: True
config_context: False
interfaces: True
$ ansible-galaxy collection list
# /usr/lib/python3/dist-packages/ansible_collections
Collection Version
netbox.netbox 3.15.0
$ pip3 list
Package Version
---------------------- ---------------
pytz 2022.1
pynetbox 7.2.0
packaging 21.3
Expected Behavior
Working dynamic inventory from my netbox server 192.168.XXX.XX (I do not show my full IP)
Observed Behavior
When I ran the following command I got this error:
/opt/netbox$ ansible-inventory -v --list
Using /opt/netbox/ansible.cfg as config file
Fetching: http://192.168.XXX.XX:8000/api/status
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ansible_collections.netbox.netbox.plugins.inventory.nb_inventory plugin: expected
string or bytes-like object
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ini plugin: Invalid host pattern '---' supplied, '---' is normally a sign this is a
YAML file.
[WARNING]: Unable to parse /opt/netbox/inventory/netbox_inventory.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
Deeper verbose information:
/opt/netbox$ ansible-inventory -vv --list
ansible-inventory [core 2.15.6]
config file = /opt/netbox/ansible.cfg
configured module search path = ['/home/bc-dev01/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /opt/netbox/collections
executable location = /usr/bin/ansible-inventory
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
Using /opt/netbox/ansible.cfg as config file
redirecting (type: inventory) ansible.builtin.netbox to netbox.netbox.nb_inventory
Fetching: http://192.168.XXX.XX:8000/api/status
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ansible_collections.netbox.netbox.plugins.inventory.nb_inventory plugin: expected
string or bytes-like object
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ini plugin: Invalid host pattern '---' supplied, '---' is normally a sign this is a
YAML file.
[WARNING]: Unable to parse /opt/netbox/inventory/netbox_inventory.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
/opt/netbox$ ansible-inventory -vvv --list
ansible-inventory [core 2.15.6]
config file = /opt/netbox/ansible.cfg
configured module search path = ['/home/bc-dev01/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /opt/netbox/collections
executable location = /usr/bin/ansible-inventory
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
Using /opt/netbox/ansible.cfg as config file
redirecting (type: inventory) ansible.builtin.netbox to netbox.netbox.nb_inventory
Fetching: http://192.168.XXX.XX:8000/api/status
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ansible_collections.netbox.netbox.plugins.inventory.nb_inventory plugin: expected
string or bytes-like object
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 2060, in parse
self.main()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1907, in main
self.fetch_api_docs()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1513, in fetch_api_docs
if version.parse(netbox_api_version) >= version.parse("3.5.0"):
File "/usr/lib/python3/dist-packages/packaging/version.py", line 49, in parse
return Version(version)
File "/usr/lib/python3/dist-packages/packaging/version.py", line 264, in __init__
match = self._regex.search(version)
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ini plugin: Invalid host pattern '---' supplied, '---' is normally a sign this is a
YAML file.
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible/plugins/inventory/ini.py", line 137, in parse
raise AnsibleParserError(e)
[WARNING]: Unable to parse /opt/netbox/inventory/netbox_inventory.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
/opt/netbox$ ansible-inventory -vvvv --list
ansible-inventory [core 2.15.6]
config file = /opt/netbox/ansible.cfg
configured module search path = ['/home/bc-dev01/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /opt/netbox/collections
executable location = /usr/bin/ansible-inventory
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
Using /opt/netbox/ansible.cfg as config file
setting up inventory plugins
Loading collection ansible.builtin from
redirecting (type: inventory) ansible.builtin.netbox to netbox.netbox.nb_inventory
Loading collection netbox.netbox from /usr/lib/python3/dist-packages/ansible_collections/netbox/netbox
Fetching: http://192.168.XXX.XX:8000/api/status
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ansible_collections.netbox.netbox.plugins.inventory.nb_inventory plugin: expected
string or bytes-like object
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 2060, in parse
self.main()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1907, in main
self.fetch_api_docs()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1513, in fetch_api_docs
if version.parse(netbox_api_version) >= version.parse("3.5.0"):
File "/usr/lib/python3/dist-packages/packaging/version.py", line 49, in parse
return Version(version)
File "/usr/lib/python3/dist-packages/packaging/version.py", line 264, in __init__
match = self._regex.search(version)
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ini plugin: Invalid host pattern '---' supplied, '---' is normally a sign this is a
YAML file.
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible/plugins/inventory/ini.py", line 137, in parse
raise AnsibleParserError(e)
[WARNING]: Unable to parse /opt/netbox/inventory/netbox_inventory.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
Can any help to get ansible working with netbox or fix this bug.
If you need additional information, please contact me.
UPDATE 3-12-23
Tried also the following:
/opt/netbox$ export NETBOX_TOKEN=Netbox_API******************
/opt/netbox$ export NETBOX_API=http://192.168.XXX.XX:8000/
Update the 'netbox_inventory.yml':
plugin: netbox.netbox.nb_inventory
api_endpoint: http://192.168.XXX.XX:8000/
token: "{{ lookup('env', 'NETBOX_API_TOKEN') }}"
validate_certs: True
config_context: False
interfaces: True
/opt/netbox$ ansible-inventory -vvvv --list
ansible-inventory [core 2.15.6]
config file = /opt/netbox/ansible.cfg
configured module search path = ['/home/bc-dev01/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /opt/netbox/collections
executable location = /usr/bin/ansible-inventory
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
Using /opt/netbox/ansible.cfg as config file
setting up inventory plugins
Loading collection ansible.builtin from
redirecting (type: inventory) ansible.builtin.netbox to netbox.netbox.nb_inventory
Loading collection netbox.netbox from /usr/lib/python3/dist-packages/ansible_collections/netbox/netbox
Fetching: http://192.168.XXX.XX:8000/api/status
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ansible_collections.netbox.netbox.plugins.inventory.nb_inventory
plugin: expected string or bytes-like object
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 2060, in parse
self.main()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1907, in main
self.fetch_api_docs()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1513, in fetch_api_docs
if version.parse(netbox_api_version) >= version.parse("3.5.0"):
File "/usr/lib/python3/dist-packages/packaging/version.py", line 49, in parse
return Version(version)
File "/usr/lib/python3/dist-packages/packaging/version.py", line 264, in __init__
match = self._regex.search(version)
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ini plugin: Invalid host pattern 'plugin:' supplied, ending in
':' is not allowed, this character is reserved to provide a port.
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible/plugins/inventory/ini.py", line 137, in parse
raise AnsibleParserError(e)
[WARNING]: Unable to parse /opt/netbox/inventory/netbox_inventory.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}
And with '---' one line one:
---
plugin: netbox.netbox.nb_inventory
api_endpoint: http://192.168.180.85:8000/
token: "{{ lookup('env', 'NETBOX_API_TOKEN') }}"
validate_certs: True
config_context: False
interfaces: True
/opt/netbox$ ansible-inventory -vvvv --list
ansible-inventory [core 2.15.6]
config file = /opt/netbox/ansible.cfg
configured module search path = ['/home/bc-dev01/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /opt/netbox/collections
executable location = /usr/bin/ansible-inventory
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
Using /opt/netbox/ansible.cfg as config file
setting up inventory plugins
Loading collection ansible.builtin from
redirecting (type: inventory) ansible.builtin.netbox to netbox.netbox.nb_inventory
Loading collection netbox.netbox from /usr/lib/python3/dist-packages/ansible_collections/netbox/netbox
Fetching: http://192.168.XXX.XX:8000/api/status
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ansible_collections.netbox.netbox.plugins.inventory.nb_inventory
plugin: expected string or bytes-like object
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 2060, in parse
self.main()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1907, in main
self.fetch_api_docs()
File "/usr/lib/python3/dist-packages/ansible_collections/netbox/netbox/plugins/inventory/nb_inventory.py", line 1513, in fetch_api_docs
if version.parse(netbox_api_version) >= version.parse("3.5.0"):
File "/usr/lib/python3/dist-packages/packaging/version.py", line 49, in parse
return Version(version)
File "/usr/lib/python3/dist-packages/packaging/version.py", line 264, in __init__
match = self._regex.search(version)
[WARNING]: * Failed to parse /opt/netbox/inventory/netbox_inventory.yml with ini plugin: Invalid host pattern '---' supplied, '---' is
normally a sign this is a YAML file.
File "/usr/lib/python3/dist-packages/ansible/inventory/manager.py", line 293, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3/dist-packages/ansible/plugins/inventory/ini.py", line 137, in parse
raise AnsibleParserError(e)
[WARNING]: Unable to parse /opt/netbox/inventory/netbox_inventory.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"ungrouped"
]
}
}