Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Unmarshallable object" exception while used with dynamic inventories #621

Open
maxtymchenko opened this issue Feb 18, 2024 · 0 comments
Open

Comments

@maxtymchenko
Copy link

SUMMARY

Latest released ansible.netcommon v6.0.0 produces exception when used with dynamic inventory (with group) created via "ansible.builtin.add_host"

ISSUE TYPE
  • Bug Report
COMPONENT NAME

ansible.netcommon
ansible.utils

ANSIBLE VERSION
ansible [core 2.16.3]
  config file = /home/debian/ansible/ansible.cfg
  configured module search path = ['/home/debian/ansible/library']
  ansible python module location = /home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible
  ansible collection location = /home/debian/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/debian/.local/bin/ansible
  python version = 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] (/home/debian/.local/pipx/venvs/ansible/bin/python)
  jinja version = 3.1.3
  libyaml = True

COLLECTION VERSION

# /home/debian/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 6.0.0  

CONFIGURATION
CONFIG_FILE() = /home/debian/ansible/ansible.cfg
DEFAULT_FILTER_PLUGIN_PATH(/home/debian/ansible/ansible.cfg) = ['/home/debian/ansible/filter_plugins']
DEFAULT_HOST_LIST(/home/debian/ansible/ansible.cfg) = ['/home/debian/ansible/inventories/sit']
DEFAULT_LOAD_CALLBACK_PLUGINS(/home/debian/ansible/ansible.cfg) = True
DEFAULT_MODULE_PATH(/home/debian/ansible/ansible.cfg) = ['/home/debian/ansible/library']
DEFAULT_MODULE_UTILS_PATH(/home/debian/ansible/ansible.cfg) = ['/home/debian/ansible/module_utils']
DEFAULT_ROLES_PATH(/home/debian/ansible/ansible.cfg) = ['/home/debian/ansible/roles']
DEFAULT_STDOUT_CALLBACK(/home/debian/ansible/ansible.cfg) = yaml
DEFAULT_TIMEOUT(/home/debian/ansible/ansible.cfg) = 180
DEFAULT_VAULT_PASSWORD_FILE(/home/debian/ansible/ansible.cfg) = /home/debian/ansible_vault_password
HOST_KEY_CHECKING(/home/debian/ansible/ansible.cfg) = False
INVENTORY_ENABLED(/home/debian/ansible/ansible.cfg) = ['yaml']
OS / ENVIRONMENT

Debian 12

STEPS TO REPRODUCE
playbook

- name: Play1
  strategy: linear
  hosts: mytest
  gather_facts: false

  tasks:

      - name: Print current inventory
        ansible.builtin.debug:
           var: ansible_play_hosts_all

      - name: Add hosts to dynamic in-memory inventory
        ansible.builtin.add_host:
            name: "10.10.10.10"
            ansible_user: login
            ansible_port: 22
            ansible_password: password
            ansible_connection: ansible.netcommon.network_cli
            ansible_network_os: cisco.ios.ios
            groups: dynamic_group

- name: Play2
  strategy: linear
  hosts: dynamic_group
  gather_facts: false

  tasks:

       - name: Print current inventory
         ansible.builtin.debug:
           var: ansible_play_hosts_all


inventory:

mytest:
  hosts:
    10.1.1.1:
      ansible_user: developer
      ansible_port: 22
      ansible_become: true
      ansible_become_method: sudo

EXPECTED RESULTS
PLAY [Play1] ***************************************************************************************************************************************************************************************************************************************************

TASK [Print current inventory] *********************************************************************************************************************************************************************************************************************************
ok: [10.189.100.1] => 
  ansible_play_hosts_all:
  - 10.189.100.1

TASK [Add hosts to dynamic in-memory inventory] ****************************************************************************************************************************************************************************************************************
changed: [10.189.100.1]

PLAY [Play2] ***************************************************************************************************************************************************************************************************************************************************

TASK [Print current inventory] *********************************************************************************************************************************************************************************************************************************
ok: [10.10.10.10] => 
  ansible_play_hosts_all:
  - 10.10.10.10

