kubernetes 改变json对jq的值

lyfkaqu1  于 4个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(64)

这里是我的json输入

{
  "apiVersion": "v1",
  "data": {
    "POSTGRES_PASSWORD": "cXVhbGltYXJiJi0xZDYK"
  },
  "kind": "Secret",
  "metadata": {
    "creationTimestamp": null,
    "labels": {
      "io.kompose.service": "POSTGRES_PASSWORD"
    },
    "name": "postgres-password"
  },
  "type": "Opaque"
}

字符串
我希望输出相同的json文件,但在将POSTGRES_PASSWORD更改为cXVhbGltYXJiJi0xZDY=之后(仅将最后一个字符“K”更改为=)。

jq -r '.data|with_entries(.value == "cXVhbGltYXJiJi0xZDY=")


这是一个k8s secret,secret可以是POSTGRES_PASSWORD以外的任何值,所以我想创建一个全局jq规则,可以将base64密码的最后一个字符替换为=。输出应该是

{
  "apiVersion": "v1",
  "data": {
    "ANY_PASSWORD": "any_password_base64="
  },
  "kind": "Secret",
  "metadata": {
    "creationTimestamp": null,
    "labels": {
      "io.kompose.service": "ANY_PASSWORD"
    },
    "name": "any-password"
  },
  "type": "Opaque"
}

vdzxcuhz

vdzxcuhz1#

您可以使用以下jq命令来实现这一点:

jq '.data |= with_entries(.value |= sub("K$"; "=")) | .metadata.labels."io.kompose.service" |= sub("POSTGRES_PASSWORD"; "ANY_PASSWORD") | .metadata.name |= sub("postgres-password"; "any-password")' input.json

字符串
此命令执行以下操作:
1.使用with_entries覆盖.data对象中的每个键值对。
1.执行sub函数,将值末尾的“K”替换为“=”。
1.使用sub.metadata.labels."io.kompose.service"中的“POSTGRES_PASSWORD”标签替换为“ANY_PASSWORD”。
1.使用sub.metadata.name中的“postgres-password”名称替换为“any-password”。
这将为您提供所需的输出给予。

相关问题