我有一个像这样的yaml文件: local: local image: xxx # *tons of config*ci: : *local image: # delete build: . 我希望ci继承本地的所有值,除了图像. 有没有办法“删除”这个值? 没有办法在YAML文件中标记
local: &local image: xxx # *tons of config* ci: <<: *local image: # delete build: .
我希望ci继承本地的所有值,除了图像.
有没有办法“删除”这个值?
没有办法在YAML文件中标记要删除的密钥.你只能 overwrite existing values.后者就是你所做的,你将空标量作为值与关键图像相关联,就像你写的一样:
image: null # delete
您可以执行以下两项操作:在YAML文件中进行后处理或制作基本映射.
如果要进行后处理,则将特殊唯一值与图像或特殊标记对象相关联,并在加载后递归遍历树以删除具有此特殊值的键值对.您是否可以在解析期间使用挂钩或覆盖其某些方法来执行此操作,这取决于解析器.
使用基本映射需要较少的工作,但对YAML文件更具侵入性:
localbase: &lb # *tons of config* local: &local image: xxx ci: <<: *lb build: .
如果你做前者,你应该注意,如果你使用一个解析器来保持往返的“合并层次结构”(就像我的ruamel.yaml解析器可以做的那样),删除键值对是不够的,案件来自当地的原件会回来.其他只在加载时解决此问题的解析器没有此问题.