Nothing Special   »   [go: up one dir, main page]

All Projects → PrasadG193 → Kyaml2go

PrasadG193 / Kyaml2go

Licence: apache-2.0
K8s Go client code generator from Kubernetes resource yamls

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Kyaml2go

d2a
A translator Django into SQLAlchemy.
Stars: ✭ 23 (-89.82%)
Mutual labels:  code-generator, codegen
evolution
Evolution process of The Falco Project
Stars: ✭ 37 (-83.63%)
Mutual labels:  examples, k8s
ogen
OpenAPI v3 code generator for go
Stars: ✭ 436 (+92.92%)
Mutual labels:  code-generator, codegen
evon
Fast and versatile event dispatcher code generator for Golang
Stars: ✭ 15 (-93.36%)
Mutual labels:  code-generator, codegen
Graphql Code Generator
A tool for generating code based on a GraphQL schema and GraphQL operations (query/mutation/subscription), with flexible support for custom plugins.
Stars: ✭ 7,993 (+3436.73%)
Mutual labels:  code-generator, codegen
kube-code-generator
Kubernetes code generator docker image
Stars: ✭ 60 (-73.45%)
Mutual labels:  code-generator, k8s
EasyEE-Auto
EasyEE 自动化代码生成器。EasyEE Automated code generator.
Stars: ✭ 39 (-82.74%)
Mutual labels:  code-generator, codegen
firework8s
Firework8s is a collection of kubernetes objects (yaml files) for deploying workloads in a home lab.
Stars: ✭ 35 (-84.51%)
Mutual labels:  examples, k8s
Astring
🌳 Tiny and fast JavaScript code generator from an ESTree-compliant AST.
Stars: ✭ 757 (+234.96%)
Mutual labels:  code-generator, codegen
dockerfiles
Dockerfile & kubernetes Yaml Templates
Stars: ✭ 44 (-80.53%)
Mutual labels:  examples, k8s
Sequelize Ui
Browser-based GUI for previewing and generating Sequelize project files.
Stars: ✭ 142 (-37.17%)
Mutual labels:  code-generator, codegen
Aarkay Archived
AarKay is a language independent code generation framework. This project has been deprecated and is no longer maintained.
Stars: ✭ 69 (-69.47%)
Mutual labels:  code-generator, codegen
Xcassetpacker
A command line tool for converting a folder of images into an .xcasset package for Xcode
Stars: ✭ 150 (-33.63%)
Mutual labels:  code-generator, codegen
Artist
An artist creates views. Artist is a Gradle plugin that codegens a base set of Android Views.
Stars: ✭ 208 (-7.96%)
Mutual labels:  codegen
Bcmall
以教学为目的的电商系统。包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技术、后端实践等。主要技术:SpringBoot+JPA+Mybatis-plus+Antd+Vue3。
Stars: ✭ 188 (-16.81%)
Mutual labels:  k8s
Tcpprobe
Modern TCP tool and service for network performance observability.
Stars: ✭ 207 (-8.41%)
Mutual labels:  k8s
Dbtool
数据库工具,根据表结构文档生成创建表sql,根据数据库表信息导出Model和表结构文档,根据文档生成数据库表,根据已有Model文件生成创建数据库表sql
Stars: ✭ 206 (-8.85%)
Mutual labels:  code-generator
Helloworld Msa
Main repository with documentation and support files
Stars: ✭ 218 (-3.54%)
Mutual labels:  examples
Ks Installer
Install KubeSphere on existing Kubernetes cluster
Stars: ✭ 216 (-4.42%)
Mutual labels:  k8s
Kubefwd
Bulk port forwarding Kubernetes services for local development.
Stars: ✭ 2,713 (+1100.44%)
Mutual labels:  k8s

kyaml2go (Pronounced as camel2go 🐫)

Build Status

https://kyaml2go.prasadg.dev

Go client code generator from Kubernetes resource specs yaml

https://github.com/PrasadG193/kyaml2go

Supported resources

List of supported Kinds and Groups can be found here: https://github.com/PrasadG193/kyaml2go/blob/master/pkg/kube/map.go#L38

kyaml2go also supports Custom Resources compatible with client-go v0.18.5 dep

Installation

Docker

docker run --rm -i ghcr.io/prasadg193/kyaml2go:latest create < testdata/secrets.yaml

Install From Source

Step 1: Clone the repo

$ git clone https://github.com/PrasadG193/kyaml2go.git

Step 2: Build binary using make

$ make

Usage

kyaml2go is available at https://kyaml2go.prasadg.dev

Alternatively, you can also use CLI or docker image to generate code

