Skip to content

Instantly share code, notes, and snippets.

@ycliu912
Forked from ffledgling/k8s-create-deployment.go
Last active September 13, 2019 05:16
Show Gist options
  • Save ycliu912/4a033915fc0ab9d44e06b53db3a79cb8 to your computer and use it in GitHub Desktop.
Save ycliu912/4a033915fc0ab9d44e06b53db3a79cb8 to your computer and use it in GitHub Desktop.
kubernetes client-go example: Create a Deployment based on json
package main
/*
k8s-create-deployment.go
https://gist.github.com/ffledgling/62814ccbb12fd6b9ab6fd89da7e80cd2
*/
import (
"encoding/json"
"log"
"os"
// We use pretty instead of the common go-spew or pretty-printing because,
// go-spew is vendored in client-go and causes problems
"github.com/kr/pretty"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
apiv1 "k8s.io/api/core/v1"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
var (
kubeconfig = "/Users/liuyanchao/.kube/config"
dbjson = "/Users/liuyanchao/go/src/demo.io/demo-k8s/demo01/deployment.json"
)
func main() {
//Read the deployment json
file, err := os.Open(dbjson)
if err != nil {
panic(err.Error())
}
dec := json.NewDecoder(file)
//Parse it into the internal k8s structs
var dep appsv1.Deployment
dec.Decode(&dep)
//Dump the struct in case you want to see what it looks like
pretty.Println(dep)
//dep.Namespace = "test"
pretty.Println(dep)
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
panic(err.Error())
}
// creates the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}
deploymentsClient := clientset.AppsV1().Deployments(apiv1.NamespaceDefault)
// List existing deployments in namespace
deployments, err := deploymentsClient.List(metav1.ListOptions{})
if err != nil {
log.Println(err)
} else {
for i, e := range deployments.Items {
log.Printf("Deployment #%d\n", i)
log.Printf("%s", e.ObjectMeta.SelfLink)
}
}
// Create a new deployment based on our template.
if result, err := deploymentsClient.Create(&dep); err != nil {
log.Println("ERROR:", err.Error())
} else {
pretty.Println(result)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment