给定YAML中的列表,我希望动态地替换源的所有值。values基于输入变量的输入列表:
replace_list=argocd,argocd-项目
replace_to_value=v1.0.0
yq版4.2.x+
投入YAML:
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
预期产出:
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
给我:
发布于 2022-06-29 04:31:05
你可以这样做:
yq '( .server.additionalApplications[] |
select(.name == ("argocd", "argocd-projects")) |
.source.targetRevision )
|= "v1.0.0"' examples/data1.yaml
说明:您希望更新additionalApplication条目的选择。
首先导航到这些条目并展开它们,.server.additionalApplications[]
select(.name == ("argocd", "argocd-projects")
.source.targetRevision
属性。重要的是,请注意整个LHS表达式都在括号中,因为这就是我们要传递给‘|=’运算符的内容。如果您不把它放在括号中,那么您将看到它似乎放弃了其他一切(因为它首先过滤,然后更新separately).)。
希望这是合理的!
免责声明:我写了yq。
https://stackoverflow.com/questions/72787350
复制相似问题