Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
vs4vijay committed Apr 20, 2020
1 parent 9d84a45 commit 0bb9415
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 47 deletions.
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,30 @@ import (
"k8s.io/client-go/tools/clientcmd"
)

clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig},
&clientcmd.ConfigOverrides{CurrentContext: kubeContext})

rawConfig, err := clientConfig.RawConfig()
rawConfig.CurrentContext






go func() {
for event := range watch.ResultChan() {
fmt.Printf("Type: %v\n", event.Type)
p, ok := event.Object.(*v1.Pod)
if !ok {
log.Fatal("unexpected type")
}
fmt.Println(p.Status.ContainerStatuses)
fmt.Println(p.Status.Phase)
}
}()
time.Sleep(5 * time.Second)



Expand Down
11 changes: 8 additions & 3 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ import (
var (
cfgFile string
kubeConfigFile string
dryrun bool
home = k8s.Home()
)

var rootCmd = &cobra.Command{
Use: "lazykubectl",
Short: "A Kubernetes Client",
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("lazykubectl")

Expand All @@ -47,9 +49,11 @@ var rootCmd = &cobra.Command{
return err
}

app.Start()

// tui.StartApp(kubeConfig)
if dryrun {
kubeapi.DryRun()
} else {
app.Start()
}
return nil
},
}
Expand All @@ -68,6 +72,7 @@ func init() {

flags := rootCmd.Flags()
flags.StringVarP(&kubeConfigFile, "kubeconfig", "c", filepath.Join(home, ".kube", "config"), "")
flags.BoolVar(&dryrun, "dryrun", false, "")
}

// initConfig reads in config file and ENV variables if set.
Expand Down
128 changes: 87 additions & 41 deletions pkg/k8s/k8s.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,15 @@ import (
"k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)

var (
ErrNoClusterConnectivity = errors.New("not able to connect to Kubernetes Cluster")
)

type KubeAPI struct {
Config clientcmd.ClientConfig
Clientset *kubernetes.Clientset
}

Expand All @@ -23,76 +27,64 @@ func NewKubeAPI(kubeConfig KubeConfig) (*KubeAPI, error) {
return nil, err
}

clientset, err := kubernetes.NewForConfig(config)
restConfig, err := config.ClientConfig()
if err != nil {
return nil, err
}

clientset, err := kubernetes.NewForConfig(restConfig)
if err != nil {
return nil, err
}

kubeapi := &KubeAPI{
Config: config,
Clientset: clientset,
}

// HACK: Checking the connectivity of cluster
_, err = kubeapi.SearchNamespaces()
_, err = kubeapi.GetNamespaces()
if err != nil {
return nil, errors.New("not able to connect to Kubernetes Cluster")
return nil, ErrNoClusterConnectivity
}

return kubeapi, nil
}

func (kubeapi *KubeAPI) SearchNamespaces() ([]v1.Namespace, error) {
namespaceList, err := kubeapi.Clientset.CoreV1().Namespaces().List(metav1.ListOptions{})
if err != nil {
return nil, err
}
return namespaceList.Items, nil
}

func BuildConfig(kubeConfig KubeConfig) (*rest.Config, error) {
func BuildConfig(kubeConfig KubeConfig) (clientcmd.ClientConfig, error) {
var (
config *rest.Config
// config *rest.Config
clientConfig clientcmd.ClientConfig
err error
)

if kubeConfig.Type == "MANIFEST" {
// Building config from Manifest YAML File Content
config, err = clientcmd.RESTConfigFromKubeConfig([]byte(kubeConfig.Manifest))
// config, err = clientcmd.RESTConfigFromKubeConfig([]byte(kubeConfig.Manifest))
// if err != nil {
// return nil, err
// }
clientConfig, err = clientcmd.NewClientConfigFromBytes([]byte(kubeConfig.Manifest))
if err != nil {
return nil, err
}
}
return config, err
return clientConfig, err
}

// func (kubeapi *KubeAPI) SearchNamespaces() ([]v1.Namespace, error) {
// namespaceList, err := kubeapi.Clientset.CoreV1().Namespaces().List(metav1.ListOptions{})
// if err != nil {
// return nil, err
// }
// // fmt.Println("Namespaces: ")
// // for _, pod := range namespaceList.Items {
// // fmt.Println("\t", pod.GetName())
// // }
// return namespaceList.Items, nil
// }
func (kubeapi *KubeAPI) GetNamespaces() ([]v1.Namespace, error) {
namespaceList, err := kubeapi.Clientset.CoreV1().Namespaces().List(metav1.ListOptions{})
if err != nil {
return nil, err
}
return namespaceList.Items, nil
}

func (kubeapi *KubeAPI) GetNodes() ([]v1.Node, error) {
nodeList, err := kubeapi.Clientset.CoreV1().Nodes().List(metav1.ListOptions{})
if err != nil {
return nil, err
}
// for _, node := range nodeList.Items {
// fmt.Println("\t", node.GetName())
// }
// for _, condition := range node.Status.Conditions {
// if condition.Reason == "KubeletReady" {
// if condition.Status == "True" {
// nodeStatus = "Ready"
// } else if condition.Reason == "False" {
// nodeStatus = "NotReady"
// } else {
// nodeStatus = "Unknown"
// }
// }
// }
return nodeList.Items, nil
}

Expand Down Expand Up @@ -166,3 +158,57 @@ func (kubeapi *KubeAPI) GetDeployments(namespace v1.Namespace) ([]v1beta1.Deploy
}
return deploymentList.Items, nil
}

