微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ytt:你什么时候需要按名字匹配?

如何解决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 举报,一经查实,本站将立刻删除。