如何基于Ansible role argument spec生成Markdown格式文档?
从Ansible角色参数规范(Argument Spec)生成Markdown文档的方法
目前有多种成熟的实现方案可以直接使用,无需从零开发解析逻辑:
- 方案1:使用ansible-lint内置文档生成功能(推荐,适配绝大多数场景)
ansible-lint是Ansible官方生态的代码校验工具,目前已经内置了从角色参数规范生成文档的能力,操作步骤如下:- 安装ansible-lint:
pip install ansible-lint - 进入对应角色的根目录,执行命令:
ansible-lint --generate-docs
工具会自动解析meta/argument_specs.yml中的所有配置项,包括参数名、类型、必填标记、默认值、描述信息,自动生成标准化的Markdown参数表格,直接写入README.md文件,已有的非参数部分内容不会被覆盖。
- 安装ansible-lint:
- 方案2:使用antsibull-docs工具(适合Collection场景)
如果你要生成的是Ansible Collection内包含的角色文档,可以用Ansible官方用来构建生态文档的antsibull工具:- 安装antsibull-docs:
pip install antsibull-docs - 执行命令生成Markdown格式的角色文档:
antsibull-docs role --format md <你的角色全限定名>
- 安装antsibull-docs:
- 方案3:自定义脚本实现(适合有特殊格式需求的场景)
因为角色参数规范本身是标准YAML结构,你可以用任意语言读取后自行拼接Markdown格式,Python实现示例逻辑如下:import yaml with open("meta/argument_specs.yml", "r") as f: spec = yaml.safe_load(f) # 生成Markdown表格头 md = "| 参数名 | 类型 | 必填 | 默认值 | 描述 |\n| --- | --- | --- | --- | --- |\n" # 遍历参数生成行 for arg_name, arg_info in spec["argument_specs"]["main"]["options"].items(): required = "是" if arg_info.get("required", False) else "否" default = arg_info.get("default", "无") if not required else "-" md += f"| {arg_name} | {arg_info.get('type', 'str')} | {required} | {default} | {arg_info.get('description', '')} |\n" # 写入文件 with open("ARGS.md", "w") as f: f.write(md)
注意:生成文档的质量取决于参数规范的完善度,建议补全所有参数的
description、type、required、default字段,避免生成的文档存在信息缺失。
内容的提问来源于stack exchange,提问作者ProfHase85
相关产品推荐
相关产品推荐

