如何从yamlconfiguration中删除inheritance属性?

我有这样一个yaml文件:

local: &local image: xxx # *tons of config* ci: <<: *local image: # delete build: . 

我希望ciinheritancelocal所有值,除了image

有没有办法“删除”这个值?

不,没有办法在YAML文件中标记要删除的key 。 您只能覆盖现有的值 。

而后者就是你所做的,你把空标量作为关键image价值,就像你会写:

  image: null # delete 

有两件事你可以做:后处理或在你的YAML文件中做一个基础映射。

如果要后处理,则将特殊的唯一值与image或特定标记的对象相关联,并在recursion加载后遍历树,以删除具有此特殊值的键值对。 无论你在parsing过程中是否已经可以做到这一点,使用钩子或覆盖它的一些方法,取决于parsing器。

使用基本映射需要较less的工作,但是对YAML文件更具侵入性:

 localbase: &lb # *tons of config* local: &local image: xxx ci: <<: *lb build: . 

如果你这样做,你应该注意到,如果你使用一个parsing器来保存“合并层次结构”(就像我的ruamel.yamlparsing器可以做的那样),删除键值对是不够的,来自local的原件会回来。 其他parsing器,只是在加载时解决这个问题没有这个问题。

Interesting Posts