Skip to content

Commit

Permalink
feat: support kubeconfig-path for release-cli (#84)
Browse files Browse the repository at this point in the history
* feat: support kubeconfig-path for release-cli

* fix: address code review comments
  • Loading branch information
zhujian7 authored and caicloud-bot committed Dec 28, 2018
1 parent 0b4e394 commit f7381cd
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 75 deletions.
36 changes: 16 additions & 20 deletions cmd/release-cli/create.go
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
package main

import (
"github.com/caicloud/clientset/kubernetes"
"github.com/caicloud/clientset/pkg/apis/release/v1alpha1"
"github.com/golang/glog"
"github.com/spf13/cobra"
"k8s.io/client-go/rest"
)

func init() {
root.AddCommand(create)
fs := create.Flags()

fs.StringVarP(&createOptions.Server, "server", "s", "", "Kubenetes master host")
fs.StringVarP(&createOptions.BearerToken, "bearer-token", "b", "", "Kubenetes master bearer token")
fs.StringVarP(&createOptions.Namespace, "namespace", "n", "", "Kubenetes namespace")
fs.StringVarP(&createOptions.Server, "server", "s", "", "Kubernetes master host")
fs.StringVarP(&createOptions.BearerToken, "bearer-token", "b", "", "Kubernetes master bearer token")
fs.StringVarP(&createOptions.Namespace, "namespace", "n", "", "Kubernetes namespace")
fs.StringVarP(&createOptions.Values, "values", "c", "", "Chart values file path. Override values.yaml in template")
fs.StringVarP(&createOptions.Template, "template", "t", "", "Chart template file path. Can be a tgz package or a chart directory")
fs.StringVarP(&createOptions.KubeconfigPath, "kubeconfig", "k", "", "Kubernetes config path")
}

var createOptions = struct {
Server string
BearerToken string
Namespace string
Values string
Template string
Server string
BearerToken string
KubeconfigPath string
Namespace string
Values string
Template string
}{}

var create = &cobra.Command{
Expand All @@ -34,8 +34,8 @@ var create = &cobra.Command{
}

func runCreate(cmd *cobra.Command, args []string) {
if createOptions.Server == "" || createOptions.BearerToken == "" {
glog.Fatalln("--server and --bearer-token must be set")
if createOptions.KubeconfigPath == "" && (createOptions.Server == "" || createOptions.BearerToken == "") {
glog.Fatalln("Must specify either --kubeconfig or --bearer-token and --server")
}

if createOptions.Namespace == "" {
Expand All @@ -57,16 +57,12 @@ func runCreate(cmd *cobra.Command, args []string) {
if err != nil {
glog.Fatalf("Unable to load template and values: %v", err)
}
clientset, err := kubernetes.NewForConfig(&rest.Config{
Host: createOptions.Server,
BearerToken: createOptions.BearerToken,
TLSClientConfig: rest.TLSClientConfig{
Insecure: true,
},
})

clientset, err := newClientSet(createOptions.KubeconfigPath, createOptions.Server, createOptions.BearerToken)
if err != nil {
glog.Fatalln(err)
glog.Fatalf("Unable to create k8s client set: %v", err)
}

rel := &v1alpha1.Release{}
rel.Name = args[0]
rel.Spec.Config = config
Expand Down
30 changes: 12 additions & 18 deletions cmd/release-cli/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,25 @@ package main
import (
"fmt"

"github.com/caicloud/clientset/kubernetes"
"github.com/golang/glog"
"github.com/spf13/cobra"
"k8s.io/client-go/rest"
)

func init() {
root.AddCommand(delete)
fs := delete.Flags()

fs.StringVarP(&deleteOptions.Server, "server", "s", "", "Kubenetes master host")
fs.StringVarP(&deleteOptions.BearerToken, "bearer-token", "b", "", "Kubenetes master bearer token")
fs.StringVarP(&deleteOptions.Namespace, "namespace", "n", "", "Kubenetes namespace")
fs.StringVarP(&deleteOptions.Server, "server", "s", "", "Kubernetes master host")
fs.StringVarP(&deleteOptions.BearerToken, "bearer-token", "b", "", "Kubernetes master bearer token")
fs.StringVarP(&deleteOptions.Namespace, "namespace", "n", "", "Kubernetes namespace")
fs.StringVarP(&deleteOptions.KubeconfigPath, "kubeconfig", "k", "", "Kubernetes config path")
}

var deleteOptions = struct {
Server string
BearerToken string
Namespace string
Server string
BearerToken string
KubeconfigPath string
Namespace string
}{}

var delete = &cobra.Command{
Expand All @@ -31,8 +31,8 @@ var delete = &cobra.Command{
}

func runDelete(cmd *cobra.Command, args []string) {
if deleteOptions.Server == "" || deleteOptions.BearerToken == "" {
glog.Fatalln("--server and --bearer-token must be set")
if deleteOptions.KubeconfigPath == "" && (deleteOptions.Server == "" || deleteOptions.BearerToken == "") {
glog.Fatalln("Must specify either --kubeconfig or --bearer-token and --server")
}

if deleteOptions.Namespace == "" {
Expand All @@ -43,15 +43,9 @@ func runDelete(cmd *cobra.Command, args []string) {
glog.Fatalln("Must specify release name")
}

clientset, err := kubernetes.NewForConfig(&rest.Config{
Host: deleteOptions.Server,
BearerToken: deleteOptions.BearerToken,
TLSClientConfig: rest.TLSClientConfig{
Insecure: true,
},
})
clientset, err := newClientSet(deleteOptions.KubeconfigPath, deleteOptions.Server, deleteOptions.BearerToken)
if err != nil {
glog.Fatalln(err)
glog.Fatalf("Unable to create k8s client set: %v", err)
}

for _, name := range args {
Expand Down
32 changes: 13 additions & 19 deletions cmd/release-cli/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,29 @@ import (
"encoding/base64"
"fmt"

"github.com/caicloud/clientset/kubernetes"
"github.com/ghodss/yaml"
"github.com/golang/glog"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest"
)

func init() {
root.AddCommand(get)
fs := get.Flags()

fs.StringVarP(&getOptions.Server, "server", "s", "", "Kubenetes master host")
fs.StringVarP(&getOptions.BearerToken, "bearer-token", "b", "", "Kubenetes master bearer token")
fs.StringVarP(&getOptions.Namespace, "namespace", "n", "", "Kubenetes namespace")
fs.StringVarP(&getOptions.Server, "server", "s", "", "Kubernetes master host")
fs.StringVarP(&getOptions.BearerToken, "bearer-token", "b", "", "Kubernetes master bearer token")
fs.StringVarP(&getOptions.Namespace, "namespace", "n", "", "Kubernetes namespace")
fs.BoolVarP(&getOptions.Detail, "detail", "d", false, "Show details")
fs.StringVarP(&getOptions.KubeconfigPath, "kubeconfig", "k", "", "Kubernetes config path")
}

var getOptions = struct {
Server string
BearerToken string
Namespace string
Detail bool
Server string
BearerToken string
KubeconfigPath string
Namespace string
Detail bool
}{}

var get = &cobra.Command{
Expand All @@ -37,8 +37,8 @@ var get = &cobra.Command{
}

func runGet(cmd *cobra.Command, args []string) {
if getOptions.Server == "" || getOptions.BearerToken == "" {
glog.Fatalln("--server and --bearer-token must be set")
if getOptions.KubeconfigPath == "" && (getOptions.Server == "" || getOptions.BearerToken == "") {
glog.Fatalln("Must specify either --kubeconfig or --bearer-token and --server")
}

if getOptions.Namespace == "" {
Expand All @@ -52,15 +52,9 @@ func runGet(cmd *cobra.Command, args []string) {
glog.Fatalln("Two or more release names is not allowed")
}

clientset, err := kubernetes.NewForConfig(&rest.Config{
Host: getOptions.Server,
BearerToken: getOptions.BearerToken,
TLSClientConfig: rest.TLSClientConfig{
Insecure: true,
},
})
clientset, err := newClientSet(getOptions.KubeconfigPath, getOptions.Server, getOptions.BearerToken)
if err != nil {
glog.Fatalln(err)
glog.Fatalf("Unable to create k8s client set: %v", err)
}

r, err := clientset.ReleaseV1alpha1().Releases(getOptions.Namespace).Get(args[0], metav1.GetOptions{})
Expand Down
32 changes: 14 additions & 18 deletions cmd/release-cli/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,28 @@ import (
"fmt"
"strings"

"github.com/caicloud/clientset/kubernetes"
"github.com/caicloud/clientset/pkg/apis/release/v1alpha1"
"github.com/golang/glog"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest"
)

func init() {
root.AddCommand(list)
fs := list.Flags()

fs.StringVarP(&listOptions.Server, "server", "s", "", "Kubenetes master host")
fs.StringVarP(&listOptions.BearerToken, "bearer-token", "b", "", "Kubenetes master bearer token")
fs.StringVarP(&listOptions.Namespace, "namespace", "n", "", "Kubenetes namespace")
fs.StringVarP(&listOptions.Server, "server", "s", "", "Kubernetes master host")
fs.StringVarP(&listOptions.BearerToken, "bearer-token", "b", "", "Kubernetes master bearer token")
fs.StringVarP(&listOptions.Namespace, "namespace", "n", "", "Kubernetes namespace")
fs.StringVarP(&listOptions.KubeconfigPath, "kubeconfig", "k", "", "Kubernetes config path")

}

var listOptions = struct {
Server string
BearerToken string
Namespace string
Server string
BearerToken string
KubeconfigPath string
Namespace string
}{}

var list = &cobra.Command{
Expand All @@ -34,18 +35,13 @@ var list = &cobra.Command{
}

func runList(cmd *cobra.Command, args []string) {
if listOptions.Server == "" || listOptions.BearerToken == "" {
glog.Fatalln("--server and --bearer-token must be set")
if listOptions.KubeconfigPath == "" && (listOptions.Server == "" || listOptions.BearerToken == "") {
glog.Fatalln("Must specify either --kubeconfig or --bearer-token and --server")
}
clientset, err := kubernetes.NewForConfig(&rest.Config{
Host: listOptions.Server,
BearerToken: listOptions.BearerToken,
TLSClientConfig: rest.TLSClientConfig{
Insecure: true,
},
})

clientset, err := newClientSet(listOptions.KubeconfigPath, listOptions.Server, listOptions.BearerToken)
if err != nil {
glog.Fatalln(err)
glog.Fatalf("Unable to create k8s client set: %v", err)
}

list, err := clientset.ReleaseV1alpha1().Releases(listOptions.Namespace).List(metav1.ListOptions{})
Expand Down
33 changes: 33 additions & 0 deletions cmd/release-cli/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import (
"io/ioutil"
"path/filepath"

"github.com/caicloud/clientset/kubernetes"
"github.com/ghodss/yaml"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/proto/hapi/chart"
)
Expand Down Expand Up @@ -134,3 +137,33 @@ func writeToTar(out *tar.Writer, name string, body []byte) error {
}
return nil
}

// newClientSet creates a k8s client set.
func newClientSet(kubeconfigPath, server, bearerToken string) (*kubernetes.Clientset, error) {
var clientset *kubernetes.Clientset
var err error
if kubeconfigPath != "" {
cfg, err := clientcmd.BuildConfigFromFlags(server, kubeconfigPath)
if err != nil {
return clientset, err
}

clientset, err = kubernetes.NewForConfig(cfg)
if err != nil {
return clientset, err
}
} else {
clientset, err = kubernetes.NewForConfig(&rest.Config{
Host: server,
BearerToken: bearerToken,
TLSClientConfig: rest.TLSClientConfig{
Insecure: true,
},
})
if err != nil {
return clientset, err
}
}

return clientset, nil
}

0 comments on commit f7381cd

Please sign in to comment.