我有一个kubernetes ingress清单YAML,看起来像下一个:
apiVersion:extensions / v1beta1善良:Ingress元数据: 注释: certmanager.k8s.io/acme-http01-edit-in-place:“true” …
[以下内容已经过修订,以反映该问题的更新。]
假设CI_COMMIT_REF_NAME可用作$ CI_COMMIT_REF_NAME的jq,这可以使用命令行参数使用jq来完成:
--arg CI_COMMIT_REF_NAME "$CI_COMMIT_REF_NAME"
一个合适的jq过滤器将沿着以下几行:
.spec.rules[0].http.paths |= (map(select(.path | index($CI_COMMIT_REF_NAME) | not)) as $new | if ($new | length) == length then . + [{ "backend": { "serviceName": $CI_COMMIT_REF_NAME, "servicePort": 80}, "path": ($CI_COMMIT_REF_NAME + "/*") }] else $new end )
您可以使用以下jq调用来测试它:
jq --arg CI_COMMIT_REF_NAME task-4444 -f program.jq input.json
当然在哪里 input.json 是YAML的JSON版本。
input.json
(我会用 index 优先于 contains 如果可能的话。)
index
contains