【问题标题】:Get and modify yaml file from OpenShift API of the persisten volume in golang从 golang 中持久卷的 OpenShift API 获取和修改 yaml 文件
【发布时间】:2019-08-08 21:47:21
【问题描述】:

我正在尝试通过Go(lang)中的API修改OpenShift中persistent volume的yaml文件,我有以下内容

    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 volumeyaml

apiVersion: v1
kind: PersistentVolume
metadata:
...
...
...
persistentVolumeReclaimPolicy: Retain
status:
  phase: Released

如何获取yaml 文件并根据我的实际pvStatus 对其进行修改? 我想把persistentVolumeReclaimPolicy: Retain改成persistentVolumeReclaimPolicy: Delete

【问题讨论】:

    标签: api go kubernetes openshift


    【解决方案1】:

    基本上我的错误是构造 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      相关资源
      最近更新 更多