Skip to content

Upgrade Procedures

Those guides describes the changes required to upgrade your Catalyst Center Terraform module version. Each upgrade procedure covers the changes necessary to move between two consecutive releases (subsequent versions).

After completing all the above changes, your data model will be compatible with Catalyst Center Terraform module version 0.2.0. Make sure to:

  1. Update all deploy_state references to redeploy_template with appropriate values
  2. Replace name with ip_pool_name in Anycast Gateway configurations
  3. Handle the Terraform state changes for network profile assignments
  4. Handle the Terraform state changes for Fabric L3 Handoff IP Transit resources
  5. Update LAN Automation attribute names and IP pool structure
  6. Change hostname to fqdn_name in device inventory
  7. Update discovery configuration attribute names

In version 0.1.1, template deployment was controlled by the deploy_state attribute with two options:

  • DEPLOY - never redeploy template
  • REDEPLOY - always redeploy template regardless of content changes

In version 0.2.0, this has been replaced with redeploy_template offering more granular control:

  • NEVER - never redeploy template
  • ALWAYS - always redeploy template regardless of content changes
  • ON_CHANGE - redeploy template only when there is a content template change
inventory:
devices:
- name: DEVICE_1
dayn_templates:
regular:
- name: TEMP1
deploy_state: DEPLOY
inventory:
devices:
- name: DEVICE_1
dayn_templates:
regular:
- name: TEMP1
redeploy_template: NEVER

The redeploy_template parameter can be configured at multiple levels with the following precedence (highest to lowest):

  1. Device-specific template level:
catalyst_center:
inventory:
devices:
- name: DEVICE_1
dayn_templates:
regular:
- name: TEMP1
redeploy_template: NEVER
  1. Device-wide template level:
catalyst_center:
inventory:
devices:
- name: DEVICE_1
dayn_templates:
redeploy_template: NEVER
regular:
- name: TEMP1
  1. Global template level:
catalyst_center:
templates:
projects:
- name: Project_DayN
description: Project_DayN
dayn_templates:
- name: TEMPLATE_1
redeploy_template: ALWAYS
  1. Default level:
defaults:
catalyst_center:
templates:
redeploy_template: NEVER
redeploy_templateTemplate Content ChangeTemplate Redeployed
ALWAYSYesYes
ALWAYSNoYes
NEVERYesNo
NEVERNoNo
ON_CHANGEYesYes
ON_CHANGENoNo

2. Anycast Gateway Attribute Name Replacement

Section titled “2. Anycast Gateway Attribute Name Replacement”

The name attribute in Anycast Gateway configuration has been replaced with ip_pool_name to better reflect its purpose as a reference to IP pool reservations.

catalyst_center:
fabric:
fabric_sites:
- name: Global/AREA
anycast_gateways:
- name: IPPool_1
catalyst_center:
fabric:
fabric_sites:
- name: Global/AREA
anycast_gateways:
- ip_pool_name: IPPool_1

3. Network Profile Assignment Resource Change

Section titled “3. Network Profile Assignment Resource Change”

The Terraform resource catalystcenter_associate_site_to_network_profile has been replaced with catalystcenter_network_profile_for_site_assignments. This requires manual Terraform state management.

Execute the following command to find all network profile association resources:

Terminal window
terraform state list | grep catalystcenter_associate_site_to_network_profile

Example output:

module.catalyst_center.catalystcenter_associate_site_to_network_profile.site_to_network_profile["Global/Poland/Krakow#_#Krk_switchingProfile"]
module.catalyst_center.catalystcenter_associate_site_to_network_profile.site_to_wireless_network_profile["Global/Poland/Krakow#_#C9800_KRK_Profile"]

Remove the identified resources from the Terraform state:

Terminal window
terraform state rm 'module.catalyst_center.catalystcenter_associate_site_to_network_profile.site_to_network_profile["Global/Poland/Krakow#_#Krk_switchingProfile"]'
terraform state rm 'module.catalyst_center.catalystcenter_associate_site_to_network_profile.site_to_wireless_network_profile["Global/Poland/Krakow#_#C9800_KRK_Profile"]'

Execute terraform apply to create the new network profile assignment resources:

Terminal window
terraform apply

Expected output:

# module.catalyst_center.catalystcenter_network_profile_for_sites_assignments.site_to_network_profile["Krk_switchingProfile"] will be created
+ resource "catalystcenter_network_profile_for_sites_assignments" "site_to_network_profile" {
+ id = (known after apply)
+ items = [
+ {
+ id = "a8fbb587-887c-42be-aaad-395abd685ebf"
},
]
+ network_profile_id = "076013fa-322f-48cb-b278-8bde227ebed7"
}
# module.catalyst_center.catalystcenter_network_profile_for_sites_assignments.site_to_wireless_network_profile["C9800_KRK_Profile"] will be created
+ resource "catalystcenter_network_profile_for_sites_assignments" "site_to_wireless_network_profile" {
+ id = (known after apply)
+ items = [
+ {
+ id = "a8fbb587-887c-42be-aaad-395abd685ebf"
},
]
+ network_profile_id = "5304325b-0aac-4be9-90ea-90c5654033f7"
}

4. Fabric L3 Handoff IP Transit Resource Change

Section titled “4. Fabric L3 Handoff IP Transit Resource Change”

The Terraform resource catalystcenter_fabric_l3_handoff_ip_transit has been replaced with catalystcenter_fabric_l3_handoff_ip_transits (note the plural form). This change consolidates multiple IP transit handoffs under a single resource per network device, requiring manual Terraform state management.

Execute the following command to find all L3 handoff IP transit resources:

Terminal window
terraform state list | grep catalystcenter_fabric_l3_handoff_ip_transit

Example output:

module.catalyst_center.catalystcenter_fabric_l3_handoff_ip_transit.l3_handoff_ip_transit["Campus/GigabitEthernet1/0/3/BGP65002/BR10.cisco.eu"]

Run command to get the network_device_id and fabric_id values needed for the import step:

Terminal window
terraform state show 'module.catalyst_center.catalystcenter_fabric_l3_handoff_ip_transit.l3_handoff_ip_transit["Campus/GigabitEthernet1/0/3/BGP65002/BR10.cisco.eu"]'

Example output:

# module.catalyst_center.catalystcenter_fabric_l3_handoff_ip_transit.l3_handoff_ip_transit["Campus/GigabitEthernet1/0/3/BGP65002/BR10.cisco.eu"]:
resource "catalystcenter_fabric_l3_handoff_ip_transit" "l3_handoff_ip_transit" {
fabric_id = "aca2f40c-40a2-4bc2-9690-f59d758fd600"
id = "fbe1ad74-7df9-46a2-8746-8875f9cbbed4"
interface_name = "GigabitEthernet1/0/3"
local_ip_address = "172.16.100.1/24"
network_device_id = "8fbd4920-25d2-4b73-be25-2421c61e9605"
remote_ip_address = "172.16.100.2/24"
transit_network_id = "fc09acc4-dd6d-48f0-a446-6afe7d0867f4"
virtual_network_name = "Campus"
vlan_id = 100
}

Save the network_device_id and fabric_id values for the import step:

  • network_device_id: 8fbd4920-25d2-4b73-be25-2421c61e9605
  • fabric_id: aca2f40c-40a2-4bc2-9690-f59d758fd600

Remove the identified resources from the Terraform state:

Terminal window
terraform state rm 'module.catalyst_center.catalystcenter_fabric_l3_handoff_ip_transit.l3_handoff_ip_transit["Campus/GigabitEthernet1/0/3/BGP65002/BR10.cisco.eu"]'

Import the new consolidated resource using the network device ID and fabric ID copied from Step 2:

Terminal window
terraform import 'module.catalyst_center.catalystcenter_fabric_l3_handoff_ip_transits.l3_handoff_ip_transits["BR10.cisco.eu"]' "8fbd4920-25d2-4b73-be25-2421c61e9605,aca2f40c-40a2-4bc2-9690-f59d758fd600"

The import format is: "<network_device_id>,<fabric_id>"

Several attributes in the LAN Automation data model have been updated for consistency and clarity.

0.1.10.2.0
peer_device_management_ip_addresssecondary_device_management_ip_address
redistribute_isis_to_bgpadvertise_lan_automation_routes_into_bgp

(0.2.0) Data Model:

catalyst_center:
lan_automation:
- name: Automate_Edge_Switches
secondary_device_management_ip_address: 198.18.130.11
advertise_lan_automation_routes_into_bgp: true

The ip_pools structure has been modified to use name and role instead of ip_pool_name and ip_pool_role.

catalyst_center:
lan_automation:
- name: Automate_Edge_Switches
ip_pools:
- ip_pool_name: MainPool
ip_pool_role: MAIN_POOL
catalyst_center:
lan_automation:
- name: Automate_Edge_Switches
ip_pools:
- name: MainPool
role: PRINCIPAL_IP_ADDRESS_POOL