PLAY RECAP *****************************************************************************************************************************************************************************************************************************************************
10.10.10.10                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.189.100.1               : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ACTUAL RESULTS
ansible-playbook [core 2.16.3]
  config file = /home/debian/ansible/ansible.cfg
  configured module search path = ['/home/debian/ansible/library']
  ansible python module location = /home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible
  ansible collection location = /home/debian/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/debian/.local/bin/ansible-playbook
  python version = 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] (/home/debian/.local/pipx/venvs/ansible/bin/python)
  jinja version = 3.1.3
  libyaml = True
Using /home/debian/ansible/ansible.cfg as config file
setting up inventory plugins
Loading collection ansible.builtin from 
Parsed /home/debian/ansible/inventories/sit/hosts inventory source with yaml plugin
setting up inventory plugins
Skipping empty key (hosts) in group (nd_dynamic)
Parsed /home/debian/ansible/inventories/sit/nd_dynamic inventory source with yaml plugin
redirecting (type: callback) ansible.builtin.yaml to community.general.yaml
Loading collection community.general from /home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible_collections/community/general
redirecting (type: callback) ansible.builtin.yaml to community.general.yaml
Loading callback plugin community.general.yaml of type stdout, v2.0 from /home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible_collections/community/general/plugins/callback/yaml.py
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: test.yml *********************************************************************************************************************************************************************************************************************************************
Positional arguments: playbooks/test.yml
verbosity: 4
connection: ssh
become_method: sudo
tags: ('all',)
inventory: ('/home/debian/ansible/inventories/sit',)
forks: 5
2 plays in playbooks/test.yml

PLAY [Play1] ***************************************************************************************************************************************************************************************************************************************************
Trying secret FileVaultSecret(filename='/home/debian/ansible_vault_password') for vault_id=default

TASK [Print current inventory] *********************************************************************************************************************************************************************************************************************************
task path: /home/debian/ansible/playbooks/test.yml:10
ok: [10.189.100.1] => 
  ansible_play_hosts_all:
  - 10.189.100.1

TASK [Add hosts to dynamic in-memory inventory] ****************************************************************************************************************************************************************************************************************
task path: /home/debian/ansible/playbooks/test.yml:14
creating host via 'add_host': hostname=10.10.10.10
changed: [10.189.100.1] => changed=true 
  add_host:
    groups:
    - dynamic_group
    host_name: 10.10.10.10
    host_vars:
      ansible_connection: ansible.netcommon.network_cli
      ansible_network_os: cisco.ios.ios
      ansible_password: password
      ansible_port: 22
      ansible_user: login

PLAY [Play2] ***************************************************************************************************************************************************************************************************************************************************

TASK [Print current inventory] *********************************************************************************************************************************************************************************************************************************
task path: /home/debian/ansible/playbooks/test.yml:31
Loading collection ansible.netcommon from /home/debian/.ansible/collections/ansible_collections/ansible/netcommon
The full traceback is:
Traceback (most recent call last):
  File "/home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible/executor/task_executor.py", line 165, in run
    res = self._execute()
          ^^^^^^^^^^^^^^^
  File "/home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible/executor/task_executor.py", line 574, in _execute
    self._connection = self._get_connection(cvars, templar, current_connection)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible/executor/task_executor.py", line 953, in _get_connection
    connection, plugin_load_context = self._shared_loader_obj.connection_loader.get_with_context(
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible/plugins/loader.py", line 899, in get_with_context
    self._module_cache[path] = self._load_module_source(resolved_type_name, path)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/debian/.local/pipx/venvs/ansible/lib/python3.11/site-packages/ansible/plugins/loader.py", line 837, in _load_module_source
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 936, in exec_module
  File "<frozen importlib._bootstrap_external>", line 1083, in get_code
  File "<frozen importlib._bootstrap_external>", line 746, in _code_to_timestamp_pyc
ValueError: unmarshallable object
fatal: [10.10.10.10]: FAILED! => 
  msg: 'Unexpected failure during module execution: unmarshallable object'

PLAY RECAP *****************************************************************************************************************************************************************************************************************************************************
10.10.10.10                : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
10.189.100.1               : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Reverting back to ansible.netcommon v5.3.0 fixes the issue completely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant