2 回答

TA貢獻1863條經驗 獲得超2個贊
可以通過以下方式完成:
persVolC := client.CoreV1().PersistentVolumeClaims("default")
data := `
[
{ "op": "add", "path": "/metadata/labels/mylabel", "value": "myvalue" }
]
`
updatedPvc, err := persVolC.Patch(ctx, "name-of-pvc", types.JSONPatchType, []byte(data), meta_v1.PatchOptions{})
if err != nil {
log.Fatal(err)
}
在游樂場的完整示例。
在這里,您可以閱讀有關JSON補丁標準的信息。

TA貢獻1946條經驗 獲得超4個贊
這是一個示例,我們將在其中循環訪問默認命名空間中的持久卷聲明列表,并且我們將為所有這些項目設置一個特定的標簽。您可以獲得特定的PVC,而不是使用func列出所有my_label: label_testGet(ctx context.Context, name string, opts metav1.GetOptions)
package main
import (
"context"
"fmt"
"log"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)
func newClient(contextName string) (kubernetes.Interface, error) {
configOverrides := &clientcmd.ConfigOverrides{CurrentContext: contextName}
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
config, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides).ClientConfig()
if err != nil {
return nil, err
}
return kubernetes.NewForConfig(config)
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
client, err := newClient("")
if err != nil {
log.Fatal(err)
}
label := make(map[string]string)
label["my_label"] = "label_test"
persVolC := client.CoreV1().PersistentVolumeClaims("default")
pvcs, err := persVolC.List(ctx, meta_v1.ListOptions{})
for _, pvc := range pvcs.Items {
vol := pvc.DeepCopy()
vol.ObjectMeta.Labels = label
upd, err := persVolC.Update(ctx, vol, meta_v1.UpdateOptions{})
if err != nil {
log.Fatal(err)
}
fmt.Println(upd)
}
}
如果要檢查標簽是否存在并更新它,則可以替換為vol.ObjectMeta.Labels = label
if _, ok := vol.ObjectMeta.Labels["my_label"]; ok {
vol.ObjectMeta.Labels["my_label"] = "my_new_label"
}
- 2 回答
- 0 關注
- 199 瀏覽
添加回答
舉報