Skip to content

Commit

Permalink
Merge pull request #58 from linkernetworks/alex/addk8sfunction
Browse files Browse the repository at this point in the history
VX-149 VX-150 Add k8s pod, service, pvc: get list create delete function
  • Loading branch information
John-Lin authored Jul 4, 2018
2 parents ee1f82e + 04095f7 commit e206b23
Show file tree
Hide file tree
Showing 8 changed files with 366 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/kubernetes/nodes.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

//Get the Node object by the node name
//Get the node object by the node name
func (kc *KubeCtl) GetNode(name string) (*corev1.Node, error) {
return kc.Clientset.CoreV1().Nodes().Get(name, metav1.GetOptions{})
}
Expand Down
4 changes: 2 additions & 2 deletions src/kubernetes/nodes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ func (suite *KubeCtlNodeTestSuite) TestGetNodeFail() {
func (suite *KubeCtlNodeTestSuite) TestGetNodes() {
node := corev1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Node2",
Name: "K8S-Node-2",
},
}
_, err := suite.fakeclient.CoreV1().Nodes().Create(&node)
suite.NoError(err)

node = corev1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Node3",
Name: "K8S-Node-3",
},
}
_, err = suite.fakeclient.CoreV1().Nodes().Create(&node)
Expand Down
35 changes: 35 additions & 0 deletions src/kubernetes/pods.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package kubernetes

import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

//Get the pod object by the pod name
func (kc *KubeCtl) GetPod(name string, namespace string) (*corev1.Pod, error) {
return kc.Clientset.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})
}

//Get all pods from the k8s cluster
func (kc *KubeCtl) GetPods(namespace string) ([]*corev1.Pod, error) {
pods := []*corev1.Pod{}
podsList, err := kc.Clientset.CoreV1().Pods(namespace).List(metav1.ListOptions{})
if err != nil {
return pods, err
}
for _, p := range podsList.Items {
pods = append(pods, &p)
}
return pods, nil
}

//Create the pod by the pod object
func (kc *KubeCtl) CreatePod(pod *corev1.Pod, namespace string) (*corev1.Pod, error) {
return kc.Clientset.CoreV1().Pods(namespace).Create(pod)
}

//Delete the pod by the pod name
func (kc *KubeCtl) DeletePod(name string, namespace string) error {
options := metav1.DeleteOptions{}
return kc.Clientset.CoreV1().Pods(namespace).Delete(name, &options)
}
86 changes: 86 additions & 0 deletions src/kubernetes/pods_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package kubernetes

import (
"testing"

"github.com/stretchr/testify/suite"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
fakeclientset "k8s.io/client-go/kubernetes/fake"
)

type KubeCtlPodTestSuite struct {
suite.Suite
kubectl *KubeCtl
fakeclient *fakeclientset.Clientset
}

func (suite *KubeCtlPodTestSuite) SetupSuite() {
suite.fakeclient = fakeclientset.NewSimpleClientset()
namespace := "default"
suite.kubectl = New(suite.fakeclient, namespace)
}

func (suite *KubeCtlPodTestSuite) TestGetPod() {
namespace := "default"
pod := corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Pod-1",
},
}
_, err := suite.fakeclient.CoreV1().Pods(namespace).Create(&pod)
suite.NoError(err)

result, err := suite.kubectl.GetPod("K8S-Pod-1", namespace)
suite.NoError(err)
suite.Equal(pod.GetName(), result.GetName())
}

func (suite *KubeCtlPodTestSuite) TestGetPodFail() {
namespace := "Unknown_Namespace"
_, err := suite.kubectl.GetPod("Unknown_Name", namespace)
suite.Error(err)
}

func (suite *KubeCtlPodTestSuite) TestGetPods() {
namespace := "default"
pod := corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Pod-2",
},
}
_, err := suite.fakeclient.CoreV1().Pods(namespace).Create(&pod)
suite.NoError(err)

pod = corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Pod-3",
},
}
_, err = suite.fakeclient.CoreV1().Pods(namespace).Create(&pod)
suite.NoError(err)

