{"id":459,"date":"2025-09-28T21:34:20","date_gmt":"2025-09-28T21:34:20","guid":{"rendered":"https:\/\/www.passguide.com\/blog\/?p=459"},"modified":"2025-09-28T21:34:20","modified_gmt":"2025-09-28T21:34:20","slug":"streamlining-configuration-automation-via-catalyst-center-and-assurance","status":"publish","type":"post","link":"https:\/\/www.passguide.com\/blog\/streamlining-configuration-automation-via-catalyst-center-and-assurance\/","title":{"rendered":"Streamlining Configuration Automation via Catalyst Center and Assurance"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">In a modern enterprise network, managing and deploying consistent configurations across a fleet of switches located at various sites is a challenging task. Manual configurations are time-consuming and prone to errors, often leading to inconsistencies that create operational risks and reduce efficiency. The availability of automation platforms like Catalyst Center provides an opportunity to simplify this process. However, limitations arise when the deployment is licensed only for the Assurance feature set, excluding access to full SD-Access automation capabilities. This was the exact scenario for a recent customer project that involved a full switch refresh and Catalyst Center deployment across all of their sites.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">With only Assurance licensing available, the key objective was to determine how to automate as much of the switch configuration process as possible using the tools included with Catalyst Center. Without SD-Access fabric capabilities, alternative methods had to be explored. After testing several techniques, a strategy was developed that allowed for the automation of almost every aspect of switch configuration, excluding only interface and SVI commands, which still required manual handling.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The starting point for this strategy involved understanding the configurations already present on the switches. While this initially appeared to be a simple process, it quickly became apparent that identifying common configurations required a more nuanced approach. Commands had to be categorized to make automation manageable and targeted. Three primary configuration categories emerged, each influencing the automation approach.<\/span><\/p>\n<p><b>Global Commands<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Global commands are those applied universally across all devices in the organization, regardless of location or function. These settings form the baseline of every switch\u2019s configuration and typically include administrative and security elements. Common examples include the login banner, NTP settings, DNS configurations, and AAA authentication methods.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By identifying and grouping these commands as global, they can be applied uniformly using Catalyst Center\u2019s built-in automation tools. Applying global configurations ensures a consistent operational and security posture across all sites. It also reduces the need for repeated configuration tasks for each switch individually.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the context of the project, these commands were set up using Catalyst Center&#8217;s Design menu under Network Settings. The flexibility to apply these globally, or override them on a per-site basis, added further value. Even though all customer sites used the same global settings, the ability to tailor settings later based on regional needs remained available through the site hierarchy.<\/span><\/p>\n<p><b>Site-Specific Commands<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Site-specific commands are settings that must vary based on the physical or logical location of the switch. These often include logging destinations, region-specific AAA servers, or unique SNMP configurations tailored to local monitoring tools. Failing to manage these variations properly can lead to misrouted logs, failed authentication attempts, or broken integrations with network monitoring platforms.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To automate site-specific configurations, the Catalyst Center hierarchy is leveraged. Each site is defined in the Catalyst Center topology, and network profiles or templates are created and assigned at this level. This enables targeted deployment of commands to switches at specific sites while maintaining a centralized automation strategy.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For this customer deployment, once commands were identified as site-specific, templates were customized and applied through Catalyst Center\u2019s site hierarchy. This allowed for subtle but necessary differences between regions to be reflected in the automated configuration process.<\/span><\/p>\n<p><b>Type-Specific Commands<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Type-specific commands apply to switches based on their intended function in the network. For example, core switches may need OSPF routing configurations, while access switches require specific VLAN handling or port security policies. Recognizing which devices require which commands is critical to deploying relevant configurations without overloading or misconfiguring devices.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To manage this layer of automation, device tagging within Catalyst Center was used. Tags were created to represent different switch roles, such as Core, Distribution, Edge, and Access. Templates were then associated with these tags to ensure that only relevant configurations were applied to each switch. This enabled precise control over what configurations were pushed based on the role of each switch.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the case of the customer\u2019s traditional three-tier architecture, switches were tagged according to naming conventions, allowing Catalyst Center to automatically apply the correct templates during provisioning. This significantly streamlined the deployment process and ensured functional accuracy.<\/span><\/p>\n<p><b>Out-of-Box Automation in Catalyst Center<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Catalyst Center offers a suite of built-in automation tools designed to simplify the initial configuration process. Even under the limitations of the Assurance-only license, many essential settings can be automated directly using the Design and System Settings interfaces.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The Design &gt; Network Settings &gt; Network section is where foundational services are defined. Here, administrators can specify global network services, including AAA servers, NTP servers, DNS servers, DHCP servers, and the message of the day banner. In this project, all these settings were implemented as global configurations to maintain uniformity. However, Catalyst Center also permits these to be overridden per site, which supports flexibility in more complex deployments.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Within the System &gt; Settings menu, other network services can be configured. These include SNMP servers, Syslog servers, and Netflow destinations. Catalyst Center, by default, configures itself to receive data from these protocols. However, administrators can also define external destinations to integrate with existing monitoring and SIEM platforms. It is important to note that while Catalyst Center allows IP address input for these services, other elements such as SNMP strings and user credentials must still be applied via custom templates.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The out-of-box features covered approximately half of the global configurations required in this deployment. These tools are effective for establishing consistent foundational settings across the network and provide an essential building block for further automation.<\/span><\/p>\n<p><b>Custom Templates in Catalyst Center<\/b><\/p>\n<p><span style=\"font-weight: 400;\">For configurations that fall outside of what Catalyst Center supports natively, custom templates provide the necessary flexibility. Templates can be written using scripting languages like Ninja or Velocity and allow for the use of logic and variable substitution. This means configurations can adapt based on device characteristics, site location, or assigned tags, making the deployment process intelligent and adaptable.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To begin creating custom templates, the administrator navigates to the Template Hub under the Tools section. Within the Template Hub, the first step is to create a project to organize related templates. Creating a project keeps custom templates separate from the system-provided ones and simplifies navigation in environments with large libraries.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Each template is then created under the project. It is important to use a clear and consistent naming convention, such as Global-TemplateName or Site-TemplateName. During creation, administrators select the scripting language, specify the IOS type, and choose the device family. This last step ensures compatibility between the template and the switch hardware. For example, some commands supported on Catalyst 9300 switches may not work on Catalyst 9200 switches due to differences in the IOS-XE versions they support.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Before creating templates, it is useful to define tags within Catalyst Center. These tags can be assigned to devices and referenced within the templates to control where and how configurations are applied. For instance, a template designed for OSPF routing could be tagged to apply only to Core and Distribution switches.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After the template is created, the configuration commands are entered. These can include conditional logic and variable-based inputs, enabling flexible and dynamic configuration generation. Once completed, the template is saved and committed, making it available for deployment.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Custom templates allowed the project team to automate the remaining half of the configurations not covered by out-of-box features. With the combination of projects, templates, and tags, Catalyst Center provided the structure necessary for scalable and accurate automation.<\/span><\/p>\n<p><b>Applying Templates Using Catalyst Center<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Once all necessary templates are created\u2014covering global, site-specific, and type-specific configurations\u2014the next step is applying them to devices in a structured and scalable way. Catalyst Center uses two primary mechanisms to control how and where templates are applied: <\/span><b>Network Profiles<\/b><span style=\"font-weight: 400;\"> and <\/span><b>Tags<\/b><span style=\"font-weight: 400;\">. These tools allow configuration to be pushed automatically during the provisioning process based on a device\u2019s location and intended role in the network.<\/span><\/p>\n<p><b>Introduction to Network Profiles<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Network Profiles in the Catalyst Center act as bundles of configuration assigned to specific sites and device roles. A profile groups templates together, allowing all associated configurations to be applied to a switch during provisioning. Each Network Profile is created per device role, such as switching, routing, or wireless, and per site.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For this project, only switches were involved, so a single device role was used. However, the concept scales across multiple roles and can be extended to other device types in larger environments.<\/span><\/p>\n<p><b>Creating Network Profiles for Automation<\/b><\/p>\n<p><span style=\"font-weight: 400;\">To create a Network Profile, navigate to the Design section within Catalyst Center, then choose Network Profiles. From there, a new profile can be created and associated with the relevant device role and site.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Within the profile, templates can be added under the nth-day configuration tab. This is where templates are assigned for initial deployment and ongoing automation. In the project, all global and site-specific templates were added to each site-specific Network Profile. This allowed for the automation of a majority of the switch configuration during the provisioning process.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Each Network Profile is then bound to a specific site using the Assign Site function. When a switch is discovered or manually added and assigned to that site, it inherits the Network Profile during provisioning. The templates in the profile are automatically evaluated and applied as part of the configuration push.<\/span><\/p>\n<p><b>Limitations of Network Profiles Alone<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Network Profiles alone cannot address all configuration needs. Specifically, they cannot distinguish between different switch types within the same site. For example, if a site contains both access and core switches, and each requires different routing configurations, a Network Profile cannot apply different templates to each based on role.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To solve this problem, Catalyst Center uses Tags. Tags introduce another layer of control, allowing templates to be applied based on device classification within the same Network Profile.<\/span><\/p>\n<p><b>Understanding Tags in Catalyst Center<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Tags are user-defined labels assigned to devices that describe their role or classification. In the context of this project, Tags such as Core, Distribution, Edge, and Access were created. These Tags allowed the system to identify the intended use of a switch and apply only the relevant templates.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For instance, a template containing OSPF routing commands should only be applied to Core and Distribution switches. By tagging those switches accordingly, the OSPF template is selectively deployed only where appropriate.<\/span><\/p>\n<p><b>Creating and Managing Tags<\/b><\/p>\n<p><span style=\"font-weight: 400;\">To create and manage Tags, navigate to the Provision menu and select Inventory. Above the device list, there is a Tag button. Hovering over it reveals the option to manage tags. Here, administrators can define new tags and apply logic to automate their assignment.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this project, a naming convention was used to simplify tag assignment. Device hostnames included role-based identifiers such as CORE, DIS, ACC, and EDG. In the advanced settings of each tag, logic was defined so that if the hostname contained one of these identifiers, the appropriate tag would be assigned automatically.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This approach saved time and reduced the chance of tagging errors. When a switch was discovered by Catalyst Center and added to the inventory, it was immediately tagged based on its hostname. These tags were then used to determine which templates would be applied during provisioning.<\/span><\/p>\n<p><b>Applying Templates Based on Tags<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Tags can be associated with templates during creation in the Template Hub. Each template includes an option to define applicable tags. This defines the conditions under which the template should be applied.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">During provisioning, Catalyst Center checks the tags assigned to each device. Templates within the associated Network Profile are then filtered based on these tags. Only templates with matching tags are applied. This provides granular control over configuration deployment, ensuring each device receives only the settings it requires.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the customer project, this approach allowed different templates to be applied to access switches versus core switches within the same site. By combining Network Profiles with Tags, full configuration automation was achieved based on both location and device function.<\/span><\/p>\n<p><b>Workflow Example: End-to-End Automation<\/b><\/p>\n<p><span style=\"font-weight: 400;\">To illustrate how all the components work together, consider a new core switch being added to Site A:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The switch is bootstrapped with a hostname such as SITEA-CORE-01. This hostname triggers automatic tag assignment via the tagging logic defined in Catalyst Center.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The switch is then added to the Catalyst Center inventory and assigned to Site A. Based on this assignment, the switch inherits the Network Profile for Site A.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The Network Profile contains global and site-specific templates. These are evaluated, and any without tag restrictions are applied automatically.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The tagged templates are filtered. Only those tagged with CORE are considered. The switch has the CORE tag, so it receives all relevant CORE templates.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">During provisioning, all selected templates are pushed to the device, resulting in an automated and targeted configuration deployment.<\/span><\/p>\n<p><b>Benefits of This Automation Strategy<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Using Catalyst Center with only the Assurance license, this approach delivered significant value. Configuration tasks that would have previously required manual input for each device were now handled automatically during provisioning. This led to several benefits:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Configuration consistency was achieved across all sites, ensuring each device met global and site-specific standards.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Operational time was significantly reduced, allowing engineers to focus on high-value tasks rather than repetitive CLI work.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Device roles were clearly defined using tags, enabling intelligent configuration targeting and eliminating configuration drift.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The system became scalable, supporting future expansion and changes in network architecture without revisiting each device manually.<\/span><\/p>\n<p><b>Remaining Manual Configuration Tasks<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Despite the automation capabilities described, some configuration elements still require manual input. Specifically, interface configurations and SVIs could not be automated within the Assurance license. These elements were completed manually after initial provisioning.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, because all other aspects of the configuration had been automated, the remaining tasks were minimal. This reduced the potential for error and significantly accelerated the deployment timeline.<\/span><\/p>\n<p><b>Preparing for Advanced Template Development<\/b><\/p>\n<p><span style=\"font-weight: 400;\">With the foundational structure of automation in place, the next phase of optimization involves expanding the use of logic, variables, and conditionals within custom templates. By leveraging the scripting capabilities of Ninja and Velocity, administrators can create adaptive templates that adjust based on device, site, and tag input. This will be explored further in the next part.<\/span><\/p>\n<p><b>Introduction to Advanced Template Design<\/b><\/p>\n<p><span style=\"font-weight: 400;\">With the foundational automation process established using global, site-specific, and type-specific templates, along with the application through Network Profiles and Tags, the next step is refining automation with advanced scripting. Cisco Catalyst Center supports powerful template customization using scripting languages like <\/span><b>Ninja<\/b><span style=\"font-weight: 400;\"> and <\/span><b>Velocity<\/b><span style=\"font-weight: 400;\">, which allow logic-based decision-making, dynamic variable substitution, and flexible command application. These features transform static configuration templates into intelligent, reusable assets that adapt to multiple deployment scenarios.<\/span><\/p>\n<p><b>Why Use Advanced Logic in Templates<\/b><\/p>\n<p><span style=\"font-weight: 400;\">The value of scripting logic in templates lies in its ability to:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Avoid duplicate templates for similar use cases<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Reduce human error during manual customization<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">. Make templates more scalable across diverse hardware and software platforms.s<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Adapt configuration dynamically based on site, device role, or variable input<\/span><\/p>\n<p><span style=\"font-weight: 400;\">With these goals in mind, template authors can write once and deploy many times with accuracy and confidence.<\/span><\/p>\n<p><b>Scripting Language Options<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Catalyst Center supports two scripting languages for template creation:<\/span><\/p>\n<p><b>Velocity<\/b><span style=\"font-weight: 400;\"> is a Java-based scripting language that supports variables, conditions, and loops. It is commonly used in Cisco DNA templates due to its simplicity and integration with structured data.<\/span><\/p>\n<p><b>Ninja<\/b><span style=\"font-weight: 400;\"> is another supported language designed for simple configurations. It is less common in more complex deployments but suitable for static or partially dynamic templates.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For advanced logic and structured configuration control, <\/span><b>Velocity<\/b><span style=\"font-weight: 400;\"> is the preferred language in this implementation.<\/span><\/p>\n<p><b>Template Components and Structure<\/b><\/p>\n<p><span style=\"font-weight: 400;\">A well-structured template includes the following core components:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Header definitions for variables and required data<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Conditional logic blocks to manage different configuration outcomes<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Loop structures to apply repeated commands like VLANs or ACLs<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Device family or platform-specific commands gated with if-else statements<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Commented sections for clarity and maintainability<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This modular approach keeps templates easy to manage while making them powerful enough to address a wide variety of scenarios.<\/span><\/p>\n<p><b>Using Variables in Templates<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Variables act as placeholders that can be replaced at runtime with actual values. In Catalyst Center, variables can be created in the template definition and mapped to site-specific, device-specific, or user-entered values.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, in a Velocity template:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">shell<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#set ($ntpServer = \\&#8221;${ntp_server}\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">ntp server $ntpServer<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this example, the variable <\/span><span style=\"font-weight: 400;\">ntp_server<\/span><span style=\"font-weight: 400;\"> is defined in the Catalyst Center GUI and assigned a value per site. When the template is executed, the actual IP address replaces the placeholder.<\/span><\/p>\n<p><b>Default Values and Optional Inputs<\/b><\/p>\n<p><span style=\"font-weight: 400;\">To make templates resilient, it is useful to assign default values in case no input is provided. Velocity supports this with conditional operators.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">shell<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#set ($ntpServer = $ntp_server)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#if (!$ntpServer)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0#set ($ntpServer = \\&#8221;192.168.1.1\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">ntp server $ntpServer<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this example, if no value is assigned to <\/span><span style=\"font-weight: 400;\">ntp_server<\/span><span style=\"font-weight: 400;\">, the script defaults to using <\/span><span style=\"font-weight: 400;\">192.168.1.1<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><b>Conditional Logic for Device Role<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Templates often need to behave differently based on the type of device they are applied to. Conditional logic allows the template to evaluate the tag or input and adjust the configuration accordingly.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">shell<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#if ($device_role == \\&#8221;CORE\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">router ospf 10<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0network 10.0.0.0 0.255.255.255 area 0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#if ($device_role == \\&#8221;ACCESS\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">spanning-tree portfast default<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this scenario, the template checks the value of <\/span><span style=\"font-weight: 400;\">device_role<\/span><span style=\"font-weight: 400;\"> and applies the appropriate configuration. This enables a single template to serve multiple use cases.<\/span><\/p>\n<p><b>Looping Through Lists<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Another advanced technique is using loops to apply commands multiple times based on a list input. This is useful for VLANs, ACLs, or interface configurations that vary per site or device.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">bash<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#foreach ($vlan in $vlan_list)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">vlan $vlan.id<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0name $vlan.name<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here, the template loops through a list of VLANs and creates each one dynamically. The <\/span><span style=\"font-weight: 400;\">$vlan_list<\/span><span style=\"font-weight: 400;\"> variable must be a structured list of objects passed to the template.<\/span><\/p>\n<p><b>Platform-Specific Configuration Handling<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Certain commands may only be valid on specific switch models. Velocity logic can also help handle differences between platforms.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">shell<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#if ($platform == \\&#8221;C9300\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">stack-mac persistent timer 0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#if ($platform == \\&#8221;C9200\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">No stack-mac persistent<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This ensures platform-specific commands are only applied where they are valid, avoiding errors during deployment.<\/span><\/p>\n<p><b>Template Reusability Across Sites<\/b><\/p>\n<p><span style=\"font-weight: 400;\">With variables, logic, and conditional branching, a single well-designed template can be used across all customer sites with minimal adjustments. During the provisioning process, Catalyst Center prompts for the required inputs or fetches them based on site configuration, device metadata, or tags. This significantly reduces the total number of templates needed in the system.<\/span><\/p>\n<p><b>Building Complex Templates Step-by-Step<\/b><\/p>\n<p><span style=\"font-weight: 400;\">A typical process for building complex templates includes:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">Identifying which parts of the configuration are static and which are dynamic<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Defining the required variables and their types<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Mapping those variables in Catalyst Center to inputs (either site-based, device-based, or user input)<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Adding logic to conditionally include or exclude sections of the template<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Testing the template against a variety of device roles, platforms, and input values<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">By following this process, even highly specialized configurations can be streamlined and standardized.<\/span><\/p>\n<p><b>Real-World Example: OSPF Template with Tags<\/b><\/p>\n<p><span style=\"font-weight: 400;\">A good example from the project involved automating OSPF routing only on devices tagged as Core or Distribution. The template logic looked like this:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">shell<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#if ($device_tag == \\&#8221;CORE\\&#8221; || $device_tag == \\&#8221;DISTRIBUTION\\&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">router ospf 10<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0network $loopback_ip 0.0.0.0 area 0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0passive-interface default<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0no passive-interface $uplink_interface<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here, several variables are used, and conditional logic ensures that routing is only enabled on specific devices.<\/span><\/p>\n<p><b>Handling Complex Interfaces or VLAN Assignments<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Although interface-level configurations were manually handled in this project, advanced templates can prepare those as well, particularly when the Assurance license is upgraded in the future. Templates can include logic like:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">wasm<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#foreach ($intf in $access_ports)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">interface $intf.name<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0description $intf.Description<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0switchport access vlan $intf.vlan<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0switchport mode access<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0spanning-tree portfast<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#end<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This loops through a list of access port definitions and builds interface configurations automatically.<\/span><\/p>\n<p><b>Best Practices for Template Management<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Keep templates simple and modular. Avoid combining too many roles into a single template unless truly necessary.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Use clear and consistent naming for variables and templates.s<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Document logic with comments inside the template to help future engineers understand the structure<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Test templates on non-production devices before rolling out at scale<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Version control templates are used externally to keep a historical record of changes.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Use the Template Hub\u2019s Projects feature to organize templates by role, site, or purpose.<\/span><\/p>\n<p><b>Validating Templates Before Deployment<\/b><\/p>\n<p><span style=\"font-weight: 400;\">After creating or modifying a template, validation is essential. Catalyst Center provides a preview function that shows the rendered configuration before applying it to a device. Use this feature to:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Check that all variables are substituted correctly<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Ensure no syntax errors exist in the script.t<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Confirm that conditional blocks are evaluating as expected. ed<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Preview differences between multiple devices with different roles, tags, or site assignments<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Validation prevents mistakes and builds confidence in the automation pipeline.<\/span><\/p>\n<p><b>Advanced Template Capabilities<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Advanced scripting transforms Catalyst Center templates from static config pushers into intelligent automation tools. By using logic, loops, and variables, a single template can cover dozens of deployment scenarios. This enhances scalability, improves configuration accuracy, and minimizes operational effort. Even within the limitations of the Assurance license, these techniques dramatically increase the platform\u2019s utility.<\/span><\/p>\n<p><b>Finalizing the Automation Workflow in Catalyst Center<\/b><\/p>\n<p><span style=\"font-weight: 400;\">With templates designed, categorized, and dynamically scripted using variables and logic, the final step in an effective configuration automation project is integrating everything into the actual provisioning and deployment process. This includes standardizing how devices are named, tagged, and assigned to sites, ensuring that Catalyst Center can apply the correct configurations automatically. A strong workflow ensures consistent results and reduces manual intervention, aligning with the goal of scalable, repeatable automation.<\/span><\/p>\n<p><b>Device Naming Conventions as a Trigger for Automation<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Device naming is more than an organizational preference\u2014it can serve as a functional automation trigger in Catalyst Center. A well-planned naming convention allows automatic tag assignment, simplifies inventory searches, and reduces errors during provisioning.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the customer project, each switch was named using a standard format:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">css<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">[SiteCode]-[Role]-[UniqueID]<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Examples include:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NYC-CORE-01<\/span><\/p>\n<p><span style=\"font-weight: 400;\">LAX-ACC-02<\/span><\/p>\n<p><span style=\"font-weight: 400;\">DAL-DIS-01<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This consistent structure allowed Catalyst Center to parse the hostname and apply logic for tagging. By embedding the site and role into the name, both the physical location and network function of the device could be inferred automatically during discovery.<\/span><\/p>\n<p><b>Tagging Devices Based on Hostname Patterns<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Catalyst Center supports tagging rules based on pattern matching within hostnames. This capability was used to assign tags such as CORE, DISTRIBUTION, ACCESS, and EDGE automatically when devices were added to the inventory.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, in the tag management interface, a rule could be defined as:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">sql<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the hostname contains CORE, apply the tag CORE<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the hostname contains DIS, apply the tag DISTRIBUTION<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the hostname contains ACC, apply the tag ACCESS<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This logic greatly reduced manual steps and ensured that each device received the appropriate configurations based on its role in the network. It also ensured consistency when provisioning large batches of devices across multiple sites.<\/span><\/p>\n<p><b>Automating Site Assignment<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Site assignment is critical for enabling the correct Network Profile and applying templates in the Catalyst Center. When a device is added to the platform, it must be associated with a site in the hierarchy.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This was achieved in two ways:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For pre-planned deployments, devices were manually assigned to the correct site based on their location<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> For large-scale rollouts, the discovery process used IP address-based rules to assign devices to sites automatically.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By ensuring that each switch had the correct IP schema and naming format, the provisioning system could place it in the correct part of the hierarchy without intervention.<\/span><\/p>\n<p><b>Bootstrap Configuration for Initial Device Setup<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Before a device can be managed by Catalyst Center, it must have basic connectivity to the network and the management platform. A bootstrap configuration is used to prepare the device for discovery. This configuration is applied manually or through out-of-band methods before the device joins the production network.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The bootstrap configuration typically includes:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Basic hostname and domain<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> IP address and default gateway on the management interface<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> AAA credentials or local login for initial access<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> SNMP or SSH enablement if needed<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> DNS and NTP for time synchronization<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Optional VRF or routing settings for management plane reachability<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here\u2019s an example of a basic Bootstrap configuration used in this project:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">pgsql<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CopyEdit<\/span><\/p>\n<p><span style=\"font-weight: 400;\">hostname NYC-CORE-01<\/span><\/p>\n<p><span style=\"font-weight: 400;\">IP domain-name company.local<\/span><\/p>\n<p><span style=\"font-weight: 400;\">interface vlan 10<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0IP address 10.10.10.2 255.255.255.0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0no shutdown<\/span><\/p>\n<p><span style=\"font-weight: 400;\">ip default-gateway 10.10.10.1<\/span><\/p>\n<p><span style=\"font-weight: 400;\">ip name-server 8.8.8.8<\/span><\/p>\n<p><span style=\"font-weight: 400;\">ntp server 132.163.97.1<\/span><\/p>\n<p><span style=\"font-weight: 400;\">username admin privilege 15 secret 0 admin123<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once this configuration is in place, the switch can be discovered by Catalyst Center, tagged, assigned to a site, and provisioned.<\/span><\/p>\n<p><b>Device Discovery and Inventory Registration<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Catalyst Center includes built-in discovery tools to scan for devices and add them to the inventory automatically. For this deployment, discovery protocols like CDP, LLDP, and SNMP were used. Discovery settings were configured under the Design &gt; Network Settings &gt; Discovery menu.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once discovered, devices appeared in the Provision &gt; Inventory section, where tagging and site assignment could be verified. If bootstrap naming and addressing were done correctly, tags and site locations were applied without any manual steps.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At this point, Catalyst Center was ready to begin provisioning the device using the assigned templates and Network Profile.<\/span><\/p>\n<p><b>Provisioning Workflow<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Provisioning a device in Catalyst Center follows a structured process:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The switch is discovered and added to the inventory<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Tags are applied based on a hostname pattern or a manual override.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> The device is assigned to a site in the hierarchy.y<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> The assigned Network Profile is evaluated. ed<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> All templates under the profile are filtered based on tags.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Relevant global, site-specific, and type-specific templates are selected.d<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> The user initiates the provisioning task.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Catalyst Center pushes the full configuration to the switch.h<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> The provisioning status is monitored for success or failure<\/span><\/p>\n<p><span style=\"font-weight: 400;\">During provisioning, Catalyst Center provides visibility into every step of the process. Errors in variable mapping or logic are displayed in the task logs, allowing for quick troubleshooting.<\/span><\/p>\n<p><b>Post-Provisioning Tasks<\/b><\/p>\n<p><span style=\"font-weight: 400;\">After provisioning is completed, most of the device configuration is in place. Only a few tasks typically remain:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Manually configuring switchports and SVIs, which were excluded due to Assurance license limitations<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Verifying that routing adjacencies or uplinks are operational<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Ensuring that monitoring integrations are active and SNMP\/Syslog\/Netflow data is being sent to external tools<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Backing up the final device configuration as a reference<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In most cases, these steps were minimal and required only a few minutes per switch. Compared to traditional manual configuration, this represented a major time saving and eliminated the potential for basic misconfigurations.<\/span><\/p>\n<p><b>Advantages Realized in Production<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This automated provisioning approach produced measurable operational benefits:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Deployment time was reduced by more than 70% compared to manual CLI configuration<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> All switches across the customer\u2019s global sites shared a consistent baseline configuration.on<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Device roles were tracked through tagging, improving network documentation.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Templates could be updated and redeployed centrally as policies evolved.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Future switches could be added with minimal effort, requiring only bootstrap configuration.n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Perhaps most importantly, the process was repeatable. New engineers could follow the same workflow with predictable results, reducing dependency on any single person\u2019s expertise or memory.<\/span><\/p>\n<p><b>Planning for Growth and Future Enhancements<\/b><\/p>\n<p><span style=\"font-weight: 400;\">While the solution was deployed under an Assurance-only license, it was designed with future scalability in mind. If advanced licensing becomes available later, additional features such as SD-Access, interface templates, and policy-based automation can be layered into the existing framework.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To prepare for that, these forward-looking strategies were included:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Interface templates were drafted and stored offline for future use<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Naming and tagging conventions were documented for easy expansion.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Template projects were kept organized by site, role, and function.n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Provisioning procedures were published internally for training and knowledge transfer.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This ensured that the solution was not only effective for today\u2019s needs but also adaptable for future use cases.<\/span><\/p>\n<p><b>Automation Lifecycle<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This project demonstrated that even with only the Assurance feature set, Catalyst Center can be used to build a powerful and consistent automation framework. The key ingredients included:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Categorizing configuration into global, site-specific, and type-specific templates<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Using Velocity scripting for dynamic and conditional configurations<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Applying configurations through Network Profiles and Tags<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Standardizing device naming, tagging, and site assignment<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"> Automating provisioning workflows and minimizing post-provisioning effort<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By combining thoughtful planning, structured design, and efficient execution, the customer was able to complete a full switch refresh project with automation at the core of the strategy.<\/span><\/p>\n<p><b>Final Thoughts<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Automating switch configuration using Catalyst Center, even with only the Assurance licensing tier, is entirely achievable when approached with structure, strategy, and creativity. Although lacking access to full SD-Access capabilities, the project demonstrated that Catalyst Center can still serve as a powerful platform for standardizing and accelerating switch deployments across an enterprise network.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">What started as a manual task, refreshing switches across numerous sites, transformed into a repeatable automation framework that significantly reduced time, errors, and overhead. By dissecting configurations into global, site-specific, and type-specific layers, and then leveraging Catalyst Center\u2019s built-in tools like Network Settings, Custom Templates, Network Profiles, and Tagging, the solution achieved consistency and control without compromising flexibility.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The key enablers of success included:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Well-planned device naming conventions that enabled automatic tagging<\/span><span style=\"font-weight: 400;\">\n<p><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Thoughtful use of template scripting for variable-based configuration<\/span><span style=\"font-weight: 400;\">\n<p><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Strategic alignment between the site hierarchy and configuration needs<\/span><span style=\"font-weight: 400;\">\n<p><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Automation of base configurations, leaving only interface work as a manual task<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">These methods created a scalable system. As future devices are added or existing ones replaced, the provisioning process remains simple, structured, and consistent. Beyond operational benefits, it also builds a foundation for future growth. Should full DNA licensing or SD-Access become available, the groundwork laid during this deployment can easily evolve to support more advanced features.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This project underscored a broader truth: automation isn\u2019t only about the tools you have, but how you use them. With some creativity and careful design, even limited feature sets can drive meaningful outcomes. The goal isn\u2019t just to configure faster, it\u2019s to configure smarter, and this deployment accomplished exactly that.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you&#8217;re planning a similar project or expanding on this framework, take the time upfront to build your design principles, structure your templates, and think through how roles, sites, and settings interact. Doing so will ensure your automation efforts are sustainable, efficient, and ready for what\u2019s next.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a modern enterprise network, managing and deploying consistent configurations across a fleet of switches located at various sites is a challenging task. Manual configurations [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[198],"tags":[],"class_list":["post-459","post","type-post","status-publish","format-standard","hentry","category-catalyst-center"],"_links":{"self":[{"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/posts\/459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/comments?post=459"}],"version-history":[{"count":1,"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/posts\/459\/revisions"}],"predecessor-version":[{"id":460,"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/posts\/459\/revisions\/460"}],"wp:attachment":[{"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/media?parent=459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/categories?post=459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.passguide.com\/blog\/wp-json\/wp\/v2\/tags?post=459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}