合并Yaml arrarys嵌套

时间:2018-12-28 23:32:27

标签: arrays dictionary docker-compose yaml

这是Ben的帖子is there YAML syntax for sharing part of a list or map的后续工作,尽管我走了一步,合并了两个数组后又继承了第三次。

我正在创建一个docker-compose.yml文件,并希望像这样做锚点和别名

x-template:
  base-template: &base-template
    environemt:
      FOO=BAR
  custom-template-1: &custom-template1
    <<: *base-template
    environment+:
      FOO2=BAR2

services:
  service-1:
    <<: *custom-template1

但是我得到了错误

Unsupported config option for services.service-1: 'environment+'

如果我没有在environment+:级别使用custom-tamplate-1:,或者如果我在environment+:级别定义了service-1:,那么它将起作用。

我希望结果是

services:
  service-1:
    environment:
      FOO:BAR
      FOO2:BAR2

有可能实现我想要的吗?

1 个答案:

答案 0 :(得分:2)

TL; DR:不能,不可能


首先,您在docker-compose中有拼写错误,请下次复制整个docker-compose。这是我的更正(我不想编辑您的问题),并扩展为可测试:

repr

此设置将完全覆盖环境设置,因此仅设置了df,我想这就是您要问的原因。

我不知道您在哪里使用plus version: '2.4' x-base-template: &base-template image: alpine command: env environment: - FOO=BAR x-custom-template-1: &custom-template1 <<: *base-template environment: - FOO2=BAR2 services: service-1: <<: *custom-template1 语法,但是我找不到任何有关它的信息。我确实发现的唯一地方FOO2https://yaml.org/refcard.html中,但是根本没有提到数组。那是字符串。

您根本无法合并数组,但是可以对环境使用+语法,并且可以通过以下方式进行合并:

+

我们正在使用的合并Merge Key Language-Independent Type不支持嵌套合并。这意味着密钥要么是从一个对象中选取的,要么是从另一个对象中选取的,而不是组合。这是有意为之的,在大多数情况下,这是良好的行为。可悲的是,没有yaml功能(我所知道的任何功能)都支持嵌套合并,因此对您问题的简单答案是“不,这是不可能的”


旁注:GitLab尝试使用其专有的extends支持

的CI配置解决此问题。
  

基于键的反向深度合并