首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >kubernetes客户端- go将yaml转换为go代码

kubernetes客户端- go将yaml转换为go代码
EN

Stack Overflow用户
提问于 2020-06-10 19:42:38
回答 2查看 1.9K关注 0票数 0

有关于在go-client中构建k8s jobs的文档吗?特别是,我试图将一个作业转换成yaml代码,而对于我的生活,我找不到说明字段如何转换的参考文档。

EN

回答 2

Stack Overflow用户

发布于 2020-06-11 05:23:37

k8s.io/api是一个kubectl和其他组件使用它实现Kubernetes API的包。在这个包中,有一个实现Job API的结构,您可以使用它将作业清单转换为go结构。

我认为这个代码可以帮上忙:

代码语言:javascript
运行
复制
package main

import (
    "fmt"
    "io/ioutil"
    "os"

    "gopkg.in/yaml.v2"
    v1 "k8s.io/api/batch/v1"
)

func main() {
    file, err := os.Open("/path/to/job.yaml")
    if err != nil {
        panic(err)
    }

    b, err := ioutil.ReadAll(file)
    if err != nil {
        panic(err)
    }

    job := &v1.Job{}
    err = yaml.Unmarshal(b, job)
    if err != nil {
        panic(err)
    }

    fmt.Println(job)
}
票数 1
EN

Stack Overflow用户

发布于 2021-10-22 01:08:35

将YAML转换为Golang可能很困难,而且常常缺少带有示例的文档。

我编写了一个名为海姆的工具,它能够将任何Kubernetes YAML转换为原始Go。它非常方便,因为它使用您正在运行的Kubernetes版本,并且是用最新版本的Kubernetes代码库编译的。

如果您想要创建一个作业,并看到有效的执行该作业,它将如下所示。使用容器映像beeps创建作业boops

代码语言:javascript
运行
复制
[nova@emma ~]$ kubectl create job beeps --image boops
job.batch/beeps created
[nova@emma ~]$ 

Naml将通过设计出一个工作程序,但您也将得到您正在寻找的输出。

代码语言:javascript
运行
复制
[nova@emma naml]$ kubectl get job beeps -o yaml | naml codify
// Copyright © 2021 Kris Nóva <kris@nivenly.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//   ███╗   ██╗ █████╗ ███╗   ███╗██╗
//   ████╗  ██║██╔══██╗████╗ ████║██║
//   ██╔██╗ ██║███████║██╔████╔██║██║
//   ██║╚██╗██║██╔══██║██║╚██╔╝██║██║
//   ██║ ╚████║██║  ██║██║ ╚═╝ ██║███████╗
//   ╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝
//

package main

import (
        "context"
        "fmt"
        "os"

        "github.com/hexops/valast"
        batchv1 "k8s.io/api/batch/v1"
        corev1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/types"

        "github.com/kris-nova/naml"
        "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/client-go/kubernetes"
)

// Version is the current release of your application.
var Version string = "0.0.1"

func main() {
        // Load the application into the NAML registery
        // Note: naml.Register() can be used multiple times.
        naml.Register(NewApp("App", "Application autogenerated from NAML v0.3.1"))

        // Run the generic naml command line program with
        // the application loaded.
        err := naml.RunCommandLine()
        if err != nil {
                fmt.Println(err.Error())
                os.Exit(1)
        }
}

// App is a very important grown up business application.
type App struct {
        metav1.ObjectMeta
        description string
        objects     []runtime.Object
        // ----------------------------------
        // Add your configuration fields here
        // ----------------------------------
}

// NewApp will create a new instance of App.
//
// See https://github.com/naml-examples for more examples.
//
// This is where you pass in fields to your application (similar to Values.yaml)
// Example: func NewApp(name string, example string, something int) *App
func NewApp(name, description string) *App {
        return &App{
                description: description,
                ObjectMeta: metav1.ObjectMeta{
                        Name:            name,
                        ResourceVersion: Version,
                },
                // ----------------------------------
                // Add your configuration fields here
                // ----------------------------------
        }
}

func (a *App) Install(client *kubernetes.Clientset) error {
        var err error

        beepsJob := &batchv1.Job{
                TypeMeta: metav1.TypeMeta{
                        Kind:       "Job",
                        APIVersion: "batch/batchv1",
                },
                ObjectMeta: metav1.ObjectMeta{
                        Name:            "beeps",
                        Namespace:       "default",
                        UID:             types.UID("650e4f36-3316-4506-bbe0-1e34c13742cf"),
                        ResourceVersion: "3231200",
                        Generation:      1,
                        Labels: map[string]string{
                                "controller-uid": "650e4f36-3316-4506-bbe0-1e34c13742cf",
                                "job-name":       "beeps",
                        },
                },
                Spec: batchv1.JobSpec{
                        Parallelism:  valast.Addr(int32(1)).(*int32),
                        Completions:  valast.Addr(int32(1)).(*int32),
                        BackoffLimit: valast.Addr(int32(6)).(*int32),
                        Selector: &metav1.LabelSelector{MatchLabels: map[string]string{
                                "controller-uid": "650e4f36-3316-4506-bbe0-1e34c13742cf",
                        }},
                        Template: corev1.PodTemplateSpec{
                                ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{
                                        "controller-uid": "650e4f36-3316-4506-bbe0-1e34c13742cf",
                                        "job-name":       "beeps",
                                }},
                                Spec: corev1.PodSpec{
                                        Containers: []corev1.Container{corev1.Container{
                                                Name:                     "beeps",
                                                Image:                    "boops",
                                                TerminationMessagePath:   "/dev/termination-log",
                                                TerminationMessagePolicy: corev1.TerminationMessagePolicy("File"),
                                                ImagePullPolicy:          corev1.PullPolicy("Always"),
                                        }},
                                        RestartPolicy:                 corev1.RestartPolicy("Never"),
                                        TerminationGracePeriodSeconds: valast.Addr(int64(30)).(*int64),
                                        DNSPolicy:                     corev1.DNSPolicy("ClusterFirst"),
                                        SecurityContext:               &corev1.PodSecurityContext{},
                                        SchedulerName:                 "default-scheduler",
                                },
                        },
                        CompletionMode: valast.Addr(batchv1.CompletionMode("NonIndexed")).(*batchv1.CompletionMode),
                        Suspend:        valast.Addr(false).(*bool),
                },
        }
        a.objects = append(a.objects, beepsJob)

        if client != nil {
                _, err = client.BatchV1().Jobs("default").Create(context.TODO(), beepsJob, metav1.CreateOptions{})
                if err != nil {
                        return err
                }
        }

        return err
}

func (a *App) Uninstall(client *kubernetes.Clientset) error {
        var err error

        if client != nil {
                err = client.BatchV1().Jobs("default").Delete(context.TODO(), "beeps", metav1.DeleteOptions{})
                if err != nil {
                        return err
                }
        }

        return err
}

func (a *App) Description() string {
        return a.description
}

func (a *App) Meta() *metav1.ObjectMeta {
        return &a.ObjectMeta
}

func (a *App) Objects() []runtime.Object {
        return a.objects
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62311862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档