Additionaly the ip_pool_role values have been updated as follows:

0.1.10.2.0
MAIN_POOLPRINCIPAL_IP_ADDRESS_POOL
PHYSICAL_LINK_POOLLINK_OVERLAPPING_IP_POOL

The hostname attribute in device inventory has been replaced with fqdn_name to support fully qualified domain names.

catalyst_center:
inventory:
devices:
- name: DEVICE_1
hostname: DEVICE_1
catalyst_center:
inventory:
devices:
- name: DEVICE_1
fqdn_name: DEVICE_1.example.com

The attribute preferred_ip_method has been renamed to preferred_mgmt_ip_method in discovery configurations:

catalyst_center:
inventory:
discovery:
- name: Discovery_1
preferred_ip_method: UseLoopBack
catalyst_center:
inventory:
discovery:
- name: Discovery_1
preferred_mgmt_ip_method: UseLoopBack

After completing all the above changes, your data model will be compatible with Catalyst Center Terraform module version 0.1.1. Make sure to:

  1. Update authentication template number_of_hosts enum value from ‘Limited’ to ‘Single’
  2. Add L3 Virtual Networks structure at fabric level if using global L3 VNs
  3. Update device inventory managed AP locations structure
  4. Add new discovery configuration attributes if using advanced SNMP settings
  5. Remove deprecated RF profile attributes
  6. Update anycast gateway configurations with new optional attributes
  7. Remove deprecated border device attributes

1. Authentication Template Enum Value Update

Section titled “1. Authentication Template Enum Value Update”

The number_of_hosts attribute enum value has been updated for consistency.

catalyst_center:
authentication_templates:
- name: AUTH_TEMPLATE_1
number_of_hosts: Limited
catalyst_center:
authentication_templates:
- name: AUTH_TEMPLATE_1
number_of_hosts: Single

2. Fabric L3 Virtual Networks Structure Enhancement

Section titled “2. Fabric L3 Virtual Networks Structure Enhancement”

L3 Virtual Networks can now be defined at the global fabric level in addition to fabric site level, enabling better organization and reuse.

catalyst_center:
fabric:
l3_virtual_networks:
- name: GLOBAL_L3_VN_1
- name: GLOBAL_L3_VN_2
fabric_sites:
- name: Global/AREA
l3_virtual_networks:
- GLOBAL_L3_VN_1
- GLOBAL_L3_VN_2

3. Device Inventory Managed AP Locations Enhancement

Section titled “3. Device Inventory Managed AP Locations Enhancement”

The managed_ap_locations attribute has been split into primary_managed_ap_locations and secondary_managed_ap_locations for better AP management control.

catalyst_center:
inventory:
devices:
- name: WLC_DEVICE_1
managed_ap_locations:
- Global/Area1/Building1/Floor1
- Global/Area1/Building1/Floor2
catalyst_center:
inventory:
devices:
- name: WLC_DEVICE_1
primary_managed_ap_locations:
- Global/Area1/Building1/Floor1
secondary_managed_ap_locations:
- Global/Area1/Building1/Floor2

New SNMP-related attributes have been added to discovery configurations for enhanced device discovery capabilities.

catalyst_center:
inventory:
discovery:
- name: DISCOVERY_1
cdp_level: 16
enable_password_list:
- enable_password_1
ip_filter_list:
- 192.168.1.0/24
netconf_port: "830"
retry: 3
user_name_list:
- admin
snmp_version: v3
snmp_user_name: snmp_user
snmp_rw_community_desc: "RW Community"
snmp_ro_community_desc: "RO Community"
snmp_ro_community: public
snmp_rw_community: private
snmp_priv_protocol: AES128
snmp_priv_passphrase: priv_pass
snmp_mode: AUTHPRIV
snmp_auth_protocol: SHA
snmp_auth_passphrase: auth_pass

Deprecated RF profile attributes channel_width and enable_brown_field have been removed from the schema.

Remove these attributes from your RF profile configurations:

  • channel_width
  • enable_brown_field

New optional attributes have been added to anycast gateway configurations for enhanced functionality.

catalyst_center:
fabric:
fabric_sites:
- name: Global/AREA
anycast_gateways:
- name: ANYCAST_GW_1
intra_subnet_routing_enabled: true
multiple_ip_to_mac_addresses: false
supplicant_based_extended_node_onboarding: true

The deprecated external_domain_routing_protocol_name attribute has been removed from border device configurations.

Remove the external_domain_routing_protocol_name attribute from your border device configurations.