$ kyaml2go --help
NAME:
   kyaml2go - Generate go code to manage Kubernetes resources using go-client sdks

USAGE:
   kyaml2go [global options] command [command options] [arguments...]

VERSION:
   0.0.0

COMMANDS:
   create   Generate code for creating a resource
   update   Generate code for updating a resource
   get      Generate code to get a resource object
   delete   Generate code for deleting a resource
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version


$ kyaml2go create --help
NAME:
   kyaml2go create - Generate code for creating a resource

USAGE:
   kyaml2go create [command options] [arguments...]

OPTIONS:
   --cr                      Resource is a Custom resource
   --apis value              Custom resource api def package (without version)
   --client value, -c value  Custom resource typed client package name
   --scheme value, -s value  Custom resource scheme package name

Examples

Generating code for native resources

$ docker run --rm -i ghcr.io/prasadg193/kyaml2go:latest create < testdata/secrets.yaml

// Auto-generated by kyaml2go - https://github.com/PrasadG193/kyaml2go
package main

import (
        "context"
        "fmt"
        corev1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        clientset "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/clientcmd"
        "k8s.io/client-go/util/homedir"
        "os"
        "path/filepath"
)

func main() {
        // Create client
        var kubeconfig string
        kubeconfig, ok := os.LookupEnv("KUBECONFIG")
        if !ok {
                kubeconfig = filepath.Join(homedir.HomeDir(), ".kube", "config")
        }

        config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
        if err != nil {
                panic(err)
        }
        client, err := clientset.NewForConfig(config)
        if err != nil {
                panic(err)
        }
        kubeclient := client.CoreV1().Secrets("default")

        // Create resource object
        object := &corev1.Secret{
                TypeMeta: metav1.TypeMeta{
                        Kind:       "Secret",
                        APIVersion: "v1",
                },
                ObjectMeta: metav1.ObjectMeta{
                        Name: "test-secret",
                },
                StringData: map[string]string{
                        "password": "1f2d1e2e67df",
                        "username": "admin",
                },
                Type: corev1.SecretType("Opaque"),
        }

        // Manage resource
        _, err = kubeclient.Create(context.TODO(), object, metav1.CreateOptions{})
        if err != nil {
                panic(err)
        }
        fmt.Println("Secret Created successfully!")
}

Generating code for custom resources

$ docker run --rm -i ghcr.io/prasadg193/kyaml2go:latest create --cr --scheme "k8s.io/sample-controller/pkg/generated/clientset/versioned/scheme" --apis "k8s.io/sample-controller/pkg/apis/samplecontroller" --client "k8s.io/sample-controller/pkg/generated/clientset/versioned" < testdata/crs/foo.yaml

// Auto-generated by kyaml2go - https://github.com/PrasadG193/kyaml2go
package main

import (
        "context"
        "fmt"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/tools/clientcmd"
        "k8s.io/client-go/util/homedir"
        samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
        clientset "k8s.io/sample-controller/pkg/generated/clientset/versioned"
        "os"
        "path/filepath"
)

func main() {
        // Create client
        var kubeconfig string
        kubeconfig, ok := os.LookupEnv("KUBECONFIG")
        if !ok {
                kubeconfig = filepath.Join(homedir.HomeDir(), ".kube", "config")
        }

        config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
        if err != nil {
                panic(err)
        }
        client, err := clientset.NewForConfig(config)
        if err != nil {
                panic(err)
        }
        kubeclient := client.SamplecontrollerV1alpha1().Foos("default")

        // Create resource object
        object := &samplecontrollerv1alpha1.Foo{
                TypeMeta: metav1.TypeMeta{
                        Kind:       "Foo",
                        APIVersion: "samplecontroller.k8s.io/v1alpha1",
                },
                ObjectMeta: metav1.ObjectMeta{
                        Name: "example-foo",
                },
                Spec: samplecontrollerv1alpha1.FooSpec{
                        DeploymentName: "example-foo",
                        Replicas:       ptrint32(1),
                },
        }

        // Manage resource
        _, err = kubeclient.Create(context.TODO(), object, metav1.CreateOptions{})
        if err != nil {
                panic(err)
        }
        fmt.Println("Foo Created successfully!")
}

func ptrint32(p int32) *int32 {
        return &p
}

Workflow/Algorithm:

End-to-end workflow and algorithm to find imports can be found here

Contributing

We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:

  • Reporting a bug
  • Discussing the current state of the code
  • Submitting a fix
  • Proposing new features

Credits

The Go Gopher is originally by Renee French

This artwork is borrowed from an awesome artwork collection by Egon Elbre

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].