首页 > 解决方案 > 您如何添加、附加或扩展 YAML 序列?

问题描述

如果你有:

bananas:
  foobar: &foobar_seq_bananas
  - source: lorem
  - source: ipsum
  - source: dolor
apples:
  foobar: 
  ???? *foobar_seq_bananas
  - source: 1000

您在 apples / foobar 中使用什么语法来将项目添加到引用的序列中?

我试过这个语法:

bananas:
  foobar: &foobar_seq_bananas
  - source: lorem
  - source: ipsum
  - source: dolor
apples:
  foobar:
   - *foobar_seq_bananas
   - source: 1000

但它会生成一个列表列表:

apples: 
  foobar: 
    - 
      - 
        source: lorem
      - 
        source: ipsum
      - 
        source: dolor
    - 
      source: 1000

期望的结果将是 . 下的单个(平面)列表apples/foobar

标签: yaml

解决方案


YAML 不是一种编程语言,通常不会为您提供任何类型的运算符。

一个例外是为过时的 YAML 1.1 指定的合并键,它不是规范的一部分,但受到某些实现的支持。但是,这是用于合并映射,而不是序列。

如果您想在 YAML 中的多个位置复制项目,最好的办法是使用一些模板语言(YAML 流行的是 Jinja2,例如在 Ansible 和 SaltStack 中使用)。加载代码必须知道您使用模板语言,如果没有,则必须在将其提供给加载代码之前使用模板语言手动预处理 YAML。


推荐阅读