Closed gellis713 closed 1 month ago
Build succeeded. https://ansible.softwarefactory-project.io/zuul/buildset/02888a3d65694bc3a9c58ba8d45eb160
:heavy_check_mark: ansible-galaxy-importer SUCCESS in 3m 29s :heavy_check_mark: build-ansible-collection SUCCESS in 11m 32s :x: ansible-ee-integration-ios-latest RETRY_LIMIT in 3m 25s (non-voting) :x: ansible-ee-integration-ios-stable-2.9 FAILURE in 12m 17s (non-voting) :x: ansible-ee-integration-ios-stable-2.11 RETRY_LIMIT in 3m 11s (non-voting) :x: ansible-ee-integration-ios-stable-2.12 RETRY_LIMIT in 3m 11s (non-voting) :x: ansible-ee-integration-ios-libssh-latest RETRY_LIMIT in 3m 29s (non-voting) :x: ansible-ee-integration-ios-libssh-stable-2.9 FAILURE in 13m 33s (non-voting) :x: ansible-ee-integration-ios-libssh-stable-2.11 RETRY_LIMIT in 3m 21s (non-voting) :x: ansible-ee-integration-ios-libssh-stable-2.12 RETRY_LIMIT in 23m 01s (non-voting) :heavy_check_mark: ansible-tox-linters SUCCESS in 13m 21s
Additional successful manual testing done against the 2960X to set interface descriptions:
griffin@griffin-laptop:~/Documents/code/ansible-modules$ ansible-playbook cisco_description_set.playbook -vvvv
ansible-playbook 2.10.8
config file = None
configured module search path = ['/home/griffin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible-playbook
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
No config file found; using defaults
setting up inventory plugins
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Not replacing invalid character(s) "{'-'}" in group name (ios-switches)
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Not replacing invalid character(s) "{'-'}" in group name (ios-switches)
Parsed /etc/ansible/hosts inventory source with ini plugin
Loading collection cisco.ios from /home/griffin/.ansible/collections/ansible_collections/cisco/ios
[WARNING]: Collection cisco.ios does not support Ansible version 2.10.8
Loading callback plugin default of type stdout, v2.0 from /usr/lib/python3/dist-packages/ansible/plugins/callback/default.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: cisco_description_set.playbook ******************************************************************************************************************************************************************************************************************************************
Positional arguments: cisco_description_set.playbook
verbosity: 4
connection: smart
timeout: 10
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/hosts',)
forks: 5
1 plays in cisco_description_set.playbook
PLAY [Set interface description] **************************************************************************************************************************************************************************************************************************************************
META: ran handlers
TASK [Interface status] ***********************************************************************************************************************************************************************************************************************************************************
task path: /home/griffin/Documents/code/ansible-modules/cisco_description_set.playbook:7
Loading collection ansible.netcommon from /home/griffin/.ansible/collections/ansible_collections/ansible/netcommon
[WARNING]: Collection ansible.netcommon does not support Ansible version 2.10.8
Loading collection ansible.utils from /home/griffin/.ansible/collections/ansible_collections/ansible/utils
[WARNING]: Collection ansible.utils does not support Ansible version 2.10.8
redirecting (type: become) ansible.builtin.enable to ansible.netcommon.enable
<192.168.1.5> attempting to start connection
<192.168.1.5> using connection plugin ansible.netcommon.network_cli
Found ansible-connection at path /usr/bin/ansible-connection
<192.168.1.5> local domain socket does not exist, starting it
<192.168.1.5> control socket path is /home/griffin/.ansible/pc/1736253856
<192.168.1.5> Loading collection ansible.netcommon from /home/griffin/.ansible/collections/ansible_collections/ansible/netcommon
<192.168.1.5> Loading collection ansible.utils from /home/griffin/.ansible/collections/ansible_collections/ansible/utils
<192.168.1.5> Loading collection cisco.ios from /home/griffin/.ansible/collections/ansible_collections/cisco/ios
<192.168.1.5> local domain socket listeners started successfully
<192.168.1.5> loaded cliconf plugin ansible_collections.cisco.ios.plugins.cliconf.ios from path /home/griffin/.ansible/collections/ansible_collections/cisco/ios/plugins/cliconf/ios.py for network_os cisco.ios.ios
<192.168.1.5> ssh type is set to auto
<192.168.1.5> autodetecting ssh_type
[WARNING]: ansible-pylibssh not installed, falling back to paramiko
<192.168.1.5> ssh type is now set to paramiko
<192.168.1.5>
<192.168.1.5> local domain socket path is /home/griffin/.ansible/pc/1736253856
<192.168.1.5> ANSIBLE_NETWORK_IMPORT_MODULES: enabled
<192.168.1.5> ANSIBLE_NETWORK_IMPORT_MODULES: found cisco.ios.ios_interfaces at /home/griffin/.ansible/collections/ansible_collections/cisco/ios/plugins/modules/ios_interfaces.py
<192.168.1.5> ANSIBLE_NETWORK_IMPORT_MODULES: running cisco.ios.ios_interfaces
<192.168.1.5> ANSIBLE_NETWORK_IMPORT_MODULES: complete
changed: [192.168.1.5] => {
"after": [
{
"description": "5j",
"enabled": true,
"name": "FastEthernet0"
},
{
"description": "5j",
"enabled": true,
"name": "GigabitEthernet1/0/1"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/10"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/11"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/12"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/13"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/14"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/15"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/16"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/17"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/18"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/19"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/2"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/20"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/21"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/22"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/23"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/24"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/25"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/26"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/27"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/28"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/29"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/3"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/30"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/31"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/32"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/33"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/34"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/35"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/36"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/37"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/38"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/39"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/4"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/40"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/41"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/42"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/43"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/44"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/45"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/46"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/47"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/48"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/49"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/5"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/50"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/51"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/52"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/6"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/7"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/8"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/9"
},
{
"enabled": true,
"name": "Vlan1"
}
],
"before": [
{
"description": "5j",
"enabled": true,
"name": "FastEthernet0"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/1"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/10"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/11"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/12"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/13"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/14"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/15"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/16"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/17"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/18"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/19"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/2"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/20"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/21"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/22"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/23"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/24"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/25"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/26"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/27"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/28"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/29"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/3"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/30"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/31"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/32"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/33"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/34"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/35"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/36"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/37"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/38"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/39"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/4"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/40"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/41"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/42"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/43"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/44"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/45"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/46"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/47"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/48"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/49"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/5"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/50"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/51"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/52"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/6"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/7"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/8"
},
{
"enabled": true,
"name": "GigabitEthernet1/0/9"
},
{
"enabled": true,
"name": "Vlan1"
}
],
"changed": true,
"commands": [
"interface GigabitEthernet1/0/1",
"description 5j"
],
"invocation": {
"module_args": {
"config": [
{
"description": "5j",
"duplex": null,
"enabled": true,
"mode": null,
"mtu": null,
"name": "GigabitEthernet1/0/1",
"speed": null,
"template": null
}
],
"running_config": null,
"state": "replaced"
}
}
}
META: ran handlers
META: ran handlers
PLAY RECAP ************************************************************************************************************************************************************************************************************************************************************************
192.168.1.5 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 86.93%. Comparing base (
cd326fe
) to head (9a3f095
).
@gellis713 Thank you for the contribution, I have pushed some additional changes considering your solution. Regards.
SUMMARY
Fixes #829
829 details a scenario where interface descriptions such as:
5j 05j 1j 25j 125j 19J 82J
causes the Python JSON encoder to throw an error stating "Object of type complex is not JSON serializable". After some digging this complex data type is being returned from the Template class in Ansible Netcommon Utils
The call function renders the data into "value" and tries to use ast to perform an evaluation of a literal structure. Most literal_evals will throw an error (such as
ValueError: malformed node or string on line 1: <ast.Name object at 0x7f1302b682b0>
which is caught and the value is casted into a string. Since "5j" and variants are actually evaluated into complex data type, it just gets passed back as is.ISSUE TYPE
COMPONENT NAME
cisco_ios.ios.ios_interfaces Module
ADDITIONAL INFORMATION
Tested on Cisco 2960X, Version 15.0(2)EX4
After change (5j value that previously evaluated to complex):
After change (typical description format):