PrasadG193 / Kyaml2go
Licence: apache-2.0
K8s Go client code generator from Kubernetes resource yamls
Stars: ✭ 226
Programming Languages
go
31211 projects - #10 most used programming language
Projects that are alternatives of or similar to Kyaml2go
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
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 🐫)
Go client code generator from Kubernetes resource specs yaml
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].