Skip to content

ios_config with ansible_ios_commit_confirm_timeout set fails on certain configuration items with parents #1247

@ZachHoiberg

Description

@ZachHoiberg
SUMMARY

Certain ios_config commands fail prior to being able to configure confirm. These commands seem to be consistent per IOS/IOS-XE device type, and only occur when a parent object is called in ios_config

ISSUE TYPE
  • Bug Report
COMPONENT NAME

ios_config

ANSIBLE VERSION
ansible-playbook [core 2.16.14]
  config file = None
  configured module search path = ['/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.12/site-packages/ansible
  ansible collection location = /runner/requirements_collections:/runner/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.12.10 (main, May  9 2025, 00:00:00) [GCC 14.2.1 20250110 (Red Hat 14.2.1-7)] (/usr/bin/python3)
  jinja version = 3.1.6
  libyaml = True
No config file found; using defaults
COLLECTION VERSION
cisco.ios version 11.1.0 and 11.2.0 have this issue. I have reverted back to 11.0.0 and I do not have this issue. Maybe related to the new prompt feature?
CONFIGURATION

defaults, see above

OS / ENVIRONMENT

AWX latest release, various IOS and IOS-XE devices on different OS versions

STEPS TO REPRODUCE

Using the variable ansible_ios_commit_confirm_timeout with a value of 1 on IOS-XE devices, use the playbook to modify a range of VTYs.

Using the variable ansible_ios_commit_confirm_timeout with a value of 1 on IOS devices, configure an ACL as the parent object.

IOS-XE

    - name: Setting Active VTYs
      ios_config:
        lines:
          - exec-timeout 60 0
          - logging synchronous
          - length 0
          - width 0
          - transport input ssh
          - transport output telnet ssh
        parents: line vty 5 15
        defaults: True

IOS (Replacing # with proper IPs/subnets

    - name: Setting HTTP ACL - IOS
      ios_config:
        lines:
          - permit #.#.#.#
          - permit #.#.#.# 0.0.0.255
          - permit #.#.#.# 0.0.0.255
          - permit #.#.#.#. 0.0.0.15
        parents: ip access-list standard 80
        before: no ip access-list standard 80
        replace: block
EXPECTED RESULTS

These parents should be configured and allowed to be confirmed immediately after this ios_config command.

ACTUAL RESULTS

IOS-XE

msg: >-
  Unexpected failure during module execution: Existing rollback change already
  pending. Please resolve by issuing 'configure confirm' or 'configure revert
  now'
exception: >
  Traceback (most recent call last):
    File "/usr/local/lib/python3.12/site-packages/ansible/executor/task_executor.py", line 165, in run
      res = self._execute()
            ^^^^^^^^^^^^^^^
    File "/usr/local/lib/python3.12/site-packages/ansible/executor/task_executor.py", line 644, in _execute
      result = self._handler.run(task_vars=vars_copy)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/runner/requirements_collections/ansible_collections/cisco/ios/plugins/action/ios.py", line 50, in run
      result = super(ActionModule, self).run(task_vars=task_vars)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/runner/requirements_collections/ansible_collections/ansible/netcommon/plugins/action/network.py", line 64, in run
      result = self._exec_module(module)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/runner/requirements_collections/ansible_collections/ansible/netcommon/plugins/action/network.py", line 336, in _exec_module
      module.main()  # allow unhandled module exceptions to fly; handled by TE to preserve as much error detail as possible
      ^^^^^^^^^^^^^
    File "/runner/requirements_collections/ansible_collections/cisco/ios/plugins/modules/ios_config.py", line 608, in main
      edit_config_or_macro(connection, commands, configs)
    File "/runner/requirements_collections/ansible_collections/cisco/ios/plugins/modules/ios_config.py", line 454, in edit_config_or_macro
      connection.edit_config(candidate=commands)
    File "/usr/local/lib/python3.12/site-packages/ansible/module_utils/connection.py", line 200, in __rpc__
      raise ConnectionError(to_text(msg, errors='surrogate_then_replace'), code=code)
  ansible.module_utils.connection.ConnectionError: Existing rollback change
  already pending. Please resolve by issuing 'configure confirm' or 'configure
  revert now'
stdout: ''
_ansible_no_log: false

IOS

{
  "msg": "Unexpected failure during module execution: Existing rollback change already pending. Please resolve by issuing 'configure confirm' or 'configure revert now'",
  "exception": "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.12/site-packages/ansible/executor/task_executor.py\", line 165, in run\n    res = self._execute()\n          ^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.12/site-packages/ansible/executor/task_executor.py\", line 644, in _execute\n    result = self._handler.run(task_vars=vars_copy)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/runner/requirements_collections/ansible_collections/cisco/ios/plugins/action/ios.py\", line 50, in run\n    result = super(ActionModule, self).run(task_vars=task_vars)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/runner/requirements_collections/ansible_collections/ansible/netcommon/plugins/action/network.py\", line 64, in run\n    result = self._exec_module(module)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/runner/requirements_collections/ansible_collections/ansible/netcommon/plugins/action/network.py\", line 336, in _exec_module\n    module.main()  # allow unhandled module exceptions to fly; handled by TE to preserve as much error detail as possible\n    ^^^^^^^^^^^^^\n  File \"/runner/requirements_collections/ansible_collections/cisco/ios/plugins/modules/ios_config.py\", line 608, in main\n    edit_config_or_macro(connection, commands, configs)\n  File \"/runner/requirements_collections/ansible_collections/cisco/ios/plugins/modules/ios_config.py\", line 454, in edit_config_or_macro\n    connection.edit_config(candidate=commands)\n  File \"/usr/local/lib/python3.12/site-packages/ansible/module_utils/connection.py\", line 200, in __rpc__\n    raise ConnectionError(to_text(msg, errors='surrogate_then_replace'), code=code)\nansible.module_utils.connection.ConnectionError: Existing rollback change already pending. Please resolve by issuing 'configure confirm' or 'configure revert now'\n",
  "stdout": "",
  "_ansible_no_log": false
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions