2 Copyright 2018 Intel Corporation.
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software
8 distributed under the License is distributed on an "AS IS" BASIS,
9 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 See the License for the specific language governing permissions and
11 limitations under the License.
19 "k8s.io/client-go/kubernetes"
21 pkgerrors "github.com/pkg/errors"
23 coreV1 "k8s.io/api/core/v1"
24 metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29 // Create a service object in a specific Kubernetes cluster
30 func Create(data *krd.ResourceData, client kubernetes.Interface) (string, error) {
31 namespace := data.Namespace
35 obj, err := krd.DecodeYAML(data.YamlFilePath)
37 return "", pkgerrors.Wrap(err, "Decode service object error")
40 service, ok := obj.(*coreV1.Service)
42 return "", pkgerrors.New("Decoded object contains another resource different than Service")
44 service.Namespace = namespace
45 service.Name = data.VnfId + "-" + service.Name
47 result, err := client.CoreV1().Services(namespace).Create(service)
49 return "", pkgerrors.Wrap(err, "Create Service error")
52 return result.GetObjectMeta().GetName(), nil
55 // List of existing services hosted in a specific Kubernetes cluster
56 func List(namespace string, kubeclient kubernetes.Interface) ([]string, error) {
61 opts := metaV1.ListOptions{
62 Limit: krd.ResourcesListLimit,
64 opts.APIVersion = "apps/v1"
67 list, err := kubeclient.CoreV1().Services(namespace).List(opts)
69 return nil, pkgerrors.Wrap(err, "Get Service list error")
72 result := make([]string, 0, krd.ResourcesListLimit)
74 for _, deployment := range list.Items {
75 log.Printf("%v", deployment.Name)
76 result = append(result, deployment.Name)
83 // Delete an existing service hosted in a specific Kubernetes cluster
84 func Delete(name string, namespace string, kubeclient kubernetes.Interface) error {
89 deletePolicy := metaV1.DeletePropagationForeground
90 opts := &metaV1.DeleteOptions{
91 PropagationPolicy: &deletePolicy,
94 log.Println("Deleting service: " + name)
95 if err := kubeclient.CoreV1().Services(namespace).Delete(name, opts); err != nil {
96 return pkgerrors.Wrap(err, "Delete service error")
102 // Get an existing service hosted in a specific Kubernetes cluster
103 func Get(name string, namespace string, kubeclient kubernetes.Interface) (string, error) {
105 namespace = "default"
108 opts := metaV1.GetOptions{}
109 opts.APIVersion = "apps/v1"
110 opts.Kind = "Service"
112 service, err := kubeclient.CoreV1().Services(namespace).Get(name, opts)
114 return "", pkgerrors.Wrap(err, "Get Deployment error")
117 return service.Name, nil