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 thetraps.vrrpv3boolean parameter to configuresnmp-server enable traps vrrpv3.
Bugfixes
ios_bgp_address_family- fixed an idempotency issue where specifyingremote_asfor a neighbor caused the module to emitneighbor X remote-as Yon every run.remote_ascan 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- fixedreplacedstate not generatingno neighbor X route-map/prefix-listcommands when a route-map or prefix-list existed inhavebut was absent fromwant.ios_bgp_address_family- updated the_compare_redist_ospfloop to read bothospfandospfv3as parser inputs.ios_bgp_global- fixed a crash inios_bgp_globalandios_factson ASDOT (4-byte dotted)local_asnotation (e.g.501.65083) by changing thelocal_as.numberargspec type frominttostr, consistent withremote_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 olderVALUE_SPECIFIED_IN_NO_LOG_PARAMETERresults.ios_hsrp_interfaces- fixeduse_bia.set: falsenot generatingno standby use-biaby adding the compvaluse_bia.setto 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. Thecmd_lenguard inentries_compare()now emits the route-map header command even when no sub-commands are generated (description/match/set absent), so catch-all rules likeroute-map MYMAP deny 6are correctly applied.ios_route_maps- fixedcontinue_entry.set=truebeing silently ignored; the barecontinuecommand was never generated because the setval template raisedUndefinedErrorwhenentry_sequencewas absent.ios_snmp_server- anchored thetraps.vrrpparser regex with$so thatsnmp-server enable traps vrrpv3lines are no longer incorrectly parsed astraps.vrrp.
Documentation Changes
ios_bgp_address_family- documented theremote_aslifecycle gap: on IOS,neighbor X remote-as Ylives 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_globalmust be used to manage the globalremote-asstatement. Thedeletedandreplacedstates will not remove a globalremote-asentry.
Impact Summary
| Module | Change type | Notes |
|---|---|---|
| ios_snmp_server | New feature + bugfix | Adds traps.vrrpv3; fixes regex overlap with traps.vrrp |
| ios_bgp_address_family | Bugfix + docs | Idempotency for remote_as, replaced state route-map/prefix-list removal, ospfv3 redistribution |
| ios_bgp_global | Bugfix | local_as.number argspec type change (int -> str) to avoid crash on ASDOT |
| ios_hsrp_interfaces | Bugfix + test | use_bia.set:false now generates no standby use-bia; test compatibility with $REDACTED$ masking |
| ios_route_maps | Bugfix | Bare 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.