将参数与 oc 补丁命令一起使用

时间:2021-04-15 13:56:01

标签: bash openshift kubectl json-patch

尝试用几个oc补丁命令写一个sh脚本,需要参数化几个值。 现在脚本看起来像:

oc patch svc svc-ingressgateway --type='json' -p='[{"op": "add", "path": "/spec/ports/-", "value": {"name": "http-8080","port": 8080} }]'
oc patch vs vs-ingressgateway --type='json' -p='[{"op": "add", "path": "/spec/hosts/-", "value": "ingress-http-host.smth.com" }]'
oc patch gw gw-ingressgateway --type='json' -p='[{"op": "add", "path": "/spec/servers/-", "value": { "hosts": ["ingress-http-host.smth.com"], "port": {"name":"http-8080", "number":8080,"protocol":"HTTP"} } }]'

尝试这样做:

HTTP_HOST='ingress-http-host.smth.com'
HTTP_PORT='8080'
oc patch svc svc-ingressgateway --type='json' -p='[{"op": "add", "path": "/spec/ports/-", "value": {"name": "http-${HTTP_PORT}","port": ${HTTP_PORT}} }]'
oc patch vs vs-ingressgateway --type='json' -p='[{"op": "add", "path": "/spec/hosts/-", "value": ${HTTP_HOST} }]'
oc patch gw gw-ingressgateway --type='json' -p='[{"op": "add", "path": "/spec/servers/-", "value": { "hosts": [${HTTP_HOST}], "port": {"name":"http-${HTTP_PORT}", "number":${HTTP_PORT},"protocol":"HTTP"} } }]'

但这显然是错误的,因为错误出现了:

Error from server: admission webhook "pilot.validation.istio.io" denied the request: configuration is invalid: domain name "$HTTP_HOST" invalid (label "$HTTP_HOST" invalid) Error from server: admission webhook "pilot.validation.istio.io" denied the request: configuration is invalid: 2 errors occurred: * short names (non FQDN) are not allowed * domain name "$HTTP_HOST" invalid (label "$HTTP_HOST" invalid)

请帮忙,如果你知道如何做这样的事情

1 个答案:

答案 0 :(得分:1)

出现错误是因为 ${HTTP_PORT}${HTTP_HOST}shell parameter expansion 没有在单引号内完成。解决这个问题的一种方法是在参数扩展之前结束引用并在参数扩展之后开始一个新引用。此外,在这种情况下不需要大括号。因此,您可以有效地将 ${HTTP_....} 替换为 '$HTTP_....'