From 4dae7da06f3633b53d3b2e9e31c174d3b15d476e Mon Sep 17 00:00:00 2001 From: yunchen Date: Thu, 28 Jun 2018 14:59:36 +0000 Subject: [PATCH] Add PersistentVolumeClaim function --- src/kubernetes/pvc.go | 39 ++++++++++++++++++++ src/kubernetes/pvcs_test.go | 73 +++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 src/kubernetes/pvc.go create mode 100644 src/kubernetes/pvcs_test.go diff --git a/src/kubernetes/pvc.go b/src/kubernetes/pvc.go new file mode 100644 index 00000000..6f556b36 --- /dev/null +++ b/src/kubernetes/pvc.go @@ -0,0 +1,39 @@ +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) { + pvc, err := kc.Clientset.CoreV1().PersistentVolumeClaims(namespace).Create(pvc) + if err != nil { + return nil, err + } + return pvc, nil +} + +//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) +} diff --git a/src/kubernetes/pvcs_test.go b/src/kubernetes/pvcs_test.go new file mode 100644 index 00000000..9fcc93ea --- /dev/null +++ b/src/kubernetes/pvcs_test.go @@ -0,0 +1,73 @@ +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 := "default" + _, 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) TearDownSuite() {} + +func TestKubePVCTestSuite(t *testing.T) { + suite.Run(t, new(KubeCtlPVCTestSuite)) +}