Bug Description
Enterprise_sonic tries to load the "is_masklen" module from a deprecated location when using ansible.netcommon version 5.0 and below error is reported:
2023-04-03 11:11:45,159 p=2767817 u=csoler n=ansible | TASK [Display SONiC version] *********************************************************************************************************************************
2023-04-03 11:11:45,799 p=2767817 u=csoler n=ansible | An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ImportError: cannot import name 'is_masklen' from 'ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils' (/home/csoler/scripts/ansible_sonic/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py)
2023-04-03 11:11:45,799 p=2767817 u=csoler n=ansible | fatal: [S01]: FAILED! => {"msg": "Unexpected failure during module execution: cannot import name 'is_masklen' from 'ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils' (/home/csoler/scripts/ansible_sonic/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py)", "stdout": ""}
2023-04-03 11:11:45,801 p=2767817 u=csoler n=ansible | PLAY RECAP ***************************************************************************************************************************************************
Product Name
Dell Enterprise SONiC
Component or Module Name
dellemc.enterprise_sonic.sonic_system
DellEMC Enterprise SONiC Ansible Collection Version
dellemc.enterprise_sonic 2.0.0
SONiC Software Version
S01# show version Software Version : 4.0.5-Enterprise_Base Product : Enterprise SONiC Distribution by Dell Technologies Distribution : Debian 10.13 Kernel : 4.19.0-9-2-amd64 Config DB Version : version_4_0_2 Build Commit : bd4c530f0 Build Date : Thu Feb 23 21:43:31 UTC 2023 Built By : sonicbld@sonic-lvn-csg-001 Platform : x86_64-kvm_x86_64-r0 HwSKU : DellEMC-S5248f-P-25G-DPB
Configuration
(ansible) [csoler@CS-RockyOS-VM01 ansible]$ ansible-config dump --only-changed
COLLECTIONS_PATHS(/home/csoler/scripts/ansible/ansible.cfg) = ['/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_co>
DEFAULT_DEBUG(/home/csoler/scripts/ansible/ansible.cfg) = False
DEFAULT_FORKS(/home/csoler/scripts/ansible/ansible.cfg) = 10
DEFAULT_LOG_PATH(/home/csoler/scripts/ansible/ansible.cfg) = /home/csoler/scripts/ansible/ansible.log
DEFAULT_VERBOSITY(/home/csoler/scripts/ansible/ansible.cfg) = 0
DEPRECATION_WARNINGS(/home/csoler/scripts/ansible/ansible.cfg) = False
HOST_KEY_CHECKING(/home/csoler/scripts/ansible/ansible.cfg) = False
Steps to Reproduce
- Install a virtual environment with below packages:
/home/csoler/scripts/ansible/lib/python3.9/site-packages/ansible_collections
Collection Version
ansible.netcommon 5.0.0
ansible.utils 2.9.0
dellemc.enterprise_sonic 2.0.0
- Run a simple ansible playbook against a SONiC device (like a command to show the device SONiC version):
-
name: Ansible playbook to display the SONiC version
hosts: S01
gather_facts: False
collections:
tasks:
-
Below error is reported when using ansible.netcommon version 5.0:
TASK [Display SONiC version] *********************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ImportError: cannot import name 'is_masklen' from 'ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils' (/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py)
fatal: [S01]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
PLAY RECAP ***************************************************************************************************************************
S01 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Expected Behavior
- When downgrading the ansible.netcommon software to version 4.1, everything seems to work fine:
(ansible_sonic) [csoler@CS-RockyOS-VM01 ansible_sonic]$ ansible-galaxy collection list | grep netcomm
ansible.netcommon 4.1.0
(ansible_sonic) [csoler@CS-RockyOS-VM01 ansible_sonic]$ ansible-playbook -i inventory/inventory_sonic_lab playbooks/sonic_show_version.yml
PLAY [Ansible playbook to display the SONiC version] *********************************************************************************************************
TASK [Display SONiC version] *********************************************************************************************************************************
ok: [S01]
TASK [debug] *************************************************************************************************************************************************
ok: [S01] => {
"show_ver": {
"changed": false,
"failed": false,
"stdout": [
"Software Version : 4.0.5-Enterprise_Base\nProduct : Enterprise SONiC Distribution by Dell Technologies\nDistribution : Debian 10.13\nKernel : 4.19.0-9-2-amd64\nConfig DB Version : version_4_0_2\nBuild Commit : bd4c530f0\nBuild Date : Thu Feb 23 21:43:31 UTC 2023\nBuilt By : sonicbld@sonic-lvn-csg-001\nPlatform : x86_64-kvm_x86_64-r0\nHwSKU : DellEMC-S5248f-P-25G-DPB\nASIC : vs\nSerial Number : 000000\nUptime : 12:04:51 up 18:20, 2 users, load average: 2.03, 2.22, 2.20 \n \nREPOSITORY TAG IMAGE ID SIZE\ndocker-database 4.0.5-Enterprise_Base 83068bda4b46 349MB\ndocker-database latest 83068bda4b46 349MB\ndocker-dhcp-relay 4.0.5-Enterprise_Base b77ce0eef496 386MB\ndocker-dhcp-relay latest b77ce0eef496 386MB\ndocker-eventd 4.0.5-Enterprise_Base a44bf4f96728 350MB\ndocker-eventd latest a44bf4f96728 350MB\ndocker-fpm-frr 4.0.5-Enterprise_Base b3081ec93a23 408MB\ndocker-fpm-frr latest b3081ec93a23 408MB\ndocker-gbsyncd-vs 4.0.5-Enterprise_Base 102baeacd06f 349MB\ndocker-gbsyncd-vs latest 102baeacd06f 349MB\ndocker-iccpd 4.0.5-Enterprise_Base 8452793c9eca 387MB\ndocker-iccpd latest 8452793c9eca 387MB\ndocker-l2mcd 4.0.5-Enterprise_Base 4f2f2657f260 384MB\ndocker-l2mcd latest 4f2f2657f260 384MB\ndocker-lldp 4.0.5-Enterprise_Base 2663d4c03799 423MB\ndocker-lldp latest 2663d4c03799 423MB\ndocker-macsec 4.0.5-Enterprise_Base b678cf1edb9f 364MB\ndocker-macsec latest b678cf1edb9f 364MB\ndocker-nat 4.0.5-Enterprise_Base 8f29ce7996b7 386MB\ndocker-nat latest 8f29ce7996b7 386MB\ndocker-orchagent 4.0.5-Enterprise_Base 68e2ee150728 380MB\ndocker-orchagent latest 68e2ee150728 380MB\ndocker-platform-monitor 4.0.5-Enterprise_Base 601b0551fb41 559MB\ndocker-platform-monitor latest 601b0551fb41 559MB\ndocker-router-advertiser 4.0.5-Enterprise_Base dde4f5ea61db 349MB\ndocker-router-advertiser latest dde4f5ea61db 349MB\ndocker-sflow 4.0.5-Enterprise_Base 86d397bc7734 386MB\ndocker-sflow latest 86d397bc7734 386MB\ndocker-snmp 4.0.5-Enterprise_Base ff8f537e940e 372MB\ndocker-snmp latest ff8f537e940e 372MB\ndocker-sonic-mgmt-framework 4.0.5-Enterprise_Base 25f55c6758bb 580MB\ndocker-sonic-mgmt-framework latest 25f55c6758bb 580MB\ndocker-sonic-telemetry 4.0.5-Enterprise_Base a003ddd1fdd2 525MB\ndocker-sonic-telemetry latest a003ddd1fdd2 525MB\ndocker-stp 4.0.5-Enterprise_Base b72bb83c40c2 387MB\ndocker-stp latest b72bb83c40c2 387MB\ndocker-syncd-vs 4.0.5-Enterprise_Base a96595873dc4 356MB\ndocker-syncd-vs latest a96595873dc4 356MB\ndocker-tam 4.0.5-Enterprise_Base 0971c72b1a02 433MB\ndocker-tam latest 0971c72b1a02 433MB\ndocker-teamd 4.0.5-Enterprise_Base f3beca130050 384MB\ndocker-teamd latest f3beca130050 384MB\ndocker-udld 4.0.5-Enterprise_Base 88e105ae60e5 388MB\ndocker-udld latest 88e105ae60e5 388MB\ndocker-vrrp 4.0.5-Enterprise_Base a3cf4228bc30 396MB\ndocker-vrrp latest a3cf4228bc30 396MB"
],
"stdout_lines": [
[
"Software Version : 4.0.5-Enterprise_Base",
"Product : Enterprise SONiC Distribution by Dell Technologies",
"Distribution : Debian 10.13",
"Kernel : 4.19.0-9-2-amd64",
"Config DB Version : version_4_0_2",
"Build Commit : bd4c530f0",
"Build Date : Thu Feb 23 21:43:31 UTC 2023",
"Built By : sonicbld@sonic-lvn-csg-001",
"Platform : x86_64-kvm_x86_64-r0",
"HwSKU : DellEMC-S5248f-P-25G-DPB",
"ASIC : vs",
"Serial Number : 000000",
"Uptime : 12:04:51 up 18:20, 2 users, load average: 2.03, 2.22, 2.20 ",
" ",
"REPOSITORY TAG IMAGE ID SIZE",
"docker-database 4.0.5-Enterprise_Base 83068bda4b46 349MB",
"docker-database latest 83068bda4b46 349MB",
"docker-dhcp-relay 4.0.5-Enterprise_Base b77ce0eef496 386MB",
"docker-dhcp-relay latest b77ce0eef496 386MB",
"docker-eventd 4.0.5-Enterprise_Base a44bf4f96728 350MB",
"docker-eventd latest a44bf4f96728 350MB",
"docker-fpm-frr 4.0.5-Enterprise_Base b3081ec93a23 408MB",
"docker-fpm-frr latest b3081ec93a23 408MB",
"docker-gbsyncd-vs 4.0.5-Enterprise_Base 102baeacd06f 349MB",
"docker-gbsyncd-vs latest 102baeacd06f 349MB",
"docker-iccpd 4.0.5-Enterprise_Base 8452793c9eca 387MB",
"docker-iccpd latest 8452793c9eca 387MB",
"docker-l2mcd 4.0.5-Enterprise_Base 4f2f2657f260 384MB",
"docker-l2mcd latest 4f2f2657f260 384MB",
"docker-lldp 4.0.5-Enterprise_Base 2663d4c03799 423MB",
"docker-lldp latest 2663d4c03799 423MB",
"docker-macsec 4.0.5-Enterprise_Base b678cf1edb9f 364MB",
"docker-macsec latest b678cf1edb9f 364MB",
"docker-nat 4.0.5-Enterprise_Base 8f29ce7996b7 386MB",
"docker-nat latest 8f29ce7996b7 386MB",
"docker-orchagent 4.0.5-Enterprise_Base 68e2ee150728 380MB",
"docker-orchagent latest 68e2ee150728 380MB",
"docker-platform-monitor 4.0.5-Enterprise_Base 601b0551fb41 559MB",
"docker-platform-monitor latest 601b0551fb41 559MB",
"docker-router-advertiser 4.0.5-Enterprise_Base dde4f5ea61db 349MB",
"docker-router-advertiser latest dde4f5ea61db 349MB",
"docker-sflow 4.0.5-Enterprise_Base 86d397bc7734 386MB",
"docker-sflow latest 86d397bc7734 386MB",
"docker-snmp 4.0.5-Enterprise_Base ff8f537e940e 372MB",
"docker-snmp latest ff8f537e940e 372MB",
"docker-sonic-mgmt-framework 4.0.5-Enterprise_Base 25f55c6758bb 580MB",
"docker-sonic-mgmt-framework latest 25f55c6758bb 580MB",
"docker-sonic-telemetry 4.0.5-Enterprise_Base a003ddd1fdd2 525MB",
"docker-sonic-telemetry latest a003ddd1fdd2 525MB",
"docker-stp 4.0.5-Enterprise_Base b72bb83c40c2 387MB",
"docker-stp latest b72bb83c40c2 387MB",
"docker-syncd-vs 4.0.5-Enterprise_Base a96595873dc4 356MB",
"docker-syncd-vs latest a96595873dc4 356MB",
"docker-tam 4.0.5-Enterprise_Base 0971c72b1a02 433MB",
"docker-tam latest 0971c72b1a02 433MB",
"docker-teamd 4.0.5-Enterprise_Base f3beca130050 384MB",
"docker-teamd latest f3beca130050 384MB",
"docker-udld 4.0.5-Enterprise_Base 88e105ae60e5 388MB",
"docker-udld latest 88e105ae60e5 388MB",
"docker-vrrp 4.0.5-Enterprise_Base a3cf4228bc30 396MB",
"docker-vrrp latest a3cf4228bc30 396MB"
]
]
}
}
PLAY RECAP ***************************************************************************************************************************************************
S01 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Actual Behavior
When using ansible.netcommon version 5.0, ansible is not able to load the "is_masklen" module:
(ansible) [csoler@CS-RockyOS-VM01 ansible]$ ansible-playbook -i inventory/inventory_sonic_lab playbooks/sonic_show_version.yml
PLAY [Ansible playbook to display the SONiC version] *********************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
ok: [S01]
TASK [Display SONiC version] *********************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ImportError: cannot import name 'is_masklen' from 'ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils' (/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py)
fatal: [S01]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
PLAY RECAP ***************************************************************************************************************************
S01 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Logs
(ansible) [csoler@CS-RockyOS-VM01 ansible]$ ansible-playbook -i inventory/inventory_sonic_lab playbooks/sonic_show_version.yml -vvv
ansible-playbook [core 2.13.0]
config file = /home/csoler/scripts/ansible/ansible.cfg
configured module search path = ['/home/csoler/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible
ansible collection location = /home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections:/home/csoler/scripts/ansible/lib/python3.9/site-packages/ansible_collections
executable location = /home/csoler/scripts/ansible/bin/ansible-playbook
python version = 3.9.13 (main, Nov 16 2022, 15:31:39) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)]
jinja version = 3.1.2
libyaml = True
Using /home/csoler/scripts/ansible/ansible.cfg as config file
host_list declined parsing /home/csoler/scripts/ansible/inventory/inventory_sonic_lab as it did not pass its verify_file() method
script declined parsing /home/csoler/scripts/ansible/inventory/inventory_sonic_lab as it did not pass its verify_file() method
auto declined parsing /home/csoler/scripts/ansible/inventory/inventory_sonic_lab as it did not pass its verify_file() method
Parsed /home/csoler/scripts/ansible/inventory/inventory_sonic_lab inventory source with ini plugin
redirecting (type: action) dellemc.enterprise_sonic.sonic_command to dellemc.enterprise_sonic.sonic
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: sonic_show_version.yml *****************************************************************************************************
1 plays in playbooks/sonic_show_version.yml
PLAY [Ansible playbook to display the SONiC version] *********************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
task path: /home/csoler/scripts/ansible/playbooks/sonic_show_version.yml:5
redirecting (type: become) ansible.builtin.enable to ansible.netcommon.enable
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
<10.204.11.72> ESTABLISH LOCAL CONNECTION FOR USER: csoler
<10.204.11.72> EXEC /bin/sh -c '( umask 77 && mkdir -p "echo /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9
"&& mkdir "echo /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733
" && echo ansible-tmp-1680523637.333111-2777097-173860067954733="echo /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733
" ) && sleep 0'
Using module file /home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible/modules/setup.py
<10.204.11.72> PUT /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/tmp8l6pw4df TO /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733/AnsiballZ_setup.py
<10.204.11.72> EXEC /bin/sh -c 'chmod u+x /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733/ /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733/AnsiballZ_setup.py && sleep 0'
<10.204.11.72> EXEC /bin/sh -c '/home/csoler/scripts/ansible/bin/python3.9 /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733/AnsiballZ_setup.py && sleep 0'
<10.204.11.72> EXEC /bin/sh -c 'rm -f -r /home/csoler/.ansible/tmp/ansible-local-2777093bw7b5f_9/ansible-tmp-1680523637.333111-2777097-173860067954733/ > /dev/null 2>&1 && sleep 0'
ok: [S01]
META: ran handlers
redirecting (type: action) dellemc.enterprise_sonic.sonic_command to dellemc.enterprise_sonic.sonic
TASK [Display SONiC version] *********************************************************************************************************
task path: /home/csoler/scripts/ansible/playbooks/sonic_show_version.yml:12
redirecting (type: become) ansible.builtin.enable to ansible.netcommon.enable
redirecting (type: action) dellemc.enterprise_sonic.sonic_command to dellemc.enterprise_sonic.sonic
redirecting (type: action) dellemc.enterprise_sonic.sonic_command to dellemc.enterprise_sonic.sonic
The full traceback is:
Traceback (most recent call last):
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible/executor/task_executor.py", line 157, in run
res = self._execute()
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible/executor/task_executor.py", line 630, in _execute
result = self._handler.run(task_vars=vars_copy)
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/dellemc/enterprise_sonic/plugins/action/sonic.py", line 50, in run
result = super(ActionModule, self).run(task_vars=task_vars)
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/action/network.py", line 42, in run
filename, module = self._find_load_module()
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/action/network.py", line 279, in _find_load_module
module = importlib.import_module(context.plugin_resolved_name)
File "/usr/lib64/python3.9/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1030, in _gcd_import
File "", line 1007, in _find_and_load
File "", line 986, in _find_and_load_unlocked
File "", line 680, in _load_unlocked
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible/utils/collection_loader/_collection_finder.py", line 434, in exec_module
exec(code_obj, module.dict)
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/dellemc/enterprise_sonic/plugins/modules/sonic_command.py", line 148, in
from ansible_collections.dellemc.enterprise_sonic.plugins.module_utils.network.sonic.utils.utils import command_list_str_to_dict
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible/utils/collection_loader/_collection_finder.py", line 434, in exec_module
exec(code_obj, module.dict)
File "/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/dellemc/enterprise_sonic/plugins/module_utils/network/sonic/utils/utils.py", line 17, in
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
ImportError: cannot import name 'is_masklen' from 'ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils' (/home/csoler/scripts/ansible/lib64/python3.9/site-packages/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py)
fatal: [S01]: FAILED! => {
"msg": "Unexpected failure during module execution.",
"stdout": ""
}
PLAY RECAP ***************************************************************************************************************************
S01 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Screenshots
No response
Additional Information
No response