Template
Catalyst CenterLocation in GUI:
Design » CLI Templates
Diagram
Section titled “Diagram”Diagram
Section titled “Diagram”Diagram
Section titled “Diagram”Classes
Section titled “Classes”catalyst_center
Section titled “catalyst_center”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| templates | Class | templates | No |
templates (catalyst_center)
Section titled “templates (catalyst_center)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| projects | List | projects | No |
projects (catalyst_center.templates)
Section titled “projects (catalyst_center.templates)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| dayn_templates | List | dayn_templates | No |
dayn_templates (catalyst_center.templates.projects)
Section titled “dayn_templates (catalyst_center.templates.projects)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| description | String | No | ||
| language | Choice | JINJA, VELOCITY | No | |
| device_types | List | device_types | No | |
| software_type | String | No | ||
| software_ | String | No | ||
| variables | List | variables | No | |
| tags | List | String | No | |
| containing_ | List | String | No | |
| composite | Boolean | true, false | No | |
| redeploy_ | Choice | ALWAYS, NEVER, ON_CHANGE | No | |
| deployment_ | Integer | min: 10, max: 86400 | No |
dayn_templates (catalyst_center.templates.projects)
Section titled “dayn_templates (catalyst_center.templates.projects)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| description | String | No | ||
| language | Choice | JINJA, VELOCITY | No | |
| device_types | List | device_types | No | |
| software_type | String | No | ||
| software_ | String | No | ||
| variables | List | variables | No | |
| tags | List | String | No | |
| containing_ | List | String | No | |
| composite | Boolean | true, false | No | |
| redeploy_ | Choice | ALWAYS, NEVER, ON_CHANGE | No |
device_types (catalyst_center.templates.projects.dayn_templates)
Section titled “device_types (catalyst_center.templates.projects.dayn_templates)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| product_family | String | Yes | ||
| product_series | String | No | ||
| product_type | String | No |
variables (catalyst_center.templates.projects.dayn_templates)
Section titled “variables (catalyst_center.templates.projects.dayn_templates)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| field_name | String | No | ||
| required | Boolean | true, false | No | |
| data_type | Choice | STRING, INTEGER, IPADDRESS, MACADDRESS, SECTIONDIVIDER | Yes | |
| hint_text | String | No | ||
| default_value | String | No | ||
| additional_info | String | No | ||
| binding | String | No | ||
| not_param | Boolean | true, false | No | |
| param_array | Boolean | true, false | No | |
| selection_type | Choice | SINGLE_SELECT, MULTI_SELECT | No | |
| data_values | Map | No |
variables (catalyst_center.templates.projects.dayn_templates)
Section titled “variables (catalyst_center.templates.projects.dayn_templates)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| field_name | String | No | ||
| required | Boolean | true, false | No | |
| data_type | Choice | STRING, INTEGER, IPADDRESS, MACADDRESS, SECTIONDIVIDER | Yes | |
| hint_text | String | No | ||
| default_value | String | No | ||
| additional_info | String | No |
Templates define CLI configuration snippets using Jinja or Velocity templating languages that are pushed to network devices during provisioning. Templates belong to a Project and can target specific device families and software versions. They support parameterized variables, conditional logic, and can be tagged with Tags for organization. Applicable to both SDA fabric and non-fabric deployments.
Examples
Section titled “Examples”Example-1: Day-N Jinja Template for Catalyst 9300 ACLs
Section titled “Example-1: Day-N Jinja Template for Catalyst 9300 ACLs”Day-N template configuration for ongoing network management using Jinja templating to create access list templates targeting Catalyst 9300 series switches.
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: access_list_template description: Access List Template language: JINJA composite: false device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XEThe content of the template must be stored in the templates/ directory inside a JINJA file, with the file name matching the template name:
access_list_template.j2
## Access Listip access-list standard 2010 permit 10.0.0.0 0.0.0.25520 permit 20.0.0.0 0.0.0.255Example-2: Onboarding Jinja Template for Catalyst 9300 Switches
Section titled “Example-2: Onboarding Jinja Template for Catalyst 9300 Switches”Onboarding template configuration for initial device provisioning using Jinja templating to automate Day-0 configuration deployment on Catalyst 9300 series switches.
catalyst_center: templates: projects: - name: Project_Onboarding description: Project_Onboarding onboarding_templates: - name: onboarding_template description: Onboarding Template language: JINJA composite: false device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XEExample-3: Composite Template Combining Multiple ACL Templates
Section titled “Example-3: Composite Template Combining Multiple ACL Templates”Composite template configuration combining multiple individual templates into a single deployable unit for complex ACL configurations targeting Catalyst 9300 series switches.
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: ACL_COMPOSITE description: ACL COMPOSITE language: JINJA composite: true device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XE containing_templates: - ACL_41 - ACL_42Templates content:
ACL_41
ip access-list standard 4110 permit {{acl_ip_address}} 0.0.0.255ACL_42
ip access-list standard 4210 permit {{acl_ip_address}} 0.0.0.255Example-4: Day-N Template Assigned to a Switching Profile
Section titled “Example-4: Day-N Template Assigned to a Switching Profile”Network profile template assignment demonstrating how to associate Day-N templates with switching network profiles for automated deployment across multiple sites.
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_COMPOSITE sites: - Global/United States/Golden Hills Campus/Sunset Tower - Global/United States/Lakefront Tower/Windy City Plaza - Global/United States/Oceanfront Mansion/Art Deco Mansion - Global/United States/Desert Oasis Branch/Desert Oasis TowerExample-5: Composite Day-N Template Deployed to a Device
Section titled “Example-5: Composite Day-N Template Deployed to a Device”Device-specific template deployment showing how to deploy composite Day-N templates directly to individual devices with template-specific variable assignments.
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42Example-6: Template Redeployment Strategies
Section titled “Example-6: Template Redeployment Strategies”Template redeployment strategies demonstrating different approaches to template life-cycle management on network devices.
6a. Always redeploy template configuration regardless of content changes:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE redeploy_template: ALWAYS variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_426b. Conditional template redeployment only when template content changes:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE redeploy_template: ON_CHANGE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42The redeploy_template flag can be applied both at the template level and at the device level:
When defined under a template, it controls how that specific template is redeployed across all devices that use it.
When defined under a device, it controls redeployment of all templates assigned to that device.
This lets you choose whether to consistently redeploy a single template to many devices, or redeploy every template on a specific device.
Example-7: Template-Level Redeployment After Content Changes
Section titled “Example-7: Template-Level Redeployment After Content Changes”Template-level redeployment when the content of a template changes, affecting all devices that use this template.
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: ACL_COMPOSITE description: ACL COMPOSITE language: JINJA redeploy_template: ON_CHANGE composite: true device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XE containing_templates: - ACL_41 - ACL_42Example-8: Device-Level Redeployment After Content Changes
Section titled “Example-8: Device-Level Redeployment After Content Changes”Device-level redeployment when the content of a template changes, including both composite and regular templates.
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: redeploy_template: ON_CHANGE composite: - name: ACL_COMPOSITE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42 regular: - name: ACL_BLOCK variables: - name: interface value: GigabtEthernet1/0/1Example-9: Duplicate Template Names Using project#name Format
Section titled “Example-9: Duplicate Template Names Using project#name Format”When the same template name exists under multiple template projects (e.g. bfd_interval in both PROJECT1 and PROJECT2), use the # delimiter to specify which project’s template to reference. The format is ProjectName#TemplateName.
9a. Template definition — two projects each containing a template with the same name (bfd_interval):
catalyst_center: templates: projects: - name: PROJECT1 dayn_templates: - name: bfd_interval description: add bfd interfval of 250 min_rx to Enterprise p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE
- name: PROJECT2 dayn_templates: - name: bfd_interval description: add bfd interfval of 350 min_rx to Service Provider p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XENote: The template’s Jinja or Velocity file name must also be prefixed with the project name to avoid conflicts. For example,
PROJECT1#bfd_interval.j2andPROJECT2#bfd_interval.j2.
9b. Network profile : referencing a template that has a duplicate name across projects. Use ProjectName#TemplateName to specify the exact template:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - PROJECT1#bfd_interval sites: - Global/Poland/KrakowWhen the template name is unique across all projects, the project prefix is not required:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_Block sites: - Global/Poland/Krakow9c. Device provisioning: deploying templates with duplicate names to specific devices. Use ProjectName#TemplateName in the name field:
catalyst_center: inventory: devices: - name: FIAB fqdn_name: FIAB.cisco.eu device_ip: 181.1.1.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: composite: - name: PROJECT2#bfd_interval redeploy_template: ALWAYS
- name: LAN-EN2 fqdn_name: LAN-EN2.cisco.eu device_ip: 181.1.1.43 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: composite: - name: PROJECT2#bfd_interval redeploy_template: ALWAYSWhen the template name is unique across all projects, the project prefix is not required:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.eu device_ip: 198.18.130.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: regular: - name: ACL_43 variables: - name: acl_ip_address value: 23.23.23.0Example-10: Mixing Bare Name and ProjectName#TemplateName Formats
Section titled “Example-10: Mixing Bare Name and ProjectName#TemplateName Formats”The project#name delimiter is only required when the same template name exists under multiple projects. All existing YAML without the prefix continues to work unchanged.
10a. Templates — ACL_Block is unique to PROJECT1, while Day_N_remove_bfd exists in both projects:
catalyst_center: templates: projects: - name: PROJECT1 dayn_templates: - name: ACL_Block description: ACL to block malicious IPs device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE - name: Day_N_remove_bfd description: Remove BFD from C9kv p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE
- name: PROJECT2 dayn_templates: - name: Day_N_remove_bfd description: Remove BFD from C9kv p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE10b. Network profiles — ACL_Block is unique so bare name works (old format). Day_N_remove_bfd is duplicated so project#name is required (new format). Both formats coexist in the same list:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_Block - PROJECT2#Day_N_remove_bfd sites: - Global/Poland/Krakow10c. Device provisioning — a single device deployed with both a duplicate-name template (PROJECT2#Day_N_remove_bfd, new format) and a unique template (ACL_Block, old format):
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.eu device_ip: 198.18.130.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: regular: - name: PROJECT2#Day_N_remove_bfd redeploy_template: ALWAYS - name: ACL_Block variables: - name: management_interface value: Loopback56In summary — the project#name format is additive. Existing templates, network profiles, and device configurations that use unique template names require no changes.
Note: Using
project#namefor a template that is unique across projects is also valid and will not break anything. For example, ifACL_Blockonly exists underPROJECT1, bothACL_BlockandPROJECT1#ACL_Blockresolve to the same template. The project prefix is only required for duplicate names, but it is accepted for all templates.
Example-11: Template Variable with Binding and Selection Attributes
Section titled “Example-11: Template Variable with Binding and Selection Attributes”Day-N template with a variable that binds to a Catalyst Center Common Settings data source.
catalyst_center: templates: projects: - name: BIND_SOURCE dayn_templates: - name: radius_server description: RADIUS server configuration language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE variables: - name: AAAEP data_type: STRING required: true additional_info: AAA Endpoint Server IP Address param_array: true selection_type: SINGLE_SELECT binding: '{"provider":"CommonSettings","source":"CommonSettings","entity":"aaa.endpoint.server","variableName":"__aaaendpointserver","attribute":"ipAddress","attributeToDisplay":"ipAddress","attributesAvailable":["ipAddress","protocol","encryptionScheme"],"params":[{"type":"SITE_UUID","scope":"RUNTIME","value":null},{"type":"MANAGED_DEVICE_UUID","scope":"RUNTIME","value":null}],"value":null,"errorMessage":null,"sortAttribute":null,"sortValues":null,"filterType":"contains","filterValue":"RADIUS","filterByAttribute":"protocol","filterSupported":true}'Example-12: Deployment Timeout for Long-Running Day-N Templates
Section titled “Example-12: Deployment Timeout for Long-Running Day-N Templates”After deploying a Day-N template, Terraform waits until Catalyst Center reports the deployment as SUCCESS or FAILURE. The wait is limited by deployment_timeout (in seconds, default 300). If the deployment is still running when the timeout expires, Terraform reports a Template Deployment Timeout warning and checks the result again on the next apply.
Raise the timeout for templates deployed to many devices or to devices behind slow WAN links. Set it per template, or for all templates under defaults.catalyst_center.templates.deployment_timeout. Changing it alone does not redeploy the template.
catalyst_center: templates: projects: - name: BRANCH_TEMPLATES dayn_templates: - name: BRANCH_ACCESS_PORTS description: Access port configuration for all branch switches language: JINJA device_types: - product_family: "Switches and Hubs" software_type: IOS-XE deployment_timeout: 900Example-13: Secret Day-N Template Parameters
Section titled “Example-13: Secret Day-N Template Parameters”Day-N template variables are ordinary model values. When a variable carries a password, a key, or any other credential, mark it as a secret so that its value is not kept once it has been deployed.
To mark a variable, add a companion variable beside it whose name is the parameter
name followed by _version_secure, with a positive integer value:
catalyst_center: inventory: devices: - name: BR10 device_role: ACCESS state: PROVISION site: Global/Test dayn_templates: regular: - name: ConfigurePassword redeploy_template: ON_CHANGE variables: - name: description value: Branch switch - name: password value: example-secret - name: password_version_secure value: 1Reference the template by its unique name, or as <project_name>#<template_name>
for a template that already exists in Catalyst Center.
In this example description stays an ordinary parameter. password becomes a
secret: its value is sent to Catalyst Center when the template is deployed and is
not retained afterwards. The password_version_secure marker is never sent to
Catalyst Center at all — it only records which generation of the secret is currently
deployed.
Because secret values are not retained, supply them on every apply. Whenever a change triggers a deployment, every secret belonging to that device is sent again.
Marking a parameter as a secret changes how it is handled from that point onward. It does not retroactively remove a value that was already recorded elsewhere while the parameter was still an ordinary one.
Rotating a Secret
Section titled “Rotating a Secret”Changing only the value of a secret does not deploy anything. Raise the companion version as well:
variables: - name: password value: new-secret - name: password_version_secure value: 2A version change is treated like any other change, so it follows the template’s
NEVER, ON_CHANGE, or ALWAYS redeployment policy as described in
Example-6.
Removing both variables stops managing that secret. It does not remove the password from the device.
List Values and Composite Templates
Section titled “List Values and Composite Templates”Parameters that take a list of values use the same convention. In composite
templates, set template_name on both the value and its version so that the two are
paired with the same member template:
variables: - template_name: ConfigurePassword name: password value: example-secret - template_name: ConfigurePassword name: password_version_secure value: 2Pairing is scoped to a single device, deployment template, and composite member, so the same parameter name can appear under several members without the pairs interfering. This works for composite templates defined in the data model and for composite templates that already exist in Catalyst Center.
Naming Rules
Section titled “Naming Rules”Only the exact suffix _version_secure marks a secret. Ordinary names such as
software and software_version stay public even when both are present, and a
_version_secure variable with no matching base parameter is an ordinary parameter.
Chains such as password, password_version_secure, and
password_version_secure_version_secure are ambiguous and are rejected.
Companion versions belong to the Day-N variables set on a device. They have no meaning in template parameter definitions or in onboarding claim parameters.
Related Provisioning Scenarios
Section titled “Related Provisioning Scenarios”The examples above cover how to define templates and reference them from network profiles and devices. Additional template-consumption and provisioning scenarios are documented on the Device page. Check there for scenarios not covered here, including:
- Deploying a Built-in or Pre-existing CLI Template — reference regular, composite, and onboarding templates that already exist in Catalyst Center (built-in or created outside Terraform) via the
<project_name>#<template_name>form, without redefining them here.
Templates define CLI configuration snippets using Jinja or Velocity templating languages that are pushed to network devices during provisioning. Templates belong to a Project and can target specific device families and software versions. They support parameterized variables, conditional logic, and can be tagged with Tags for organization. Applicable to both SDA fabric and non-fabric deployments.
Examples
Section titled “Examples”Example-1: Day-N Jinja Template for Catalyst 9300 ACLs
Section titled “Example-1: Day-N Jinja Template for Catalyst 9300 ACLs”Day-N template configuration for ongoing network management using Jinja templating to create access list templates targeting Catalyst 9300 series switches.
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: access_list_template description: Access List Template language: JINJA composite: false device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XEThe content of the template must be stored in the templates/ directory inside a JINJA file, with the file name matching the template name:
access_list_template.j2
## Access Listip access-list standard 2010 permit 10.0.0.0 0.0.0.25520 permit 20.0.0.0 0.0.0.255Example-2: Onboarding Jinja Template for Catalyst 9300 Switches
Section titled “Example-2: Onboarding Jinja Template for Catalyst 9300 Switches”Onboarding template configuration for initial device provisioning using Jinja templating to automate Day-0 configuration deployment on Catalyst 9300 series switches.
catalyst_center: templates: projects: - name: Project_Onboarding description: Project_Onboarding onboarding_templates: - name: onboarding_template description: Onboarding Template language: JINJA composite: false device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XEExample-3: Composite Template Combining Multiple ACL Templates
Section titled “Example-3: Composite Template Combining Multiple ACL Templates”Composite template configuration combining multiple individual templates into a single deployable unit for complex ACL configurations targeting Catalyst 9300 series switches.
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: ACL_COMPOSITE description: ACL COMPOSITE language: JINJA composite: true device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XE containing_templates: - ACL_41 - ACL_42Templates content:
ACL_41
ip access-list standard 4110 permit {{acl_ip_address}} 0.0.0.255ACL_42
ip access-list standard 4210 permit {{acl_ip_address}} 0.0.0.255Example-4: Day-N Template Assigned to a Switching Profile
Section titled “Example-4: Day-N Template Assigned to a Switching Profile”Network profile template assignment demonstrating how to associate Day-N templates with switching network profiles for automated deployment across multiple sites.
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_COMPOSITE sites: - Global/United States/Golden Hills Campus/Sunset Tower - Global/United States/Lakefront Tower/Windy City Plaza - Global/United States/Oceanfront Mansion/Art Deco Mansion - Global/United States/Desert Oasis Branch/Desert Oasis TowerExample-5: Composite Day-N Template Deployed to a Device
Section titled “Example-5: Composite Day-N Template Deployed to a Device”Device-specific template deployment showing how to deploy composite Day-N templates directly to individual devices with template-specific variable assignments.
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42Example-6: Template Redeployment Strategies
Section titled “Example-6: Template Redeployment Strategies”Template redeployment strategies demonstrating different approaches to template life-cycle management on network devices.
6a. Always redeploy template configuration regardless of content changes:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE redeploy_template: ALWAYS variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_426b. Conditional template redeployment only when template content changes:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE redeploy_template: ON_CHANGE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42The redeploy_template flag can be applied both at the template level and at the device level:
When defined under a template, it controls how that specific template is redeployed across all devices that use it.
When defined under a device, it controls redeployment of all templates assigned to that device.
This lets you choose whether to consistently redeploy a single template to many devices, or redeploy every template on a specific device.
Example-7: Template-Level Redeployment After Content Changes
Section titled “Example-7: Template-Level Redeployment After Content Changes”Template-level redeployment when the content of a template changes, affecting all devices that use this template.
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: ACL_COMPOSITE description: ACL COMPOSITE language: JINJA redeploy_template: ON_CHANGE composite: true device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XE containing_templates: - ACL_41 - ACL_42Example-8: Device-Level Redeployment After Content Changes
Section titled “Example-8: Device-Level Redeployment After Content Changes”Device-level redeployment when the content of a template changes, including both composite and regular templates.
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: redeploy_template: ON_CHANGE composite: - name: ACL_COMPOSITE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42 regular: - name: ACL_BLOCK variables: - name: interface value: GigabtEthernet1/0/1Example-9: Duplicate Template Names Using project#name Format
Section titled “Example-9: Duplicate Template Names Using project#name Format”When the same template name exists under multiple template projects (e.g. bfd_interval in both PROJECT1 and PROJECT2), use the # delimiter to specify which project’s template to reference. The format is ProjectName#TemplateName.
9a. Template definition — two projects each containing a template with the same name (bfd_interval):
catalyst_center: templates: projects: - name: PROJECT1 dayn_templates: - name: bfd_interval description: add bfd interfval of 250 min_rx to Enterprise p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE
- name: PROJECT2 dayn_templates: - name: bfd_interval description: add bfd interfval of 350 min_rx to Service Provider p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XENote: The template’s Jinja or Velocity file name must also be prefixed with the project name to avoid conflicts. For example,
PROJECT1#bfd_interval.j2andPROJECT2#bfd_interval.j2.
9b. Network profile : referencing a template that has a duplicate name across projects. Use ProjectName#TemplateName to specify the exact template:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - PROJECT1#bfd_interval sites: - Global/Poland/KrakowWhen the template name is unique across all projects, the project prefix is not required:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_Block sites: - Global/Poland/Krakow9c. Device provisioning: deploying templates with duplicate names to specific devices. Use ProjectName#TemplateName in the name field:
catalyst_center: inventory: devices: - name: FIAB fqdn_name: FIAB.cisco.eu device_ip: 181.1.1.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: composite: - name: PROJECT2#bfd_interval redeploy_template: ALWAYS
- name: LAN-EN2 fqdn_name: LAN-EN2.cisco.eu device_ip: 181.1.1.43 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: composite: - name: PROJECT2#bfd_interval redeploy_template: ALWAYSWhen the template name is unique across all projects, the project prefix is not required:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.eu device_ip: 198.18.130.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: regular: - name: ACL_43 variables: - name: acl_ip_address value: 23.23.23.0Example-10: Mixing Bare Name and ProjectName#TemplateName Formats
Section titled “Example-10: Mixing Bare Name and ProjectName#TemplateName Formats”The project#name delimiter is only required when the same template name exists under multiple projects. All existing YAML without the prefix continues to work unchanged.
10a. Templates — ACL_Block is unique to PROJECT1, while Day_N_remove_bfd exists in both projects:
catalyst_center: templates: projects: - name: PROJECT1 dayn_templates: - name: ACL_Block description: ACL to block malicious IPs device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE - name: Day_N_remove_bfd description: Remove BFD from C9kv p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE
- name: PROJECT2 dayn_templates: - name: Day_N_remove_bfd description: Remove BFD from C9kv p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE10b. Network profiles — ACL_Block is unique so bare name works (old format). Day_N_remove_bfd is duplicated so project#name is required (new format). Both formats coexist in the same list:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_Block - PROJECT2#Day_N_remove_bfd sites: - Global/Poland/Krakow10c. Device provisioning — a single device deployed with both a duplicate-name template (PROJECT2#Day_N_remove_bfd, new format) and a unique template (ACL_Block, old format):
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.eu device_ip: 198.18.130.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: regular: - name: PROJECT2#Day_N_remove_bfd redeploy_template: ALWAYS - name: ACL_Block variables: - name: management_interface value: Loopback56In summary — the project#name format is additive. Existing templates, network profiles, and device configurations that use unique template names require no changes.
Note: Using
project#namefor a template that is unique across projects is also valid and will not break anything. For example, ifACL_Blockonly exists underPROJECT1, bothACL_BlockandPROJECT1#ACL_Blockresolve to the same template. The project prefix is only required for duplicate names, but it is accepted for all templates.
Example-11: Template Variable with Binding and Selection Attributes
Section titled “Example-11: Template Variable with Binding and Selection Attributes”Day-N template with a variable that binds to a Catalyst Center Common Settings data source.
catalyst_center: templates: projects: - name: BIND_SOURCE dayn_templates: - name: radius_server description: RADIUS server configuration language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE variables: - name: AAAEP data_type: STRING required: true additional_info: AAA Endpoint Server IP Address param_array: true selection_type: SINGLE_SELECT binding: '{"provider":"CommonSettings","source":"CommonSettings","entity":"aaa.endpoint.server","variableName":"__aaaendpointserver","attribute":"ipAddress","attributeToDisplay":"ipAddress","attributesAvailable":["ipAddress","protocol","encryptionScheme"],"params":[{"type":"SITE_UUID","scope":"RUNTIME","value":null},{"type":"MANAGED_DEVICE_UUID","scope":"RUNTIME","value":null}],"value":null,"errorMessage":null,"sortAttribute":null,"sortValues":null,"filterType":"contains","filterValue":"RADIUS","filterByAttribute":"protocol","filterSupported":true}'Templates define CLI configuration snippets using Jinja or Velocity templating languages that are pushed to network devices during provisioning. Templates belong to a Project and can target specific device families and software versions. They support parameterized variables, conditional logic, and can be tagged with Tags for organization. Applicable to both SDA fabric and non-fabric deployments.
Examples
Section titled “Examples”Example-1: Day-N template configuration for ongoing network management using JINJA templating language to create access list templates targeting Catalyst 9300 series switches:
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: access_list_template description: Access List Template language: JINJA composite: false device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XEThe content of the template must be stored in the templates/ directory inside a JINJA file, with the file name matching the template name:
access_list_template.j2
## Access Listip access-list standard 2010 permit 10.0.0.0 0.0.0.25520 permit 20.0.0.0 0.0.0.255Example-2: On-boarding template configuration for initial device provisioning using JINJA templating to automate Day-0 configuration deployment on Catalyst 9300 series switches:
catalyst_center: templates: projects: - name: Project_Onboarding description: Project_Onboarding onboarding_templates: - name: onboarding_template description: Onboarding Template language: JINJA composite: false device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XEExample-3: Composite template configuration combining multiple individual templates into a single deployable unit for complex ACL configurations targeting Catalyst 9300 series switches:
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: ACL_COMPOSITE description: ACL COMPOSITE language: JINJA composite: true device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XE containing_templates: - ACL_41 - ACL_42Templates content:
ACL_41
ip access-list standard 4110 permit {{acl_ip_address}} 0.0.0.255ACL_42
ip access-list standard 4210 permit {{acl_ip_address}} 0.0.0.255Example-4: Network profile template assignment demonstrating how to associate Day-N templates with switching network profiles for automated deployment across multiple sites:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_COMPOSITE sites: - Global/United States/Golden Hills Campus/Sunset Tower - Global/United States/Lakefront Tower/Windy City Plaza - Global/United States/Oceanfront Mansion/Art Deco Mansion - Global/United States/Desert Oasis Branch/Desert Oasis TowerExample-5: Device-specific template deployment showing how to deploy composite Day-N templates directly to individual devices with template-specific variable assignments:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42Example-6: Template redeployment strategies demonstrating different approaches to template life-cycle management on network devices:
6a. Always redeploy template configuration regardless of content changes:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE redeploy_template: ALWAYS variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_426b. Conditional template redeployment only when template content changes:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: composite: - name: ACL_COMPOSITE redeploy_template: ON_CHANGE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42The redeploy_template flag can be applied both at the template level and at the device level:
When defined under a template, it controls how that specific template is redeployed across all devices that use it.
When defined under a device, it controls redeployment of all templates assigned to that device.
This lets you choose whether to consistently redeploy a single template to many devices, or redeploy every template on a specific device.
Example-7: Template-level redeployment when content of template changes, affecting all devices that use this template:
catalyst_center: templates: projects: - name: Project_DayN description: Project_DayN dayn_templates: - name: ACL_COMPOSITE description: ACL COMPOSITE language: JINJA redeploy_template: ON_CHANGE composite: true device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9300 Series Switches" software_type: IOS-XE containing_templates: - ACL_41 - ACL_42Example-8: Device-level redeployment when content of template changes, including both composite and regular templates:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.com device_ip: 192.168.30.64 serial_number: FOC2644021A pid: C9300-24P state: PROVISION dayn_templates: redeploy_template: ON_CHANGE composite: - name: ACL_COMPOSITE variables: - name: acl_ip_address value: 21.21.21.0 template_name: ACL_41 - name: acl_ip_address value: 22.22.22.0 template_name: ACL_42 regular: - name: ACL_BLOCK variables: - name: interface value: GigabtEthernet1/0/1Example-9: Handling duplicate template names across template projects using the project#name delimiter format.
When the same template name exists under multiple template projects (e.g. bfd_interval in both PROJECT1 and PROJECT2), use the # delimiter to specify which project’s template to reference. The format is ProjectName#TemplateName.
9a. Template definition — two projects each containing a template with the same name (bfd_interval):
catalyst_center: templates: projects: - name: PROJECT1 dayn_templates: - name: bfd_interval description: add bfd interfval of 250 min_rx to Enterprise p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE
- name: PROJECT2 dayn_templates: - name: bfd_interval description: add bfd interfval of 350 min_rx to Service Provider p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XENote: The template’s Jinja or Velocity file name must also be prefixed with the project name to avoid conflicts. For example,
PROJECT1#bfd_interval.j2andPROJECT2#bfd_interval.j2.
9b. Network profile : referencing a template that has a duplicate name across projects. Use ProjectName#TemplateName to specify the exact template:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - PROJECT1#bfd_interval sites: - Global/Poland/KrakowWhen the template name is unique across all projects, the project prefix is not required:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_Block sites: - Global/Poland/Krakow9c. Device provisioning: deploying templates with duplicate names to specific devices. Use ProjectName#TemplateName in the name field:
catalyst_center: inventory: devices: - name: FIAB fqdn_name: FIAB.cisco.eu device_ip: 181.1.1.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: composite: - name: PROJECT2#bfd_interval redeploy_template: ALWAYS
- name: LAN-EN2 fqdn_name: LAN-EN2.cisco.eu device_ip: 181.1.1.43 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: composite: - name: PROJECT2#bfd_interval redeploy_template: ALWAYSWhen the template name is unique across all projects, the project prefix is not required:
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.eu device_ip: 198.18.130.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: regular: - name: ACL_43 variables: - name: acl_ip_address value: 23.23.23.0Example-10: Backward compatibility: mixing existing (bare name) and new (ProjectName#TemplateName) formats across templates, network profiles, and device provisioning.
The project#name delimiter is only required when the same template name exists under multiple projects. All existing YAML without the prefix continues to work unchanged.
10a. Templates — ACL_Block is unique to PROJECT1, while Day_N_remove_bfd exists in both projects:
catalyst_center: templates: projects: - name: PROJECT1 dayn_templates: - name: ACL_Block description: ACL to block malicious IPs device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE - name: Day_N_remove_bfd description: Remove BFD from C9kv p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE
- name: PROJECT2 dayn_templates: - name: Day_N_remove_bfd description: Remove BFD from C9kv p2p ISIS interfaces language: JINJA device_types: - product_family: "Switches and Hubs" product_series: "Cisco Catalyst 9000 Series Virtual Switches" software_type: IOS-XE10b. Network profiles — ACL_Block is unique so bare name works (old format). Day_N_remove_bfd is duplicated so project#name is required (new format). Both formats coexist in the same list:
catalyst_center: network_profiles: switching: - name: SDA SWITCH PROFILE dayn_templates: - ACL_Block - PROJECT2#Day_N_remove_bfd sites: - Global/Poland/Krakow10c. Device provisioning — a single device deployed with both a duplicate-name template (PROJECT2#Day_N_remove_bfd, new format) and a unique template (ACL_Block, old format):
catalyst_center: inventory: devices: - name: EDGE01 fqdn_name: EDGE01.cisco.eu device_ip: 198.18.130.1 pid: C9KV-UADP-8P state: PROVISION device_role: ACCESS site: Global/Poland/Krakow/Bld A dayn_templates: regular: - name: PROJECT2#Day_N_remove_bfd redeploy_template: ALWAYS - name: ACL_Block variables: - name: management_interface value: Loopback56In summary — the project#name format is additive. Existing templates, network profiles, and device configurations that use unique template names require no changes.
Note: Using
project#namefor a template that is unique across projects is also valid and will not break anything. For example, ifACL_Blockonly exists underPROJECT1, bothACL_BlockandPROJECT1#ACL_Blockresolve to the same template. The project prefix is only required for duplicate names, but it is accepted for all templates.