Skip to content

[Bug]: Inventory 'netbox_inventory.yml' parsing fails in Ubuntu 22.04 LTS to Netbox!!!! #1124

Closed
@ScorpionKing34

Description

@ScorpionKing34

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions