下面是我的部署输入
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"io.kompose.service": "item-api"
}
},
"strategy": {
"type": "Recreate"
},
"template": {
"spec": {
"containers": [
{
"env": [
{
"name": "APP_JWTSECRET",
"valueFrom": {
"configMapKeyRef": {
"key": "APP_JWTSECRET",
"name": "item-api-env"
}
}
},
{
"name": "SPRING_DATASOURCE_BASEXML_JDBCURL",
"valueFrom": {
"configMapKeyRef": {
"key": "SPRING_DATASOURCE_BASEXML_JDBCURL",
"name": "item-api-env"
}
}
}
...
字符串
对于env
中的每个项目,如果名称包含(SECRET),我想将configMapKeyRef
转换为secretKeyRef
|密码|KEY)模式,然后将secretKeyRef名称替换为小写的键名。
例如:
"name": "APP_JWTSECRET",
"valueFrom": {
"configMapKeyRef": {
"key": "APP_JWTSECRET",
"name": "item-api-env"
}
}
}
型
将转变为
"name": "APP_JWTSECRET",
"valueFrom": {
"secretKeyRef": {
"key": "APP_JWTSECRET",
"name": "app-jwtsecret"
}
}
}
型
我尝试了一些操作with_entries
没有任何成功:
jq -r '.spec.template.spec.containers[].env[]|with_entries(.key |test(PASSWORD|SECRET))'
型
3条答案
按热度按时间pxyaymoc1#
.spec.template.spec.containers[].env[]?
select(.name | test("SECRET|PASSWORD|KEY"))
(…).valueFrom
.key
和.value
来更新它:|= with_entries(…)
select(.key == "configMapKeyRef") |= …
{key: "secretKeyRef", value: …}
.value | .name = (.key | ascii_downcase)
分配了一个关键字个字符
Demo
注:我认为从
app_jwtsecret
到app-jwtsecret
的更改是一个错字。d6kp6zgx2#
这里有一种方法,
containers
和env
数组被重写为所需的修改,或者如果不满足条件则保持 “原样”。字符串
在jqplay.org上试试。
ecbunoof3#
使用
jq
的一种方法是下面这样做。字符串
jqplay演示-https://jqplay.org/s/UfYQYpJIa6o