gue*_*tli 10 jsonpath jq kubernetes yq
echo "apiVersion: v1\nkind: Node\nmetadata:\n name: host-cluster-control-plane-64j47\n labels:\n beta.kubernetes.io/arch: amd64\n" | yq -o p\nRun Code Online (Sandbox Code Playgroud)\n结果:
\napiVersion = v1\nkind = Node\nmetadata.name = host-cluster-control-plane-64j47\nmetadata.labels.beta.kubernetes.io/arch = amd64\nRun Code Online (Sandbox Code Playgroud)\n这几乎就是我想要的。我正在寻找获得价值的钥匙。
\n我可以metadata.name这样使用:
echo "apiVersion: v1\nkind: Node\nmetadata:\n name: host-cluster-control-plane-64j47\n labels:\n beta.kubernetes.io/arch: amd64\n" | yq '.metadata.name'\nRun Code Online (Sandbox Code Playgroud)\n但如果需要,-o p选项yq不会引用该键。
我不能使用metadata.labels.beta.kubernetes.io/archas 键,因为正确的语法是metadata.labels["beta.kubernetes.io/arch"].
yq是否有一种自动方法来获取 yaml 文件的密钥,以便我可以在(或)中使用密钥jq?
所需的输出将是这样的:
\napiVersion = v1\nkind = Node\nmetadata.name = host-cluster-control-plane-64j47\nmetadata.labels["beta.kubernetes.io/arch"] = amd64\nRun Code Online (Sandbox Code Playgroud)\n我正在寻找有效的密钥,因为我想创建第二个命令行来选择这些值。
\n例如:
\n\xe2\x9d\xaf k get nodes -o yaml | yq '.items[].metadata.labels["beta.kubernetes.io/arch"]'\n\namd64\namd64\namd64\nRun Code Online (Sandbox Code Playgroud)\n
您可以通过执行以下操作来接近:
yq '(.. | key | select(test("\."))) |= ("[\"" + . + "\"]")' file.yaml -op
apiVersion = v1
kind = Node
metadata.name = host-cluster-control-plane-64j47
metadata.labels.["beta.kubernetes.io/arch"] = amd64
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
yq '(.. | key | select(test("\."))) |= sub("\.", "\.")' file.yaml -op
apiVersion = v1
kind = Node
metadata.name = host-cluster-control-plane-64j47
metadata.labels.beta\\.kubernetes\\.io/arch = amd64
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 我不确定它应该如何在属性文件中转义,我愿意更新 yq 以在本机上执行此操作,有人在 github 上提出了一个包含详细信息的错误...
免责声明:我写的是yq
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |