使用 go 客户端修补 pvc

我正在尝试使用此界面中的go库的补丁选项更新pvc标签。


有没有关于如何使用它的例子?另外如果标签没有,补丁也会加上标签吗?


我希望在下面的对象中更新/添加my_label:


kind: PersistentVolumeClaim

metadata:

  annotations:

    pv.kubernetes.io/bind-completed: "yes"

    pv.kubernetes.io/bound-by-controller: "yes"

    volume.beta.kubernetes.io/storage-class: ""

  creationTimestamp: "2021-01-25T18:53:02Z"

  finalizers:

  - kubernetes.io/pvc-protection

  labels:

      my_label: my_value


呼如林
浏览 225回答 2
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补丁标准的信息。

绝地无双

这是一个示例,我们将在其中循环访问默认命名空间中的持久卷声明列表,并且我们将为所有这些项目设置一个特定的标签。您可以获得特定的PVC,而不是使用func列出所有my_label: label_testGet(ctx context.Context, name string, opts metav1.GetOptions)package mainimport (    "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 = labelif _, ok := vol.ObjectMeta.Labels["my_label"]; ok {    vol.ObjectMeta.Labels["my_label"] = "my_new_label"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go