如何解决yq:如何读取同级元素的值?
我正在探索yq来修改YAML,我想在其中使用Payload
在ImageStream的spec
下添加新元素
name == openshift45
以下命令返回有效的apiVersion: v1
items:
- apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: openshift45
app.kubernetes.io/component: openshift45
app.kubernetes.io/instance: openshift45
name: nodejs-10
spec:
lookupPolicy:
local: false
tags:
- annotations:
openshift.io/imported-from: registry.access.redhat.com/ubi8/nodejs-10
from:
kind: DockerImage
name: registry.access.redhat.com/ubi8/nodejs-10
generation: null
importPolicy: {}
name: latest
referencePolicy:
type: ""
status:
dockerImageRepository: ""
- apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: openshift45
app.kubernetes.io/component: openshift45
app.kubernetes.io/instance: openshift45
name: openshift45
spec:
lookupPolicy:
local: false
status:
dockerImageRepository: ""
元素。现在,我想移到父级,然后选择metadata
。 spec
-https://github.com/mikefarah/yq有可能吗?
yq
返回
yq r openshift45.yaml --printMode pv "items(kind==ImageStream).(name==openshift45)"
预期输出:
items.[1].metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: openshift45
app.kubernetes.io/component: openshift45
app.kubernetes.io/instance: openshift45
name: openshift45
解决方法
Path Expressions in mikefarah/yq的文档并不十分完整,无法显示如何使用多个条件到达所需对象的真实示例。因此,对于有问题的YAML,使用一种独特的条件,您可以执行以下操作。在if num % 3 == 0:
...
elif num % 5 == 0:
if num % 3:
# CozaLoza
else:
# Loza
yq version 3.3.2
您可以使用yq w openshift45.yaml 'items.(metadata.name == openshift45).spec.dockerImageRepository' '<$MYREGISTRY>/<$MYNAMESPACE>/<$MYPROJECT>'
标志和write一起就地修改YAML。参见Updating files in-place
如果这不是期望的,并且您需要多个条件选择才能到达所需的对象,建议在GitHub页面上提出问题-https://github.com/mikefarah/yq/issues,要求相同的正确语法。
,当前在yq中是不可能的。您将必须在变量中获取第一个命令的输出,并将该变量传递给下一个。
yq是jq的包装,但没有自定义功能。使用自定义函数可以在一个位置使用文档任何层次结构中的任何值。
感谢Inian指出OP没有使用包装器yq版本。不幸的是,所使用的版本目前也不允许使用自定义功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。