func (kubeapi *KubeAPI) DryRun() {
fmt.Println("Dry Run")

// Namespaces
namespaces, _ := kubeapi.GetNamespaces()
fmt.Println("Namespaces: ")
for _, namespace := range namespaces {
fmt.Println("\t", namespace.GetName())
}

// Pods
for _, namespace := range namespaces {
fmt.Println("\t", namespace.GetName())

pods, _ := kubeapi.GetPods(namespace.GetName())
fmt.Println("Pods: ")
for _, pod := range pods {
fmt.Println("\t", pod.GetName())
}
}

// Services
for _, namespace := range namespaces {
fmt.Println("\t", namespace.GetName())

services, _ := kubeapi.GetServices(namespace.GetName())
fmt.Println("Services: ")
for _, service := range services {
fmt.Println("\t", service.GetName())
}
}

// k8s.GetContainers(clientset, "kube-system", "kube-apiserver-kind-control-plane")
// k8s.GetContainers(clientset, "kube-system", "kube-controller-manager-kind-control-plane")
// k8s.GetContainers(clientset, "kube-system", "kube-scheduler-kind-control-plane")

// err := k8s.GetContainerLogs(clientset, "kube-system", "kube-apiserver-kind-control-plane", "kube-apiserver", os.Stdout)

// for _, node := range nodeList.Items {
// fmt.Println("\t", node.GetName())
// }
// for _, condition := range node.Status.Conditions {
// if condition.Reason == "KubeletReady" {
// if condition.Status == "True" {
// nodeStatus = "Ready"
// } else if condition.Reason == "False" {
// nodeStatus = "NotReady"
// } else {
// nodeStatus = "Unknown"
// }
// }
// }
}
13 changes: 10 additions & 3 deletions pkg/tui/tui.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func layout(g *gocui.Gui) error {
v.SelBgColor = gocui.ColorGreen
v.SelFgColor = gocui.ColorBlack

namespaces, _ := app.kubeapi.SearchNamespaces()
namespaces, _ := app.kubeapi.GetNamespaces()
for _, item := range namespaces {
fmt.Fprintln(v, item.GetName())
}
Expand All @@ -114,8 +114,11 @@ func layout(g *gocui.Gui) error {
}
v.Title = "Pods"
v.Highlight = true
v.Autoscroll = true
v.SelBgColor = gocui.ColorGreen
v.SelFgColor = gocui.ColorBlack

// app.kubeapi.GetContainerLogs("kube-system", "kube-apiserver-kind-control-plane", "kube-apiserver", v)
}

if v, err := g.SetView("Services", 0, gridY*2, gridX*4, gridY*3); err != nil {
Expand Down Expand Up @@ -167,6 +170,11 @@ func onSelectNamespace(g *gocui.Gui, v *gocui.View) error {
podsView, _ := g.View("Main")
podsView.Clear()

// podsView.Autoscroll = true
// fmt.Fprintf(podsView, "%-20s %-15s\n", "POD NAME", "POD STATUS")
// app.kubeapi.GetContainerLogs("kube-system", "kube-apiserver-kind-control-plane", "kube-apiserver", podsView)
// return nil

pods, _ := app.kubeapi.GetPods(namespaceName)
podsView.Title = fmt.Sprintf("Pods(%v) - %v", len(pods), namespaceName)
fmt.Fprintf(podsView, "%-20s %-15s\n", "POD NAME", "POD STATUS")
Expand Down Expand Up @@ -226,7 +234,6 @@ func onSelectMain(g *gocui.Gui, view *gocui.View) error {
// view.FgColor = gocui.ColorWhite
// view.SelBgColor = gocui.ColorBlue


app.kubeapi.GetContainerLogs(state["namespace"], state["pod"], state["container"], view)
return nil
})
Expand All @@ -242,4 +249,4 @@ func getSelectedText(view *gocui.View) string {
return ""
}
return line
}
}

0 comments on commit 0bb9415

Please sign in to comment.