在 oc 补丁的 jsonpath 中包含变量(openshift CLI 操作)
Include variable in jsonpath for oc patch (openshift CLI operations)
在 bash 中,我正在尝试将 jsonpath 中的变量用于 openshift patch
cli 命令:
OS_OBJECT='sample.k8s.io/element'
VALUE='5'
oc patch quota "my-object" -p '{"spec":{"hard":{"$OS_OBJECT":"$VALUE"}}}'
但这给出了错误:
Error from server: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'
表示变量不是substituted/expanded.
如果我明确地写它,它就可以工作:
oc patch quota "my-object" -p '{"spec":{"hard":{"sample.k8s.io/element":"5"}}}'
关于如何在 jsonstring 中包含变量有什么建议吗?
编辑: 基于以下答案我也尝试过:
oc patch quota "my-object" -p "{'spec':{'hard':{'$OS_OBJECT':'$VALUE'}}}"
但这给出了错误:
Error from server (BadRequest): invalid character '\'' looking for beginning of object key string
在单引号中,所有内容都由 bash 保留,您必须使用双引号来进行字符串插值(并使用转义序列 \" 来表示其他双引号)。
试试这个:
oc patch quota "my-object" -p "{\"spec\":{\"hard\":{\"$OS_OBJECT\":\"$VALUE\"}}}"
而不是 OC patch
更喜欢 OC apply
在你的模板上. 模板是配置 Openshift/Kubernetes 对象 的最佳方式,它可以存储在 git 中,以便版本控制遵循基础架构即代码.
我不是我的 Openshift 集群的管理员,所以无法访问资源配额因此建议在 Kubernetes 中使用一种方法,但同样可以应用于Openshift 也是 ,除了 CLI 从 kubectl
更改为 oc
我们来看一个简单的资源配额模板:
$ cat resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: demo-quota
spec:
hard:
cpu: "1"
memory: 2Gi
pods: "10"
scopeSelector:
matchExpressions:
- operator : In
scopeName: PriorityClass
values: ["high"]
现在使用模板 kubectl apply
配置配额。这将创建在模板中配置的资源,在我们的例子中是 resourcequota
$ kubectl apply -f resourcequota.yaml
resourcequota/demo-quota created
$ kubectl get quota
NAME CREATED AT
demo-quota 2019-11-19T12:23:37Z
$ kubectl describe quota demo-quota
Name: demo-quota
Namespace: default
Resource Used Hard
-------- ---- ----
cpu 0 1
memory 0 2Gi
pods 0 10
当您使用patch
寻找资源配额更新时,我建议在这里编辑模板并执行 kubectl apply
再次更新对象。
$ kubectl apply -f resourcequota.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
resourcequota/demo-quota configured
$ kubectl describe quota demo-quota
Name: demo-quota
Namespace: default
Resource Used Hard
-------- ---- ----
cpu 0 2
memory 0 4Gi
pods 0 20
同样,您可以执行 oc apply
您的操作,因为 oc patch
是配置不那么人性化.
在 bash 中,我正在尝试将 jsonpath 中的变量用于 openshift patch
cli 命令:
OS_OBJECT='sample.k8s.io/element'
VALUE='5'
oc patch quota "my-object" -p '{"spec":{"hard":{"$OS_OBJECT":"$VALUE"}}}'
但这给出了错误:
Error from server: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'
表示变量不是substituted/expanded.
如果我明确地写它,它就可以工作:
oc patch quota "my-object" -p '{"spec":{"hard":{"sample.k8s.io/element":"5"}}}'
关于如何在 jsonstring 中包含变量有什么建议吗?
编辑: 基于以下答案我也尝试过:
oc patch quota "my-object" -p "{'spec':{'hard':{'$OS_OBJECT':'$VALUE'}}}"
但这给出了错误:
Error from server (BadRequest): invalid character '\'' looking for beginning of object key string
在单引号中,所有内容都由 bash 保留,您必须使用双引号来进行字符串插值(并使用转义序列 \" 来表示其他双引号)。
试试这个:
oc patch quota "my-object" -p "{\"spec\":{\"hard\":{\"$OS_OBJECT\":\"$VALUE\"}}}"
而不是 OC patch
更喜欢 OC apply
在你的模板上. 模板是配置 Openshift/Kubernetes 对象 的最佳方式,它可以存储在 git 中,以便版本控制遵循基础架构即代码.
我不是我的 Openshift 集群的管理员,所以无法访问资源配额因此建议在 Kubernetes 中使用一种方法,但同样可以应用于Openshift 也是 ,除了 CLI 从 kubectl
更改为 oc
我们来看一个简单的资源配额模板:
$ cat resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: demo-quota
spec:
hard:
cpu: "1"
memory: 2Gi
pods: "10"
scopeSelector:
matchExpressions:
- operator : In
scopeName: PriorityClass
values: ["high"]
现在使用模板 kubectl apply
配置配额。这将创建在模板中配置的资源,在我们的例子中是 resourcequota
$ kubectl apply -f resourcequota.yaml
resourcequota/demo-quota created
$ kubectl get quota
NAME CREATED AT
demo-quota 2019-11-19T12:23:37Z
$ kubectl describe quota demo-quota
Name: demo-quota
Namespace: default
Resource Used Hard
-------- ---- ----
cpu 0 1
memory 0 2Gi
pods 0 10
当您使用patch
寻找资源配额更新时,我建议在这里编辑模板并执行 kubectl apply
再次更新对象。
$ kubectl apply -f resourcequota.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
resourcequota/demo-quota configured
$ kubectl describe quota demo-quota
Name: demo-quota
Namespace: default
Resource Used Hard
-------- ---- ----
cpu 0 2
memory 0 4Gi
pods 0 20
同样,您可以执行 oc apply
您的操作,因为 oc patch
是配置不那么人性化.