summaryrefslogtreecommitdiffstats
path: root/src/k8splugin/krd
diff options
context:
space:
mode:
authorBin Hu <bh526r@att.com>2018-08-28 20:09:11 +0000
committerGerrit Code Review <gerrit@onap.org>2018-08-28 20:09:11 +0000
commit88579fa6f563a3bea8c39aa98159eb54d13d44a5 (patch)
tree24697d5dd4ba3c0578bef0f33cea51465b40ec27 /src/k8splugin/krd
parentbd3e38cf19c77e98bbd5be3e0f1f9806e0a6e331 (diff)
parenta1373742a2c3f980360e4980f3b23b0ff3480ae6 (diff)
Merge "Seed code for k8s multicloud plugin"
Diffstat (limited to 'src/k8splugin/krd')
-rw-r--r--src/k8splugin/krd/krd.go44
-rw-r--r--src/k8splugin/krd/krd_test.go34
-rw-r--r--src/k8splugin/krd/plugins.go44
3 files changed, 122 insertions, 0 deletions
diff --git a/src/k8splugin/krd/krd.go b/src/k8splugin/krd/krd.go
new file mode 100644
index 00000000..2d06e104
--- /dev/null
+++ b/src/k8splugin/krd/krd.go
@@ -0,0 +1,44 @@
+/*
+Copyright 2018 Intel Corporation.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package krd
+
+import (
+ "errors"
+
+ pkgerrors "github.com/pkg/errors"
+
+ "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/tools/clientcmd"
+)
+
+// GetKubeClient loads the Kubernetes configuation values stored into the local configuration file
+var GetKubeClient = func(configPath string) (kubernetes.Clientset, error) {
+ var clientset *kubernetes.Clientset
+
+ if configPath == "" {
+ return *clientset, errors.New("config not passed and is not found in ~/.kube. ")
+ }
+
+ config, err := clientcmd.BuildConfigFromFlags("", configPath)
+ if err != nil {
+ return kubernetes.Clientset{}, pkgerrors.Wrap(err, "setConfig: Build config from flags raised an error")
+ }
+
+ clientset, err = kubernetes.NewForConfig(config)
+ if err != nil {
+ return *clientset, err
+ }
+
+ return *clientset, nil
+}
diff --git a/src/k8splugin/krd/krd_test.go b/src/k8splugin/krd/krd_test.go
new file mode 100644
index 00000000..7047a74c
--- /dev/null
+++ b/src/k8splugin/krd/krd_test.go
@@ -0,0 +1,34 @@
+/*
+Copyright 2018 Intel Corporation.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package krd
+
+import (
+ "reflect"
+ "testing"
+)
+
+func TestGetKubeClient(t *testing.T) {
+ t.Run("Successfully create Kube Client", func(t *testing.T) {
+
+ clientset, err := GetKubeClient("../mock_files/mock_configs/mock_config")
+ if err != nil {
+ t.Fatalf("TestGetKubeClient returned an error (%s)", err)
+ }
+
+ if reflect.TypeOf(clientset).Name() != "Clientset" {
+ t.Fatalf("TestGetKubeClient returned :\n result=%v\n expected=%v", clientset, "Clientset")
+ }
+
+ })
+}
diff --git a/src/k8splugin/krd/plugins.go b/src/k8splugin/krd/plugins.go
new file mode 100644
index 00000000..612e3f6b
--- /dev/null
+++ b/src/k8splugin/krd/plugins.go
@@ -0,0 +1,44 @@
+/*
+Copyright 2018 Intel Corporation.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package krd
+
+import (
+ "plugin"
+
+ appsV1 "k8s.io/api/apps/v1"
+ coreV1 "k8s.io/api/core/v1"
+ "k8s.io/client-go/kubernetes"
+)
+
+// LoadedPlugins stores references to the stored plugins
+var LoadedPlugins = map[string]*plugin.Plugin{}
+
+// KubeResourceClient has the signature methods to create Kubernetes reources
+type KubeResourceClient interface {
+ CreateResource(GenericKubeResourceData, *kubernetes.Clientset) (string, error)
+ ListResources(string, string) (*[]string, error)
+ DeleteResource(string, string, *kubernetes.Clientset) error
+ GetResource(string, string, *kubernetes.Clientset) (string, error)
+}
+
+// GenericKubeResourceData stores all supported Kubernetes plugin types
+type GenericKubeResourceData struct {
+ YamlFilePath string
+ Namespace string
+ InternalVNFID string
+
+ // Add additional Kubernetes plugins below kinds
+ DeploymentData *appsV1.Deployment
+ ServiceData *coreV1.Service
+}