当前位置: > > > > 用“/”字符修补 kubernetes 标签
用“/”字符修补 kubernetes 标签
来源:stackoverflow
2024-04-29 15:00:33
0浏览
收藏
你在学习Golang相关的知识吗?本文《用“/”字符修补 kubernetes 标签》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!
问题内容
我有以下代码,运行良好。它在 kubernetes 对象中添加了标签 example: yes:
package main
import (
"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",
}}
我收到错误:“由于我们的请求中存在错误,服务器拒绝了我们的请求”。
我知道另一种方法是使用 update 而不是 patch。但是使用 patch 有没有解决这个问题的方法?
解决方案
根据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]
终于介绍完啦!小伙伴们,这篇关于《用“/”字符修补 kubernetes 标签》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~米云公众号也会发布Golang相关知识,快来关注吧!
