热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术文档模板_技术文档专栏在CiscoDNACenter中使用高级Velocity模板第1部分

“我之前写了一篇以即插即用方式使用Velocity模板的博客文章。我答应提供更高级的例子,本文是一个开始。Velocity是一种模板编程语言,已用于Ci

“我之前写了一篇以即插即用方式使用Velocity模板的博客文章。我答应提供更高级的例子,本文是一个开始。Velocity是一种模板编程语言,已用于Cisco Prime Infrastructure和APIC-EM。本系列重点介绍Day-N模板。如果您错过了之前的文章,第一篇文章中的信息可当做是对变量的简单回顾。”

变量|Variables

任何模板的核心都是“变量”的概念。变量允许针对特定设备自定义部分配置,同时确保其他部分在所有设备上的标准化。单个配置模板可以应用于很多设备。Velocity中的变量以“$”开头。如果需要在字符串中嵌入变量,可以使用${var}来标识该变量。

若想配置网络设备的主机名,可以使用cli命令“hostname adam-router”。“adam-router”是设备的名称。将此模板应用于一组设备时,唯一变化的是变量(${hname})。通过设置变量hname=“adam”,模板将被渲染为“adam router”。

487bd1abdf8e20aa56e2690dc4c2f3e4.png

绑定变量

可以使用绑定来访问有关设备的信息(从DNAC角度来看)。有关设备的属性,比如型号,可以链接到变量上。例如,在下面的模板中,我想将${device}设置为清单中的设备产品ID (PID)。

fb77e8f7dbe927e6792b448dcf59889d.png

在模板编辑器中定义模板时,单击变量部分。

2a4a8c41aab642dfa749ae3749b10efb.png

选择模板的变量

然后点击变量(device)和Bind to Source(右下角)。选择Source = “Inventory”, Entity = “Device”, 以及Attribute = “platformId”。这表示该变量应来自Inventory,特别是Device的相关数据。Attibute是可选的,但在这种情况下只有“platformId”(型号)是必须的。对于堆栈,其值是一个逗号分隔列表。

c3bbc7fb7d03a729f7d764cead399620.png

绑定变量

当应用于3650交换机时,这将呈现为hostname adam-WS-C3650-48PQ-E

条件语句|Conditionals

大多数编程语言都提供 if-else 结构。在Velocity中,这很简单,#if #end语句表示一个简单的条件。if语句有很多用例。

可选变量

有时变量可能是可选的,只有在设置了变量时才应该呈现配置行。在下面的示例中,如果$data_vlan变量为空,则将跳过vlan配置。

ec7ce68629f133e40852010b4a8ac9ca.png

相关变量

基于一个变量,你可能想设置其他变量。这将减少模板中所有的变量数。#set用于分配变量。 

在下面的示例中,如果$hostname的值为“switch01”,则变量$loopback被设置为“10.10.100.1”。

70e122da0ecf61d1f101aa85c72645d1.png

启用/禁用触发器

另一个例子是触发要启用或禁用的功能。例如,可以使用变量来切换启用/禁用NetFlow。

为简化示例,假设模板中也包含NetFlow收集器的定义。接口名称也可以是一个变量。在本示例中,“apply”设置为“true”以在接口上启用NetFlow,其他任何设置都将禁用NetFlow。

99f788d923da56c3a4c183e2e206cc37.png

正则表达式|Regular Expressions

上面的if语句展示了字符串的完全匹配。如何进行模式匹配?幸运的是,Velocity模板支持正则表达式(regexp)。有关regexp的详细讨论超出了本文的范围,因为还有很多其他地方可以找到有关regexp的教程。

例如,单个模板可以针对9300交换机执行特定操作,但仍可应用于非9300交换机。交换机的型号(来自清单)可通过绑定变量获得。如上节所述。9300系列交换机的型号结构为9300-NNXXX或9300L-NNXXX-YY。例如,C9300-24UB, C9300-48UXM, C9300L-24P-4G。

相应的正则表达式为“C9300L?-[2|4][4|8].*”。第一部分只是字符串匹配“C9300”。“L?”表示“L”是可选的,有时存在有时不存在。“-”只是一个匹配。“[2|4]”表示2或4,与“[4|8]”相同。最后,“.*”匹配任何剩余字母。变量是$model, 如果正则表达式匹配,则$model.matches()将返回true。

73d8e3072ce6c30466db1438cd8daae6.png

使用正则表达式的另一种方式是替换字符串的一部分。在本例中,我想从型号中提取交换机上的端口数。

我用的是“replaceAll”而不是“match”。ReplaceAll接受正则表达式,以及指定用什么替换它的参数。在本例中,“$1”将替换正则表达式的内容。该正则表达式与上述表达式相同,唯一区别是“([2|4][4|8])”。()将模式保存在内部,稍后可以将其引用为“$1”。该模式是端口数。它将匹配24或48。$ports将设置为24或48。

6bb2d48fcfbb49d4c7791743fa4df392.png如果$model=“C9300L-24P-4G”,则$port将设置为24。

21daa55379cd9131396bac83de5620e5.png

接下来是什么?
本博客展示了Velocity模板的高级主题。本系列的下一个博客将对这些进行扩展,以更详细地介绍绑定变量,并提供更多示例。




推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • OCI连接MySQL_PLSQL Developer连接远程数据库OCI客户端安装方法
    本文介绍了使用OCI客户端连接MySQL和PLSQL Developer连接远程数据库的安装方法,避免了在本地安装Oracle数据库或类似的开发套件的麻烦,同时解决了PLSQL Dev连接远程Oracle时的配置问题。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
author-avatar
江西理工大学-交通091班-李吉平
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有