在jsonpath中为oc修补程序包含变量(openshift CLI操作)

在jsonpath中为oc修补程序包含变量(openshift CLI操作),openshift,jsonpath,Openshift,Jsonpath,在bash中,我试图在jsonpath中为openshiftpatchcli命令使用一个变量: 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 '^(

在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]*)$'
 Error from server (BadRequest): invalid character '\'' looking for beginning of object key string 
表示变量未被替换/展开

如果我明确地写出来,它就会起作用:

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: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'
 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\"}}}"

在单引号中,bash保留了所有内容,您必须使用双引号进行字符串插值(并使用转义序列\”进行其他双引号)

试试这个:

oc patch quota "my-object" -p "{\"spec\":{\"hard\":{\"$OS_OBJECT\":\"$VALUE\"}}}"

而不是
OC补丁
希望在模板上应用
OC
模板是配置Openshift/Kubernetes对象的最佳方式,这些对象可以存储在git中,以便版本控制以代码形式遵循基础架构

$ 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
我不是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
配置配额。这将创建在模板中配置的资源,在我们的示例中是its
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
当您使用
补丁
查找资源配额中的更新时,我建议在此编辑模板并再次执行
以更新对象

$ 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-patch
而是
oc-patch在模板上更喜欢
oc-apply
模板是配置Openshift/Kubernetes对象的最佳方式,这些对象可以存储在git中,以便版本控制以代码形式遵循基础架构

$ 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
我不是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
配置配额。这将创建在模板中配置的资源,在我们的示例中是its
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
当您使用
补丁
查找资源配额中的更新时,我建议在此编辑模板并再次执行
以更新对象

$ 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
的用户友好程度不高,无法配置

,这会导致:服务器错误(BADREST):查找对象密钥字符串开头的无效字符“\”,该字符串给出:服务器错误(BADREST):无效字符“\”正在查找对象密钥字符串的开头是的,我也在使用版本化模板进行参数化部署、配置映射、机密等。但有时我只需要bash中的几行代码来修补现有资源中的一行或两行代码。从bash执行这些更改时,如何跟踪这些更改?在需要时,如何跨环境应用it?其他人如何知道所应用的更改?我试图解释跟踪并不总是我所处的工作流程。有时我只需要在活动对象上更新和测试不同的配置,以便进行实验。在这种情况下,修补程序是完美的。即使如此,在这种情况下,几天后您也不会有旧版本模板的备份,以防万一回滚/恢复时出错。是的,我也在使用版本化模板进行参数化部署、配置映射、机密等。但有时我只需要在bash中使用几行代码来修补现有资源中的一两行代码。在bash中如何跟踪这些更改?在需要时,如何跨环境应用it?其他人如何知道所应用的更改?我试图解释跟踪并不总是我所处的工作流程。有时我只需要在活动对象上更新和测试不同的配置,以便进行实验。在这种情况下,修补程序是完美的。即使如此,在这种情况下,您也不会在几天后备份较旧版本的模板,以防回滚/还原时出错。
$ 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