我有一个像这样的yaml文件:
local: &local image: xxx # *tons of config* ci: <<: *local image: # delete build: .
我希望ci继承local的所有值,除了image。是否有办法“删除”此值?
ci
local
image
nsc4cvqm1#
没有办法在YAML文件中将key标记为删除。您只能使用overwrite existing values。后者是你要做的,你把空标量作为值关联到键image,就像你写的那样:
key
image: null # delete
您可以做两件事:后处理或在YAML文件中进行基本Map。如果你想进行后处理,你可以给image或者一个特殊标记的对象关联一个特殊的唯一值,然后在加载后递归遍历树,删除带有这个特殊值的键值对。你是否已经可以在解析过程中使用钩子或者覆盖它的一些方法,取决于解析器。使用基本Map需要的工作较少,但对YAML文件的干扰较大:
localbase: &lb # *tons of config* local: &local image: xxx ci: <<: *lb build: .
如果你做前者,你应该注意到如果你使用一个在往返过程中保留“合并层次结构”的解析器(就像我的ruamel.yaml解析器可以做的那样),仅仅删除键值对是不够的,在这种情况下,来自local的原始键值对会回来。
ruamel.yaml
g52tjvyc2#
对于接受值列表的属性,可以将[]作为值发送。例如,在docker-compose中,你不想继承ports:
[]
ports
service_1: &service_1 # some other properties. ports: - "49281:22" - "8876:8000" # some other properties image: some_image:latest service_2: <<: *service_1 ports: [] # it removes ports values. image: null # it removes image value.
2条答案
按热度按时间nsc4cvqm1#
没有办法在YAML文件中将
key
标记为删除。您只能使用overwrite existing values。后者是你要做的,你把空标量作为值关联到键
image
,就像你写的那样:您可以做两件事:后处理或在YAML文件中进行基本Map。
如果你想进行后处理,你可以给
image
或者一个特殊标记的对象关联一个特殊的唯一值,然后在加载后递归遍历树,删除带有这个特殊值的键值对。你是否已经可以在解析过程中使用钩子或者覆盖它的一些方法,取决于解析器。使用基本Map需要的工作较少,但对YAML文件的干扰较大:
如果你做前者,你应该注意到如果你使用一个在往返过程中保留“合并层次结构”的解析器(就像我的
ruamel.yaml
解析器可以做的那样),仅仅删除键值对是不够的,在这种情况下,来自local
的原始键值对会回来。g52tjvyc2#
对于接受值列表的属性,可以将
[]
作为值发送。例如,在docker-compose中,你不想继承
ports
: