在具有几乎相同元素的列表中有效使用YAML锚点

  • 本文关键字:有效 列表 锚点 YAML 元素 yaml
  • 更新时间 :
  • 英文 :


我在YAML文件中有这样的模式:

X:
- B: 1
C:
c1: 1
c2: 0
D
d1: 9
d2: 27
- B: 1
C:
c1: 2
c2: 0 
D
d1: 9
d2: 27
- B: 1
C:
c1: 3
c2: 0 
D
d1: 9
d2: 27

在实践中,对于列表中的每个元素,都有许多键(不仅仅是BCD(。列表中每个元素的内容几乎相同——只有C中的c1发生变化。

有没有一种方法可以使用锚点来避免重新写入列表中的每个元素,比如定义一些模板列表元素,然后只修改c1

如果您的YAML实现支持合并键(有很多支持,但这不是必需的,因为它是YAML 1.1遗留下来的(,您可以执行

X:
- &a
B: 1
C:
c1: 1
c2: 0
D:
d1: 9
d2: 27
- <<: *a
C:
c1: 2
c2: 0 
- <<: *a
C:
c1: 3
c2: 0 

这会将第一个序列项中的键值对合并到其他项中,但会跳过C,因为它被覆盖了。您不能跳过c1,因为合并键不会合并新给定的C的内容。

如果C的实际不变内容较大,并且您不想重复,您可以额外进行

X:
- &a
B: 1
C:
<<: &b
c2: 0
c1: 1
D:
d1: 9
d2: 27
- <<: *a
C:
<<: *b
c1: 2
- <<: *a
C:
<<: *b
c1: 3

这是YAML唯一支持的模板工具。要执行更复杂的模板,您需要在YAML之上安装一个模板引擎。许多YAML重度用户,例如Ansible、SaltStack和其他用户,都使用一个来做这些事情。这取决于您的环境是否有可用的模板引擎。

最新更新