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

从 Kubernetes 类型生成 YAML 清单

从 Kubernetes 类型生成 YAML 清单

Go
MM们 2021-12-07 16:11:30
一种解决方案是使plus1函数成为一个直接作用于 值的闭包codec:// first create a codec instancec := codec {a, 0}// now define the function as a closure with a reference to cfns := template.FuncMap{  "plus1": func() int {      c.Count++      return c.Count   },}// now we don't need to pass anything to it in the templatet := template.Must(template.New("abc").Funcs(fns).Parse(`{{$l := len .Names}}{{range $k, $v := .Names}}{{if ne (plus1) $l}}{{$k}} {{$v}} {{end}}{{end}}.`))输出是:one 1 three 3我猜这就是你的目标?并且该值在c执行结束时保留。
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

他们的 API 已经更新,所以它是这样的:


import k8sJson "k8s.io/apimachinery/pkg/runtime/serializer/json"

...

serializer := k8sJson.NewSerializerWithOptions(

    k8sJson.DefaultMetaFactory, nil, nil,

    k8sJson.SerializerOptions{

        Yaml:   true,

        Pretty: true,

        Strict: true,

    },

)


查看完整回答
反对 回复 2021-12-07
?
慕斯709654

TA贡献1840条经验 获得超5个赞

找到它,以供将来参考,以下是您可能想要执行的操作:


package main


import (

    "os"


    "k8s.io/kubernetes/pkg/api/unversioned"

    "k8s.io/kubernetes/pkg/api/v1"

    "k8s.io/kubernetes/pkg/runtime/serializer/json"

)


func main() {

    ns := &v1.Namespace{

        TypeMeta: unversioned.TypeMeta{

            Kind:       "Namespace",

            APIVersion: "v1",

        },


        ObjectMeta: v1.ObjectMeta{

            Name: "test",

        },

    }


    e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil)


    err := e.EncodeToStream(ns, os.Stdout)

    if err != nil {

        panic(err)

    }

}

这可能不是最佳实践(欢迎提出更好的建议),但它确实可以。


查看完整回答
反对 回复 2021-12-07
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

package main


import (

    "os"


    v1 "k8s.io/api/core/v1"

    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

    "k8s.io/apimachinery/pkg/runtime/serializer/json"

)


func main() {

    ns := &v1.Namespace{

        TypeMeta: metav1.TypeMeta{

            Kind:       "Namespace",

            APIVersion: "v1",

        },


        ObjectMeta: metav1.ObjectMeta{

            Name: "test",

        },

    }


    e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil)


    //err := e.EncodeToStream(ns, os.Stdout)

    err := e.Encode(ns, os.Stdout)

    if err != nil {

        panic(err)

    }

}


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

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