我使用谷歌云部署管理器来管理基础设施作为代码(IAC(,他们支持提供用于描述IAC模板的模式文件。他们对jsonschema的支持有点奇怪——文档非常简短,但它表明他们支持最新版本的模式,而且他们要求标题和描述位于info对象中。
这很烦人,因为我的模式使用HTML呈现器,它实现了jsonschema,因此,它需要将标题和描述设置为顶级属性。
为了满足两者,我需要复制,例如:
title: foo
description: bar
info:
title: foo
description: bar
我希望只定义一次title和description值,然后使用一些$ref: "#/$defs/title"
魔术,但我不认为您可以使用它来动态设置像title这样的值,因为此功能旨在让模式解析器从其他地方获取块内容。
除了动态呈现我不想做的模式文件之外,还有什么方法可以避免重复这些值吗?
据我所知,没有办法在json模式中使用引用
作为一种粗略的解决方法,您可以使用脚本添加/替换占位符:
#!/bin/bash
sed -i 's/$title/title: foo/g' file.json
sed -i 's/$desc/description: bar/g' file.json