如何解决Ytt:你什么时候需要按名字匹配?
我最近意识到要让 YTT 替换正常工作,我必须添加以下内容:
#@overlay/match by="name"
像这样:
spec:
template:
spec:
containers:
#@overlay/match by="name"
- name: PHP-redis
#@overlay/match missing_ok=False
resources:
requests:
cpu: 200m
我只是想知道,具体是为什么?从逻辑上看,ytt 似乎将新字段覆盖在旧字段之上,因此,难道它不能暗示我们正在按名称匹配地图,因为这是覆盖节中的顶部字段吗?>
解决方法
从询问 slack 来看,列表似乎需要一个元素来匹配,所以我们指定了 name
。
作为思考幕后发生的事情的一种方式,我们可以将其视为等效的 Yaml 片段:
#@ load("@ytt:overlay","overlay")
#@overlay/match by=overlay.subset({"metadata":{"name":"frontend-dep"}})
---
#@overlay/match by="spec"
spec:
#@overlay/match by="template"
template:
#@overlay/match by="spec"
spec:
#@overlay/match by="containers"
containers:
#@overlay/match by="name"
- name: php-redis
#@overlay/match missing_ok=False
resources:
requests:
cpu: 200m
也就是说,我们 yaml 的“map”元素自然是可映射的,因为它们的开头有一个 key
。但是,由于 containers
字段中的“地图列表”包含多个具有许多键的地图,因此我们需要提示 ytt
需要匹配列表中的哪个特定字段。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。