Skip to content

Commit

Permalink
Modularize some codebase
Browse files Browse the repository at this point in the history
  • Loading branch information
vs4vijay committed Apr 19, 2020
1 parent d84735a commit e2670a6
Show file tree
Hide file tree
Showing 3 changed files with 201 additions and 79 deletions.
21 changes: 18 additions & 3 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ var (
var rootCmd = &cobra.Command{
Use: "lazykubectl",
Short: "A Kubernetes Client",
Run: func(cmd *cobra.Command, args []string) {
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("lazykubectl")

configData, err := ioutil.ReadFile(kubeConfigFile)
if err != nil {
fmt.Errorf("Error in Reading Config: %v", err)
return fmt.Errorf("Error in Reading Config: %v", err)
os.Exit(1)
}

Expand All @@ -37,7 +37,22 @@ var rootCmd = &cobra.Command{
Manifest: string(configData),
}

tui.Start(kubeConfig)
kubeapi, err := k8s.NewKubeAPI(kubeConfig)
if err != nil {
return err
}

fmt.Println("kubeapi", kubeapi)

app, err := tui.NewApp(kubeapi)
if err != nil {
return err
}

app.Start()

// tui.StartApp(kubeConfig)
return nil
},
}

Expand Down
117 changes: 92 additions & 25 deletions pkg/k8s/k8s.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package k8s

import (
"errors"
"fmt"
"io"

Expand All @@ -12,6 +13,42 @@ import (
"k8s.io/client-go/tools/clientcmd"
)

type KubeAPI struct {
Clientset *kubernetes.Clientset
}

func NewKubeAPI(kubeConfig KubeConfig) (*KubeAPI, error) {
config, err := BuildConfig(kubeConfig)
if err != nil {
return nil, err
}

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

kubeapi := &KubeAPI{
Clientset: clientset,
}

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

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) {
var (
config *rest.Config
Expand All @@ -37,24 +74,55 @@ func GetClientset(kubeConfig KubeConfig) (*kubernetes.Clientset, error) {
}

// api := clientset.CoreV1()
// c, _ :=clientcmd.DefaultClientConfig.ClientConfig()

// clientcmd.DirectClientConfig

// clientcmd.DirectClientConfig{}

// rawConfig, _ := clientcmd.DirectClientConfig.RawConfig()
// // rawConfig.
// fmt.Println("rawConfig", rawConfig)

return clientset, nil
}

func SearchNamespaces(clientset *kubernetes.Clientset) ([]v1.Namespace, error) {
namespaceList, err := clientset.CoreV1().Namespaces().List(metav1.ListOptions{})
// 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) SearchNodes() ([]v1.Node, error) {
nodeList, err := kubeapi.Clientset.CoreV1().Nodes().List(metav1.ListOptions{})
if err != nil {
return nil, err
}
// fmt.Println("Namespaces: ")
// for _, pod := range namespaceList.Items {
// fmt.Println("\t", pod.GetName())
// for _, node := range nodeList.Items {
// fmt.Println("\t", node.GetName())
// }
return namespaceList.Items, nil
// 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
}

func SearchPods(clientset *kubernetes.Clientset, namespace string) ([]v1.Pod, error) {
podList, err := clientset.CoreV1().Pods(namespace).List(metav1.ListOptions{})
func (kubeapi *KubeAPI) SearchPods(namespace string) ([]v1.Pod, error) {
podList, err := kubeapi.Clientset.CoreV1().Pods(namespace).List(metav1.ListOptions{})
if err != nil {
return nil, err
}
Expand All @@ -65,41 +133,39 @@ func SearchPods(clientset *kubernetes.Clientset, namespace string) ([]v1.Pod, er
return podList.Items, nil
}

func SearchServices(clientset *kubernetes.Clientset, namespace string) ([]v1.Service, error) {
serviceList, err := clientset.CoreV1().Services(namespace).List(metav1.ListOptions{})
func (kubeapi *KubeAPI) SearchServices(namespace string) ([]v1.Service, error) {
serviceList, err := kubeapi.Clientset.CoreV1().Services(namespace).List(metav1.ListOptions{})
if err != nil {
return nil, err
}
// fmt.Println("Services: ")
// for _, service := range serviceList.Items {
// fmt.Println("\t", service.GetName())
// }

return serviceList.Items, nil
}

func GetContainers(clientset *kubernetes.Clientset, namespace string, podName string) ([]v1.Container, error) {
pod, err := clientset.CoreV1().Pods(namespace).Get(podName, metav1.GetOptions{})
func (kubeapi *KubeAPI) GetContainers(namespace string, podName string) ([]v1.Container, error) {
pod, err := kubeapi.Clientset.CoreV1().Pods(namespace).Get(podName, metav1.GetOptions{})
if err != nil {
return nil, err
}
fmt.Println("Containers: ")
for _, container := range pod.Spec.Containers {
fmt.Println("\t", container.Name)
}
// fmt.Println("Containers: ")
// for _, container := range pod.Spec.Containers {
// fmt.Println("\t", container.Name)
// }
return pod.Spec.Containers, nil
}

func GetContainerLogs(clientset *kubernetes.Clientset, namespace string, podName string, containerName string, out io.Writer) error {
tailLines := int64(100)
func (kubeapi *KubeAPI) GetContainerLogs(namespace string, podName string, containerName string, out io.Writer) error {
// tailLines := int64(100)
podLogOptions := v1.PodLogOptions{
Container: containerName,
TailLines: &tailLines,
// TailLines: &tailLines,
}

fmt.Println("Logs: ")

logRequest := clientset.CoreV1().Pods(namespace).GetLogs(podName, &podLogOptions)
// fmt.Println("Logs: ")
logRequest := kubeapi.Clientset.CoreV1().Pods(namespace).GetLogs(podName, &podLogOptions)

readCloser, err := logRequest.Stream()
if readCloser != nil {
Expand All @@ -113,8 +179,9 @@ func GetContainerLogs(clientset *kubernetes.Clientset, namespace string, podName
return err
}

func SearchDeployments(clientset *kubernetes.Clientset, namespace v1.Namespace) ([]v1beta1.Deployment, error) {
deploymentList, err := clientset.ExtensionsV1beta1().Deployments(namespace.GetName()).List(metav1.ListOptions{})
func (kubeapi *KubeAPI) SearchDeployments(namespace v1.Namespace) ([]v1beta1.Deployment, error) {
deploymentList, err := kubeapi.Clientset.ExtensionsV1beta1().Deployments(namespace.GetName()).List(metav1.ListOptions{})
// AppsV1().Deployments(namespace).List(metav1.ListOptions{})
if err != nil {
return nil, err
}
Expand Down

0 comments on commit e2670a6

Please sign in to comment.