pods, err := suite.kubectl.GetPods(namespace)
suite.NoError(err)
suite.NotEqual(0, len(pods))
}

func (suite *KubeCtlPodTestSuite) TestCreateDeletePod() {
namespace := "default"
pod := corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Pod-4",
},
}
_, err := suite.kubectl.CreatePod(&pod, namespace)
suite.NoError(err)
err = suite.kubectl.DeletePod("K8S-Pod-4", namespace)
suite.NoError(err)
}

func (suite *KubeCtlPodTestSuite) TearDownSuite() {}

func TestKubePodTestSuite(t *testing.T) {
suite.Run(t, new(KubeCtlPodTestSuite))
}
35 changes: 35 additions & 0 deletions src/kubernetes/pvc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package kubernetes

import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

//Get the PVC object by the PVC name
func (kc *KubeCtl) GetPVC(name string, namespace string) (*corev1.PersistentVolumeClaim, error) {
return kc.Clientset.CoreV1().PersistentVolumeClaims(namespace).Get(name, metav1.GetOptions{})
}

//Get all PVCs from the k8s cluster
func (kc *KubeCtl) GetPVCs(namespace string) ([]*corev1.PersistentVolumeClaim, error) {
pvcs := []*corev1.PersistentVolumeClaim{}
pvcsList, err := kc.Clientset.CoreV1().PersistentVolumeClaims(namespace).List(metav1.ListOptions{})
if err != nil {
return pvcs, err
}
for _, p := range pvcsList.Items {
pvcs = append(pvcs, &p)
}
return pvcs, nil
}

//Create the PVC by the PVC object
func (kc *KubeCtl) CreatePVC(pvc *corev1.PersistentVolumeClaim, namespace string) (*corev1.PersistentVolumeClaim, error) {
return kc.Clientset.CoreV1().PersistentVolumeClaims(namespace).Create(pvc)
}

//Delete the PVC by the PVC name
func (kc *KubeCtl) DeletePVC(name string, namespace string) error {
options := metav1.DeleteOptions{}
return kc.Clientset.CoreV1().PersistentVolumeClaims(namespace).Delete(name, &options)
}
86 changes: 86 additions & 0 deletions src/kubernetes/pvc_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package kubernetes

import (
"testing"

"github.com/stretchr/testify/suite"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
fakeclientset "k8s.io/client-go/kubernetes/fake"
)

type KubeCtlPVCTestSuite struct {
suite.Suite
kubectl *KubeCtl
fakeclient *fakeclientset.Clientset
}

func (suite *KubeCtlPVCTestSuite) SetupSuite() {
suite.fakeclient = fakeclientset.NewSimpleClientset()
namespace := "default"
suite.kubectl = New(suite.fakeclient, namespace)
}

func (suite *KubeCtlPVCTestSuite) TestGetPVC() {
namespace := "default"
pvc := corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-PVC-1",
},
}
_, err := suite.fakeclient.CoreV1().PersistentVolumeClaims(namespace).Create(&pvc)
suite.NoError(err)

result, err := suite.kubectl.GetPVC("K8S-PVC-1", namespace)
suite.NoError(err)
suite.Equal(pvc.GetName(), result.GetName())
}

func (suite *KubeCtlPVCTestSuite) TestGetPVCFail() {
namespace := "Unknown_Namespace"
_, err := suite.kubectl.GetPVC("Unknown_Name", namespace)
suite.Error(err)
}

func (suite *KubeCtlPVCTestSuite) TestGetPVCs() {
namespace := "default"
pvc := corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-PVC-2",
},
}
_, err := suite.fakeclient.CoreV1().PersistentVolumeClaims(namespace).Create(&pvc)
suite.NoError(err)

pvc = corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-PVC-3",
},
}
_, err = suite.fakeclient.CoreV1().PersistentVolumeClaims(namespace).Create(&pvc)
suite.NoError(err)

pvcs, err := suite.kubectl.GetPVCs(namespace)
suite.NoError(err)
suite.NotEqual(0, len(pvcs))
}

