解析来自 k8s 的 yaml 配置映射数据

我使用以下代码获取 k8s 配置映射数据。


这个代码正在工作,但是我不确定关于unmarshal,它是否有点冗长,是否有一种强大的方法来实现这一点?


cm, e := c.Kubernetes.CoreV1().ConfigMaps(“ns1”).Get(“vs-manifest”, metav1.GetOptions{})

if e != nil {

    return errors.New(“error “occurred”)


}


//here I want to get the data

var cmData map[string]string

e = yaml.Unmarshal([]byte(cm.Data["cm1.yaml"]), &cmData)

if err != nil{

  return errors.New(“error “occurred”)

}


//here i need to read rzr field

appVersion := strings.ReplaceAll(cmData[“rzr”], ".", "-")

这是配置映射vs-manifest


apiVersion: v1

kind: ConfigMap

metadata:

  name: vs-manifest

  namespace: ns1

data:

  cm1.yaml: |

    version: 1.5

    repo: milestones

    rzr: 1.0005.044


四季花海
浏览 145回答 1
1回答

SMILET

一些修改建议:// Once you have the configMap, check whether cm1.yaml file exist or not?var cmFile string if value, ok:= cm.Data["cm1.yaml"]; ok {  cmFile = value}// while unmarshal-ing yaml files, use map[string]interface// otherwise error may occur.// Case://| a://|   b: value//|   c: //|     d: value2cmData := make(map[string]interface{})err := yaml.Unmarshal([]byte(cmFile), cmData)if err != nil {  return errors.New("error occurred")}var apiVersion string// Check whether the "rzr" exist or notif value, ok := cmData["rzr"]; ok {  // convert the value from interface to string  // using type assertion.  stringValue, valid := value.(string)  // if successfully converted to string  if valid {    apiVersion = strings.ReplaceAll(stringValue, ".", "-")  } else {    return errors.New("failed to convert")  }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go