cisco.ios 11.6.0 - Whats New and How to Test

Introduction

cisco.ios is the Ansible collection that provides modules and plugins for automating Cisco IOS and IOS-XE network devices, covering configuration of BGP, SNMP, HSRP, route-maps, interfaces, and more via resource modules. This article covers the changes shipped in cisco.ios 11.6.0, released as the successor to 11.5.1.

This release adds one new parameter to ios_snmp_server and fixes a set of idempotency and crash bugs in ios_bgp_address_family, ios_bgp_global, ios_hsrp_interfaces, ios_route_maps, and ios_snmp_server. Anyone managing BGP neighbors with remote_as, HSRP use_bia, catch-all route-map entries, or SNMP VRRP traps should review the bugfix list below before upgrading, since several of these fixes change generated command output on replaced/merged runs.

Whats New

Minor Changes

  • ios_snmp_server - adds the traps.vrrpv3 boolean parameter to configure snmp-server enable traps vrrpv3.

Bugfixes

  • ios_bgp_address_family - fixed an idempotency issue where specifying remote_as for a neighbor caused the module to emit neighbor X remote-as Y on every run. remote_as can be specified at address-family or global level, but it always resides at the global level in IOS. The config class now correctly associates global-level attributes with the matching address-family during have-facts comparison.
  • ios_bgp_address_family - fixed replaced state not generating no neighbor X route-map/prefix-list commands when a route-map or prefix-list existed in have but was absent from want.
  • ios_bgp_address_family - updated the _compare_redist_ospf loop to read both ospf and ospfv3 as parser inputs.
  • ios_bgp_global - fixed a crash in ios_bgp_global and ios_facts on ASDOT (4-byte dotted) local_as notation (e.g. 501.65083) by changing the local_as.number argspec type from int to str, consistent with remote_as, which already accepts ASDOT values.
  • ios_hsrp_interfaces - fixed parsed-state integration tests to handle Ansible-core masking $REDACTED$ values while retaining compatibility with older VALUE_SPECIFIED_IN_NO_LOG_PARAMETER results.
  • ios_hsrp_interfaces - fixed use_bia.set: false not generating no standby use-bia by adding the compval use_bia.set to the parser so comparison evaluates the boolean leaf instead of the parent dict, which is always truthy.
  • ios_route_maps - fixed bare entries (action + sequence only) being silently dropped. The cmd_len guard in entries_compare() now emits the route-map header command even when no sub-commands are generated (description/match/set absent), so catch-all rules like route-map MYMAP deny 6 are correctly applied.
  • ios_route_maps - fixed continue_entry.set=true being silently ignored; the bare continue command was never generated because the setval template raised UndefinedError when entry_sequence was absent.
  • ios_snmp_server - anchored the traps.vrrp parser regex with $ so that snmp-server enable traps vrrpv3 lines are no longer incorrectly parsed as traps.vrrp.

Documentation Changes

  • ios_bgp_address_family - documented the remote_as lifecycle gap: on IOS, neighbor X remote-as Y lives at the global BGP level, not inside an address-family block. The module reads the global value for idempotency purposes but does not add, change, or remove it; ios_bgp_global must be used to manage the global remote-as statement. The deleted and replaced states will not remove a global remote-as entry.

Impact Summary

ModuleChange typeNotes
ios_snmp_serverNew feature + bugfixAdds traps.vrrpv3; fixes regex overlap with traps.vrrp
ios_bgp_address_familyBugfix + docsIdempotency for remote_as, replaced state route-map/prefix-list removal, ospfv3 redistribution
ios_bgp_globalBugfixlocal_as.number argspec type change (int -> str) to avoid crash on ASDOT
ios_hsrp_interfacesBugfix + testuse_bia.set:false now generates no standby use-bia; test compatibility with $REDACTED$ masking
ios_route_mapsBugfixBare entries no longer dropped; continue_entry.set no longer silently ignored

How to Test

Install or upgrade the collection and confirm the reported version, then exercise the affected modules in check mode against a lab device or the offline parsed/rendered states before touching production configuration.

# Install or upgrade cisco.ios to 11.6.0
ansible-galaxy collection install cisco.ios:11.6.0 --force

# Verify the installed version
ansible-galaxy collection list cisco.ios

# Inspect the changelog fragment shipped in the collection
find ~/.ansible/collections -path '*cisco/ios/CHANGELOG.rst'

# Quick sanity check on ios_snmp_server new parameter (check mode)
ansible-doc cisco.ios.ios_snmp_server | grep -A3 vrrpv3

# Validate ios_route_maps parsing fix against a running-config text file
ansible localhost -m cisco.ios.ios_route_maps -a "running_config=@/tmp/routemap_show_run.txt state=parsed"

# Test ios_bgp_address_family idempotency for remote_as (dry-run against a device)
ansible-playbook bgp_af_idempotency_check.yml --check --diff -i inventory.ini

After upgrading, re-run any playbooks that configure ios_bgp_address_family neighbors with remote_as, HSRP use_bia, or catch-all ios_route_maps entries, and diff the generated commands against the previous 11.5.1 behavior to confirm the fixes apply as expected.