热门标签 | 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模板的高级主题。本系列的下一个博客将对这些进行扩展,以更详细地介绍绑定变量,并提供更多示例。




推荐阅读
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了一个关于正则的困惑,即为什么一个函数会获取parent下所有的节点。同时提出了问题是否是正则表达式写错了。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
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社区 版权所有