为了账号安全,请及时绑定邮箱和手机立即绑定

用“/”字符修补 kubernetes 标签

用“/”字符修补 kubernetes 标签

Go
SMILET 2022-08-01 18:39:01
我有以下代码工作正常。它将标签添加到 kubernetes 对象中:example: yespackage mainimport (    "fmt"    "encoding/json"    "k8s.io/apimachinery/pkg/types"    eksauth "github.com/chankh/eksutil/pkg/auth"    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1")type patchStringValue struct {    Op    string `json:"op"`    Path  string `json:"path"`    Value string `json:"value"`}func main() {    var updateErr error    cfg := &eksauth.ClusterConfig{ClusterName: "my cluster name"}    clientset, _ := eksauth.NewAuthClient(cfg)    api := clientset.CoreV1()    // Get all pods from all namespaces without the "sent_alert_emailed" label.    pods, _ := api.Pods("").List(metav1.ListOptions{})    for i, pod := range pods.Items {        payload := []patchStringValue{{            Op:    "replace",            Path:  "/metadata/labels/example",            Value: "yes",        }}        payloadBytes, _ := json.Marshal(payload)        _, updateErr = api.Pods(pod.GetNamespace()).Patch(pod.GetName(), types.JSONPatchType, payloadBytes)        if updateErr == nil {            fmt.Println(fmt.Sprintf("Pod %s labelled successfully.", pod.GetName()))        } else {            fmt.Println(updateErr)        }    }}问题是我需要添加标签,其中包含字符,我认为这是我问题的根源。使用有效负载执行前面的代码时:example/test/        payload := []patchStringValue{{            Op:    "replace",            Path:  "/metadata/labels/test/example",            Value: "yes",        }}我收到错误:。"the server rejected our request due to an error in our request"我知道另一种方法是使用而不是.但是,使用这个问题有什么解决方案吗?UpdatePatchPatch
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

根据 JSON 补丁使用的 JSON 指针表示法规范,您需要使用 来编码 。因此,您的有效负载将如下所示:~1/


        payload := []patchStringValue{{

            Op:    "replace",

            Path:  "/metadata/labels/test~1example",

            Value: "yes",

        }}

# kubectl patch deploy mydeployment --type='json' -p='[{"op": "replace", "path": "/metadata/labels/example~1test", "value":"yes"}]'

deployment.apps/mydeployment patched



# kubectl get deploy mydeployment -o=jsonpath='{@.metadata.labels}'

map[example/test:yes]


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信