如何实现Markdown模板化?Azure路由表转文档方案咨询
实现Azure路由表到Markdown的模板化方案
入手步骤
- 提取标准化数据:先把流水线输出的Azure路由表转换成JSON、YAML这类结构化格式,确保每个路由条目包含
名称、地址前缀、下一跳类型、下一跳地址等核心字段。 - 选择适配的模板引擎:根据你的技术栈选对应工具,核心是能把结构化数据填充到预定义的Markdown模板中。
- 整合进流水线:把模板渲染步骤加入现有流水线,输出最终的Markdown文档。
工具推荐与实用示例
1. Jinja(跨语言通用,适配性强)
Jinja不仅是Python生态的主流模板引擎,其他语言也有同类实现(比如JavaScript的Nunjucks、Java的JinjaJava),适合大多数场景。
Python示例:
- 准备结构化路由数据(模拟流水线输出的转换结果)
route_table_data = { "name": "prod-vnet-route-table", "routes": [ {"name": "default-to-firewall", "address_prefix": "0.0.0.0/0", "next_hop_type": "VirtualAppliance", "next_hop_address": "10.0.0.5"}, {"name": "on-prem-route", "address_prefix": "192.168.0.0/16", "next_hop_type": "VPNGateway", "next_hop_address": ""}, {"name": "internal-subnet", "address_prefix": "10.0.1.0/24", "next_hop_type": "VnetLocal", "next_hop_address": ""} ] }
- 编写Jinja Markdown模板(保存为
route_table_template.md.j2)
# Azure路由表信息:{{ route_table_data.name }} ## 路由条目列表 | 路由名称 | 地址前缀 | 下一跳类型 | 下一跳地址 | |----------|----------|------------|------------| {% for route in route_table_data.routes %} | {{ route.name }} | {{ route.address_prefix }} | {{ route.next_hop_type }} | {{ route.next_hop_address or '-' }} | {% endfor %}
- 渲染生成Markdown
from jinja2 import Template with open("route_table_template.md.j2", "r") as f: template = Template(f.read()) markdown_output = template.render(route_table_data=route_table_data) # 输出到文件或流水线 with open("route_table_report.md", "w") as f: f.write(markdown_output)
2. markdown-subtemplate(Markdown专属轻量化工具)
这个工具专门针对Markdown场景设计,语法更简洁,无需学习通用模板引擎的复杂规则,适合纯Markdown模板需求。
示例:
- 准备YAML格式的路由数据(保存为
route_data.yaml)
name: prod-vnet-route-table routes: - name: default-to-firewall address_prefix: 0.0.0.0/0 next_hop_type: VirtualAppliance next_hop_address: 10.0.0.5 - name: on-prem-route address_prefix: 192.168.0.0/16 next_hop_type: VPNGateway next_hop_address: ""
- 编写Markdown模板(保存为
route_template.md)
# Azure路由表信息:{{ name }} ## 路由条目列表 | 路由名称 | 地址前缀 | 下一跳类型 | 下一跳地址 | |----------|----------|------------|------------| {% for route in routes %} | {{ route.name }} | {{ route.address_prefix }} | {{ route.next_hop_type }} | {{ route.next_hop_address or '-' }} | {% endfor %}
- 执行渲染(命令行方式)
# 已安装工具后直接运行 markdown-subtemplate --template route_template.md --data route_data.yaml --output route_table_report.md
其他技术栈选项
- JavaScript/TypeScript:用Handlebars或EJS,语法逻辑和Jinja类似,适合前端或Node.js流水线。
- Go:用内置的
text/template包,直接在Go代码中完成Markdown渲染,无需额外依赖。 - PowerShell:结合
ConvertTo-Markdown和自定义模板逻辑,适配Windows或Azure DevOps的PowerShell流水线。
内容的提问来源于stack exchange,提问作者falken
相关产品推荐
相关产品推荐

