首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >YQ -基于值列表替换列表子字段的值

YQ -基于值列表替换列表子字段的值
EN

Stack Overflow用户
提问于 2022-06-28 13:30:57
回答 1查看 101关注 0票数 0

给定YAML中的列表,我希望动态地替换源的所有值。values基于输入变量的输入列表:

replace_list=argocd,argocd-项目

replace_to_value=v1.0.0

yq版4.2.x+

投入YAML:

代码语言:javascript
运行
复制
server:
  additionalApplications:
    - name: argocd
      path: argocd/argocd-install
      source:
        targetRevision: feature/3-dns
    - name: argocd-projects
      source:
        path: argocd/argocd-projects
        targetRevision: feature/3-dns
      syncPolicy:
        automated:
          selfHeal: true
          prune: true
    - name: argocd-tools-aks-apps
      namespace: argocd
      destination:
        namespace: argocd
        server: https://kubernetes.default.svc
      project: argocd
      source:
        targetRevision: HEAD
      syncPolicy:
        automated:
          selfHeal: true
          prune: true

预期产出:

代码语言:javascript
运行
复制
server:
 additionalApplications:
  - name: argocd
    path: argocd/argocd-install
    source:
      targetRevision: v1.0.0
  - name: argocd-projects
    source:
      path: argocd/argocd-projects
      targetRevision: v1.0.0
    syncPolicy:
      automated:
        selfHeal: true
        prune: true
  - name: argocd-tools-aks-apps
    namespace: argocd
    destination:
      namespace: argocd
      server: https://kubernetes.default.svc
    project: argocd
    source:
      targetRevision: HEAD
    syncPolicy:
      automated:
        selfHeal: true
        prune: true

目前的进展:

yq '.server.additionalApplications.[]区(.source.targetRevision)‘argocd/argocd-install/values override.yaml

给我:

  • feature/3-dns
  • feature/3-dns
  • HEAD
EN

Stack Overflow用户

回答已采纳

发布于 2022-06-29 04:31:05

你可以这样做:

代码语言:javascript
运行
复制
yq '(  .server.additionalApplications[] | 
       select(.name == ("argocd", "argocd-projects")) | 
       .source.targetRevision ) 
   |= "v1.0.0"' examples/data1.yaml

说明:您希望更新additionalApplication条目的选择。

首先导航到这些条目并展开它们,.server.additionalApplications[]

  • Next,,我们用名称:select(.name == ("argocd", "argocd-projects")

  • Now过滤它们,我们可以更新它们的.source.targetRevision属性。重要的是,请注意整个LHS表达式都在括号中,因为这就是我们要传递给‘|=’运算符的内容。如果您不把它放在括号中,那么您将看到它似乎放弃了其他一切(因为它首先过滤,然后更新separately).

)。

希望这是合理的!

免责声明:我写了yq。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72787350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档