I am using Ansible's ansible.netcommon.netconf_config
module to configure a Cisco switch over NETCONF.
However, when I include the confirm
parameter, I get the following error:
Argument must be bytes or unicode, got 'int'
- name: Test netconf confirm_commit feature
hosts: lab4-ict1-e06-cam-sw01
connection: netconf
gather_facts: false
tasks:
- name: Modify hostname
ansible.netcommon.netconf_config:
target: candidate
commit: true
confirm: 60
content: |
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
<hostname>myHost</hostname>
</native>
</config>
My switch supports the following NETCONF capabilities:
<capability>urn:ietf:params:netconf:base:1.0</capability>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.1</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability>
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>
<capability>urn:ietf:params:netconf:capability:xpath:1.0</capability>
<capability>urn:ietf:params:netconf:capability:notification:1.0</capability>
<capability>urn:ietf:params:netconf:capability:interleave:1.0</capability>
<capability>urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all-tagged,report-all</capability>
<capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2016-06-21&module-set-id=cfda21b1f56eacca98467dd697c96695</capability>
Since :candidate
and :confirmed-commit
are supported, I assumed :confirm
should work correctly.
confirm
to a string:confirm: "60"
Still results in the same error.
When confirm
is removed, the task runs successfully, but I need the confirm behavior.
validate: true
validate: true
No change in the error message.
ansible --version
ansible-galaxy collection list | grep netcommon
Everything is up-to-date.
ansible [core 2.15.8]
ansible.netcommon 5.3.0
confirm
:None of these work.
Does anyone know if there is a bug or a specific format required for confirm
?
I managed to fix the issue locally.
The problem was related to the confirm_timeout
parameter, which needed to be properly converted to text. The fix was to modify the following line in netconf_config.py
(line 685):
- confirmed=confirmed_commit, timeout=confirm_timeout
+ confirmed=confirmed_commit, timeout=to_text(confirm_timeout, errors='surrogate_or_strict')
This ensures that confirm_timeout
is correctly handled as a string, avoiding type mismatches.
Hope this helps others facing the same issue! 🚀
Here is my pull request on ansible.netcommon github : Pull request