kubernetes 改变json对jq的值

lyfkaqu1  于 2024-01-07  发布在  Kubernetes
关注(0)|答案(1)|浏览(226)

这里是我的json输入

  1. {
  2. "apiVersion": "v1",
  3. "data": {
  4. "POSTGRES_PASSWORD": "cXVhbGltYXJiJi0xZDYK"
  5. },
  6. "kind": "Secret",
  7. "metadata": {
  8. "creationTimestamp": null,
  9. "labels": {
  10. "io.kompose.service": "POSTGRES_PASSWORD"
  11. },
  12. "name": "postgres-password"
  13. },
  14. "type": "Opaque"
  15. }

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

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


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

  1. {
  2. "apiVersion": "v1",
  3. "data": {
  4. "ANY_PASSWORD": "any_password_base64="
  5. },
  6. "kind": "Secret",
  7. "metadata": {
  8. "creationTimestamp": null,
  9. "labels": {
  10. "io.kompose.service": "ANY_PASSWORD"
  11. },
  12. "name": "any-password"
  13. },
  14. "type": "Opaque"
  15. }

vdzxcuhz

vdzxcuhz1#

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

  1. 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”。
这将为您提供所需的输出给予。

相关问题