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




推荐阅读
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • 本文深入探讨了Linux内核中进程地址空间的设计与实现,包括虚拟地址空间的概念、内存描述符`mm_struct`的作用、内核线程与用户进程的区别、进程地址空间的分配方法、虚拟内存区域(VMA)的结构以及地址空间与页表之间的映射机制。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
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社区 版权所有