为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
四季花海 2022-08-01 15:31:34
我使用以下代码获取 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 datavar cmData map[string]stringe = yaml.Unmarshal([]byte(cm.Data["cm1.yaml"]), &cmData)if err != nil{  return errors.New(“error “occurred”)}//here i need to read rzr fieldappVersion := strings.ReplaceAll(cmData[“rzr”], ".", "-")这是配置映射vs-manifestapiVersion: v1kind: ConfigMapmetadata:  name: vs-manifest  namespace: ns1data:  cm1.yaml: |    version: 1.5    repo: milestones    rzr: 1.0005.044
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

一些修改建议:


// 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: value2


cmData := 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 not

if 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")

  }


}


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信