func (suite *KubeCtlPVCTestSuite) TestCreateDeletePVC() {
namespace := "default"
pvc := corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-PVC-4",
},
}
_, err := suite.kubectl.CreatePVC(&pvc, namespace)
suite.NoError(err)
err = suite.kubectl.DeletePVC("K8S-PVC-4", namespace)
suite.NoError(err)
}

func (suite *KubeCtlPVCTestSuite) TearDownSuite() {}

func TestKubePVCTestSuite(t *testing.T) {
suite.Run(t, new(KubeCtlPVCTestSuite))
}
35 changes: 35 additions & 0 deletions src/kubernetes/services.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package kubernetes

import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

//Get the service object by the service name
func (kc *KubeCtl) GetService(name string, namespace string) (*corev1.Service, error) {
return kc.Clientset.CoreV1().Services(namespace).Get(name, metav1.GetOptions{})
}

//Get all services from the k8s cluster
func (kc *KubeCtl) GetServices(namespace string) ([]*corev1.Service, error) {
services := []*corev1.Service{}
servicesList, err := kc.Clientset.CoreV1().Services(namespace).List(metav1.ListOptions{})
if err != nil {
return services, err
}
for _, s := range servicesList.Items {
services = append(services, &s)
}
return services, nil
}

//Create the service by the service object
func (kc *KubeCtl) CreateService(service *corev1.Service, namespace string) (*corev1.Service, error) {
return kc.Clientset.CoreV1().Services(namespace).Create(service)
}

//Delete the service by the service name
func (kc *KubeCtl) DeleteService(name string, namespace string) error {
options := metav1.DeleteOptions{}
return kc.Clientset.CoreV1().Services(namespace).Delete(name, &options)
}
86 changes: 86 additions & 0 deletions src/kubernetes/services_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package kubernetes

import (
"testing"

"github.com/stretchr/testify/suite"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
fakeclientset "k8s.io/client-go/kubernetes/fake"
)

type KubeCtlServiceTestSuite struct {
suite.Suite
kubectl *KubeCtl
fakeclient *fakeclientset.Clientset
}

func (suite *KubeCtlServiceTestSuite) SetupSuite() {
suite.fakeclient = fakeclientset.NewSimpleClientset()
namespace := "default"
suite.kubectl = New(suite.fakeclient, namespace)
}

func (suite *KubeCtlServiceTestSuite) TestGetService() {
namespace := "default"
service := corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Service-1",
},
}
_, err := suite.fakeclient.CoreV1().Services(namespace).Create(&service)
suite.NoError(err)

result, err := suite.kubectl.GetService("K8S-Service-1", namespace)
suite.NoError(err)
suite.Equal(service.GetName(), result.GetName())
}

func (suite *KubeCtlServiceTestSuite) TestGetServiceFail() {
namespace := "Unknown_Namespace"
_, err := suite.kubectl.GetService("Unknown_Name", namespace)
suite.Error(err)
}

func (suite *KubeCtlServiceTestSuite) TestGetServices() {
namespace := "default"
service := corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Service-2",
},
}
_, err := suite.fakeclient.CoreV1().Services(namespace).Create(&service)
suite.NoError(err)

service = corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Service-3",
},
}
_, err = suite.fakeclient.CoreV1().Services(namespace).Create(&service)
suite.NoError(err)

services, err := suite.kubectl.GetServices(namespace)
suite.NoError(err)
suite.NotEqual(0, len(services))
}

func (suite *KubeCtlServiceTestSuite) TestCreateDeleteService() {
namespace := "default"
service := corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "K8S-Service-4",
},
}
_, err := suite.kubectl.CreateService(&service, namespace)
suite.NoError(err)
err = suite.kubectl.DeleteService("K8S-Service-4", namespace)
suite.NoError(err)
}

func (suite *KubeCtlServiceTestSuite) TearDownSuite() {}

func TestKubeServiceTestSuite(t *testing.T) {
suite.Run(t, new(KubeCtlServiceTestSuite))
}

0 comments on commit e206b23

Please sign in to comment.