从Golang中持久卷的OpenShift API获取和修改yaml文件

时间:2019-03-18 13:45:41

标签: api go kubernetes openshift

我试图通过yaml中的API修改persistent volumeOpenShift的{​​{1}}的{​​{1}}文件,我有以下内容

Go(lang)

我的 pv, err := clientset.CoreV1().PersistentVolumes().List(metav1.ListOptions{}) for _, persV := range pv.Items { // Check status persistent volume pvStatus, err := clientset.CoreV1().PersistentVolumes().Get(persV.Name, metav1.GetOptions{}) if err != nil { panic(err.Error()) } patch := []byte(`{"spec":{"template":{"spec":{"containers":[{"persistentVolumeReclaimPolicy":"Retain"}]}}}}`) a := fmt.Sprintf("%s", patch) fmt.Println(a) _, err = clientset.CoreV1().PersistentVolumes().Patch(persV.Name, types.StrategicMergePatchType, patch) } persistent volume

yaml

如何获取apiVersion: v1 kind: PersistentVolume metadata: ... ... ... persistentVolumeReclaimPolicy: Retain status: phase: Released 文件并从实际的yaml对其进行修改? 我想将pvStatus更改为persistentVolumeReclaimPolicy: Retain

1 个答案:

答案 0 :(得分:2)

基本上我的错误是构建patch []byte值,脚本应如下所示

 pv, err := clientset.CoreV1().PersistentVolumes().List(metav1.ListOptions{})


    for _, persV := range pv.Items {
        // Check status persistent volume
        pvStatus, err := clientset.CoreV1().PersistentVolumes().Get(persV.Name, metav1.GetOptions{})
        if err != nil {
            panic(err.Error())
        }

        patch := []byte(`{"spec": {"persistentVolumeReclaimPolicy": "Delete"}}`)
        _, err = clientset.CoreV1().PersistentVolumes().Patch(persV.Name, types.StrategicMergePatchType, patch)