Uniform formatting and volume as hostpath 69/3469/1
authoragrawalgaurav <gaurav.agrawal@huawei.com>
Fri, 15 May 2020 18:51:56 +0000 (00:21 +0530)
committeragrawalgaurav <gaurav.agrawal@huawei.com>
Fri, 15 May 2020 18:51:56 +0000 (00:21 +0530)
Change-Id: I42c843397ecee108ed2514c60c228d6d09b82649

15 files changed:
mecm/mepm/applcm/broker/cmd/broker/main.go
mecm/mepm/applcm/broker/internal/lcmservice/lcmservice.pb.go
mecm/mepm/applcm/broker/pkg/handlers/adapter/dbAdapter/dbAdapter.go
mecm/mepm/applcm/broker/pkg/handlers/adapter/pluginAdapter/pluginAdapter.go
mecm/mepm/applcm/broker/pkg/handlers/handlers.go
mecm/mepm/applcm/broker/pkg/handlers/handlersImpl.go
mecm/mepm/applcm/broker/pkg/plugin/grpcclient.go
mecm/mepm/applcm/broker/pkg/util/logger.go
mecm/mepm/applcm/go.mod [deleted file]
mecm/mepm/applcm/k8shelm/cmd/helm/main.go
mecm/mepm/applcm/k8shelm/internal/lcmservice/lcmservice.pb.go
mecm/mepm/applcm/k8shelm/pkg/plugin/grpcserver.go
mecm/mepm/applcm/k8shelm/pkg/plugin/helmclient.go
mecm/mepm/applcm/k8shelm/pkg/plugin/logger.go
mecm/mepm/applcm/resources/deployment/dbhost.yaml

index c6af362..1783b6f 100644 (file)
@@ -19,18 +19,18 @@ package main
 import (
        "broker/pkg/handlers"
        "broker/pkg/util"
-       "github.com/sirupsen/logrus"
        "os"
+
+       "github.com/sirupsen/logrus"
 )
 
 // Variables to be defined in deployment file
 var (
-       logFile = os.Getenv("LOGFILE_PATH")
-       loggerLevel = os.Getenv("LOGGER_LEVEL")
+       logFile       = os.Getenv("LOGFILE_PATH")
+       loggerLevel   = os.Getenv("LOGGER_LEVEL")
        applcmAddress = os.Getenv("ADDRESS")
 )
 
-
 func main() {
        // Prepare logger
        file, err := os.Create(logFile)
index 9b505f3..3ffd097 100644 (file)
@@ -8,14 +8,15 @@ package lcmservice
 
 import (
        context "context"
+       reflect "reflect"
+       sync "sync"
+
        proto "github.com/golang/protobuf/proto"
        grpc "google.golang.org/grpc"
        codes "google.golang.org/grpc/codes"
        status "google.golang.org/grpc/status"
        protoreflect "google.golang.org/protobuf/reflect/protoreflect"
        protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-       reflect "reflect"
-       sync "sync"
 )
 
 const (
index d2d8ab7..135fd6b 100644 (file)
@@ -17,9 +17,10 @@ package dbAdapter
 
 import (
        "broker/pkg/handlers/model"
+       "os"
+
        "github.com/jinzhu/gorm"
        "github.com/sirupsen/logrus"
-       "os"
 )
 
 // DB name
@@ -42,7 +43,7 @@ func (adapter *DbAdapter) CreateDatabase() {
        usrpswd := os.Getenv("MYSQL_USER") + ":" + os.Getenv("MYSQL_PASSWORD")
        host := "@tcp(" + "dbhost" + ":3306)/"
 
-       db, err := gorm.Open("mysql", usrpswd + host)
+       db, err := gorm.Open("mysql", usrpswd+host)
        if err != nil {
                adapter.logger.Fatalf("Database connect error", err.Error())
        }
@@ -69,7 +70,7 @@ func (adapter *DbAdapter) GetAppInstanceInfo(key string) (appInstInfo model.AppI
        adapter.logger.Infof("Get App Instance Info %s", key)
        var appInstanceInfo model.AppInstanceInfo
        returnVal := adapter.db.First(&appInstanceInfo, "id=?", key).Error
-       if returnVal !=  nil {
+       if returnVal != nil {
                return
        }
 
@@ -114,7 +115,7 @@ func (adapter *DbAdapter) GetAppPackageInfo(key string) (appPackageInfo model.Ap
        adapter.logger.Infof("Get App Package Info: %s", key)
        var appPkgInfo model.AppPackageInfo
        err := adapter.db.First(&appPkgInfo, "id=?", key).Error
-       if err !=  nil {
+       if err != nil {
                return
        }
        return appPkgInfo
index 19983e7..ff3ca99 100644 (file)
@@ -18,20 +18,21 @@ package pluginAdapter
 import (
        "broker/pkg/plugin"
        "context"
-       "github.com/sirupsen/logrus"
        "time"
+
+       "github.com/sirupsen/logrus"
 )
 
 const (
-       chunkSize = 1024
-       rootCertificate  = ""
+       chunkSize       = 1024
+       rootCertificate = ""
 )
 
 // Plugin adapter which decides a specific client based on plugin info
 // TODO PluginInfo to have other information about plugins to find the client and implementation to handle accordingly.
 type PluginAdapter struct {
        pluginInfo string
-       logger *logrus.Logger
+       logger     *logrus.Logger
 }
 
 // Constructor of PluginAdapter
index 0cea2fb..b857d7c 100644 (file)
 package handlers
 
 import (
-       "github.com/gorilla/mux"
-       "github.com/sirupsen/logrus"
        "net/http"
        "os"
+
+       "github.com/gorilla/mux"
+       "github.com/sirupsen/logrus"
 )
 
 // URLS
 const (
-       CreateAppInstance = "/ealtedge/mepm/app_lcm/v1/app_instances"
-    InstantiateAppInstance = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}/instantiate"
-    QueryAppInstanceInfo = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}"
-    QueryAppLcmOperationStatus = "/ealtedge/mepm/app_lcm/v1/app_lcm_op_occs"
-    TerminateAppIns = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}/terminate"
-    DeleteAppInstanceIdentifier = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}"
-    OnboardPackage = "/ealtedge/mepm/app_pkgm/v1/app_packages"
-    QueryOnboardPackage = "/ealtedge/mepm/app_pkgm/v1/app_packages/{appPkgId}"
+       CreateAppInstance           = "/ealtedge/mepm/app_lcm/v1/app_instances"
+       InstantiateAppInstance      = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}/instantiate"
+       QueryAppInstanceInfo        = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}"
+       QueryAppLcmOperationStatus  = "/ealtedge/mepm/app_lcm/v1/app_lcm_op_occs"
+       TerminateAppIns             = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}/terminate"
+       DeleteAppInstanceIdentifier = "/ealtedge/mepm/app_lcm/v1/app_instances/{appInstanceId}"
+       OnboardPackage              = "/ealtedge/mepm/app_pkgm/v1/app_packages"
+       QueryOnboardPackage         = "/ealtedge/mepm/app_pkgm/v1/app_packages/{appPkgId}"
 )
 
 var (
-       PackageFolderPath = os.Getenv("PACKAGE_PATH")
+       PackageFolderPath   = os.Getenv("PACKAGE_PATH")
        PackageArtifactPath = os.Getenv("PACKAGE_ARTIFACT_PATH")
 )
 
index 243bfab..6867b2c 100644 (file)
@@ -23,6 +23,13 @@ import (
        "bytes"
        "encoding/json"
        "fmt"
+       "io"
+       "io/ioutil"
+       "net/http"
+       "os"
+       "path/filepath"
+       "strings"
+
        "github.com/buger/jsonparser"
        "github.com/ghodss/yaml"
        "github.com/google/uuid"
@@ -30,18 +37,12 @@ import (
        "github.com/sirupsen/logrus"
        "google.golang.org/grpc/codes"
        "google.golang.org/grpc/status"
-       "io"
-       "io/ioutil"
-       "net/http"
-       "os"
-       "path/filepath"
-       "strings"
 )
 
 // Handler of REST APIs
 type HandlerImpl struct {
-       logger     *logrus.Logger
-       dbAdapter  *dbAdapter.DbAdapter
+       logger    *logrus.Logger
+       dbAdapter *dbAdapter.DbAdapter
 }
 
 // Creates handler implementation
index 2c3bb28..e778367 100644 (file)
@@ -18,13 +18,14 @@ package plugin
 
 import (
        "broker/internal/lcmservice"
+       "io"
+       "os"
+
        "github.com/sirupsen/logrus"
        "golang.org/x/net/context"
        "google.golang.org/grpc"
        "google.golang.org/grpc/credentials"
        _ "google.golang.org/grpc/encoding/gzip"
-       "io"
-       "os"
 )
 
 // GRPC client to different GRPC supported plugins
@@ -89,7 +90,7 @@ func (c *ClientGRPC) Instantiate(ctx context.Context, deployArtifact string, hos
        file, err := os.Open(deployArtifact)
        if err != nil {
                c.logger.Errorf("failed to open package file: %s. Err: %s", deployArtifact, err.Error())
-               return "","Failure", err
+               return "", "Failure", err
        }
        defer file.Close()
 
@@ -99,7 +100,7 @@ func (c *ClientGRPC) Instantiate(ctx context.Context, deployArtifact string, hos
 
        if err != nil {
                c.logger.Errorf("failed to upload stream: %s. Err: %s", deployArtifact, err.Error())
-               return "","Failure", err
+               return "", "Failure", err
        }
        defer stream.CloseSend()
 
@@ -107,14 +108,14 @@ func (c *ClientGRPC) Instantiate(ctx context.Context, deployArtifact string, hos
        req := &lcmservice.InstantiateRequest{
 
                Data: &lcmservice.InstantiateRequest_HostIp{
-                       HostIp:  hostIP,
+                       HostIp: hostIP,
                },
        }
 
        err = stream.Send(req)
        if err != nil {
                c.logger.Errorf("failed to send metadata information: ", deployArtifact)
-               return "","Failure", err
+               return "", "Failure", err
        }
 
        // Allocate a buffer with `chunkSize` as the capacity
@@ -132,11 +133,11 @@ func (c *ClientGRPC) Instantiate(ctx context.Context, deployArtifact string, hos
                                continue
                        }
                        c.logger.Errorf("errored while copying from file to buf: ", err)
-                       return "","Failure", err
+                       return "", "Failure", err
                }
 
-               req := &lcmservice.InstantiateRequest {
-                       Data: &lcmservice.InstantiateRequest_Package {
+               req := &lcmservice.InstantiateRequest{
+                       Data: &lcmservice.InstantiateRequest_Package{
                                Package: buf[:n],
                        },
                }
@@ -145,14 +146,14 @@ func (c *ClientGRPC) Instantiate(ctx context.Context, deployArtifact string, hos
 
                if err != nil {
                        c.logger.Errorf("failed to send chunk via stream: ", err)
-                       return "","Failure", err
+                       return "", "Failure", err
                }
        }
 
        res, err := stream.CloseAndRecv()
        if err != nil {
                c.logger.Errorf("failed to receive upstream status response: ", err)
-               return "","Failure", err
+               return "", "Failure", err
        }
        c.logger.Infof("Instantiation Completed with workloadId %s and status", res.GetWorkloadId(), res.GetStatus())
        return res.GetWorkloadId(), res.GetStatus(), err
@@ -162,7 +163,7 @@ func (c *ClientGRPC) Instantiate(ctx context.Context, deployArtifact string, hos
 func (c *ClientGRPC) Query(ctx context.Context, hostIP string, workloadId string) (status string, error error) {
 
        req := &lcmservice.QueryRequest{
-               HostIp: hostIP,
+               HostIp:     hostIP,
                WorkloadId: workloadId,
        }
        resp, err := c.client.Query(ctx, req)
@@ -176,7 +177,7 @@ func (c *ClientGRPC) Query(ctx context.Context, hostIP string, workloadId string
 func (c *ClientGRPC) Terminate(ctx context.Context, hostIP string, workloadId string) (status string, error error) {
 
        req := &lcmservice.TerminateRequest{
-               HostIp: hostIP,
+               HostIp:     hostIP,
                WorkloadId: workloadId,
        }
        resp, err := c.client.Terminate(ctx, req)
@@ -190,4 +191,4 @@ func (c *ClientGRPC) Close() {
        if c.conn != nil {
                c.conn.Close()
        }
-}
\ No newline at end of file
+}
index ba2df97..16173d0 100644 (file)
@@ -16,8 +16,9 @@
 package util
 
 import (
-       "github.com/sirupsen/logrus"
        "os"
+
+       "github.com/sirupsen/logrus"
 )
 
 func GetLogger(logFile string, loggerLevel logrus.Level, file *os.File) *logrus.Logger {
@@ -31,4 +32,4 @@ func GetLogger(logFile string, loggerLevel logrus.Level, file *os.File) *logrus.
        logger.SetLevel(loggerLevel)
        logger.Infof("logger created")
        return logger
-}
\ No newline at end of file
+}
diff --git a/mecm/mepm/applcm/go.mod b/mecm/mepm/applcm/go.mod
deleted file mode 100644 (file)
index 11de177..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-module applcm
-
-go 1.14
index e2ba78b..84b2a12 100644 (file)
 package main
 
 import (
-       "github.com/sirupsen/logrus"
        "k8shelm/pkg/plugin"
        "os"
        "strconv"
+
+       "github.com/sirupsen/logrus"
 )
 
 // Variables to be defined in deployment file
 var (
-       serverPort = os.Getenv("HELM_PLUGIN_PORT")
-       logFile = os.Getenv("LOGFILE_PATH")
+       serverPort  = os.Getenv("HELM_PLUGIN_PORT")
+       logFile     = os.Getenv("LOGFILE_PATH")
        loggerLevel = os.Getenv("LOGGER_LEVEL")
        certificate = os.Getenv("CERTIFICATE_PATH")
-       key = os.Getenv("KEY_PATH")
+       key         = os.Getenv("KEY_PATH")
 )
 
 func main() {
@@ -45,7 +46,7 @@ func main() {
 
        // Create GRPC server
        sp, err := strconv.Atoi(serverPort)
-       serverConfig := plugin.ServerGRPCConfig{Certificate: certificate, Port:sp, Key:key, Logger:logger}
+       serverConfig := plugin.ServerGRPCConfig{Certificate: certificate, Port: sp, Key: key, Logger: logger}
        server := plugin.NewServerGRPC(serverConfig)
 
        // Start listening
index f8f9f52..bc75e6e 100644 (file)
@@ -8,14 +8,15 @@ package lcmservice
 
 import (
        context "context"
+       reflect "reflect"
+       sync "sync"
+
        proto "github.com/golang/protobuf/proto"
        grpc "google.golang.org/grpc"
        codes "google.golang.org/grpc/codes"
        status "google.golang.org/grpc/status"
        protoreflect "google.golang.org/protobuf/reflect/protoreflect"
        protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-       reflect "reflect"
-       sync "sync"
 )
 
 const (
index 00bbb1c..d2b4d4a 100644 (file)
@@ -18,17 +18,18 @@ package plugin
 import (
        "bytes"
        "context"
+       "io"
+       "k8shelm/internal/lcmservice"
+       "net"
+       "os"
+       "strconv"
+
        "github.com/sirupsen/logrus"
        "google.golang.org/grpc"
        "google.golang.org/grpc/codes"
        "google.golang.org/grpc/credentials"
        _ "google.golang.org/grpc/encoding/gzip"
        "google.golang.org/grpc/status"
-       "io"
-       "k8shelm/internal/lcmservice"
-       "net"
-       "os"
-       "strconv"
 )
 
 // GRPC server
@@ -109,13 +110,13 @@ func (s *ServerGRPC) Query(ctx context.Context, req *lcmservice.QueryRequest) (r
        // Create HELM Client
        hc, err := NewHelmClient(req.GetHostIp(), s.logger)
        if os.IsNotExist(err) {
-               return nil, s.logError(status.Errorf(codes.InvalidArgument, "Kubeconfig corresponding to given Edge can't be found. " +
+               return nil, s.logError(status.Errorf(codes.InvalidArgument, "Kubeconfig corresponding to given Edge can't be found. "+
                        "Err: %s", err))
        }
 
        // Query Chart
        r, err := hc.queryChart(req.GetWorkloadId())
-       if (err != nil) {
+       if err != nil {
                return nil, s.logError(status.Errorf(codes.NotFound, "Chart not found for workloadId: %s. Err: %s",
                        req.GetWorkloadId(), err))
        }
@@ -135,14 +136,14 @@ func (s *ServerGRPC) Terminate(ctx context.Context, req *lcmservice.TerminateReq
        // Create HELM client
        hc, err := NewHelmClient(req.GetHostIp(), s.logger)
        if os.IsNotExist(err) {
-               return nil, s.logError(status.Errorf(codes.InvalidArgument, "Kubeconfig corresponding to given Edge can't be found. " +
+               return nil, s.logError(status.Errorf(codes.InvalidArgument, "Kubeconfig corresponding to given Edge can't be found. "+
                        "Err: %s", err))
        }
 
        // Uninstall chart
        err = hc.uninstallChart(req.GetWorkloadId())
 
-       if (err != nil) {
+       if err != nil {
                resp = &lcmservice.TerminateResponse{
                        Status: "Failure",
                }
@@ -170,7 +171,7 @@ func (s *ServerGRPC) Instantiate(stream lcmservice.AppLCM_InstantiateServer) (er
        s.logger.Infof("Recieved instantiate request")
 
        // Host validation
-       if (hostIP == "") {
+       if hostIP == "" {
                return s.logError(status.Errorf(codes.InvalidArgument, "HostIP & WorkloadId can't be null", err))
        }
 
@@ -207,7 +208,7 @@ func (s *ServerGRPC) Instantiate(stream lcmservice.AppLCM_InstantiateServer) (er
        // Create HELM client
        hc, err := NewHelmClient(req.GetHostIp(), s.logger)
        if os.IsNotExist(err) {
-               return s.logError(status.Errorf(codes.InvalidArgument, "Kubeconfig corresponding to edge can't be found. " +
+               return s.logError(status.Errorf(codes.InvalidArgument, "Kubeconfig corresponding to edge can't be found. "+
                        "Err: %s", err))
        }
 
@@ -216,7 +217,7 @@ func (s *ServerGRPC) Instantiate(stream lcmservice.AppLCM_InstantiateServer) (er
        var res lcmservice.InstantiateResponse
        res.WorkloadId = relName
 
-       if (err != nil) {
+       if err != nil {
                res.Status = "Failure"
                s.logger.Infof("Instantiation Failed")
        } else {
@@ -247,4 +248,4 @@ func (s *ServerGRPC) logError(err error) error {
                s.logger.Errorf("Error Information: ", err)
        }
        return err
-}
\ No newline at end of file
+}
index 2ec2328..d756ef9 100644 (file)
@@ -19,26 +19,26 @@ package plugin
 import (
        "bytes"
        "fmt"
+       "os"
+
        "github.com/sirupsen/logrus"
        "helm.sh/helm/v3/pkg/action"
        "helm.sh/helm/v3/pkg/chart/loader"
        "helm.sh/helm/v3/pkg/kube"
-       "os"
 )
 
 // Variables to be defined in deployment file
 var (
-       chartPath = os.Getenv("CHART_PATH")
-       kubeconfigPath = os.Getenv("KUBECONFIG_DIR_PATH")
+       chartPath        = os.Getenv("CHART_PATH")
+       kubeconfigPath   = os.Getenv("KUBECONFIG_DIR_PATH")
        releaseNamespace = os.Getenv("RELEASE_NAMESPACE")
 )
 
-
 // Helm client
 type HelmClient struct {
-       hostIP string
+       hostIP     string
        kubeconfig string
-       logger *logrus.Logger
+       logger     *logrus.Logger
 }
 
 // Constructor of helm client for a given host IP
@@ -48,7 +48,7 @@ func NewHelmClient(hostIP string, logger *logrus.Logger) (*HelmClient, error) {
        if exists {
                return &HelmClient{hostIP: hostIP, kubeconfig: kubeconfigPath + hostIP, logger: logger}, nil
        } else {
-               logger.Errorf("No file exist with name: %s. Err: %s", kubeconfigPath + hostIP)
+               logger.Errorf("No file exist with name: %s. Err: %s", kubeconfigPath+hostIP)
                return nil, err
        }
 }
@@ -60,7 +60,7 @@ func (hc *HelmClient) installChart(helmPkg bytes.Buffer) (string, error) {
        // Create temporary file to hold helm chart
        file, err := os.Create(chartPath + "temp.tar.gz")
        if err != nil {
-               hc.logger.Errorf("Unable to create file: %s. Err: %s", chartPath + "temp.tar.gz", err)
+               hc.logger.Errorf("Unable to create file: %s. Err: %s", chartPath+"temp.tar.gz", err)
                return "", err
        }
        defer os.Remove(chartPath + "temp.tar.gz")
@@ -68,14 +68,14 @@ func (hc *HelmClient) installChart(helmPkg bytes.Buffer) (string, error) {
        // Write input bytes to temp file
        _, err = helmPkg.WriteTo(file)
        if err != nil {
-               hc.logger.Errorf("Unable to write to file: %s. Err: %s", chartPath + "temp.tar.gz", err)
+               hc.logger.Errorf("Unable to write to file: %s. Err: %s", chartPath+"temp.tar.gz", err)
                return "", err
        }
 
        // Load the file to chart
        chart, err := loader.Load(chartPath + "temp.tar.gz")
        if err != nil {
-               hc.logger.Errorf("Unable to load chart from file: %s. Err: %s", chartPath + "temp.tar.gz", err)
+               hc.logger.Errorf("Unable to load chart from file: %s. Err: %s", chartPath+"temp.tar.gz", err)
                return "", err
        }
 
@@ -106,7 +106,7 @@ func (hc *HelmClient) installChart(helmPkg bytes.Buffer) (string, error) {
 }
 
 // Un-Install a given helm chart
-func (hc *HelmClient) uninstallChart(relName string) (error) {
+func (hc *HelmClient) uninstallChart(relName string) error {
        // Prepare action config and uninstall chart
        actionConfig := new(action.Configuration)
        if err := actionConfig.Init(kube.GetConfig(hc.kubeconfig, "", releaseNamespace), releaseNamespace,
@@ -118,7 +118,7 @@ func (hc *HelmClient) uninstallChart(relName string) (error) {
        }
 
        ui := action.NewUninstall(actionConfig)
-       res, err := ui.Run(relName);
+       res, err := ui.Run(relName)
        if err != nil {
                hc.logger.Errorf("Unable to uninstall chart with release name: %s. Err: %s", relName, err)
                return err
@@ -128,7 +128,7 @@ func (hc *HelmClient) uninstallChart(relName string) (error) {
 }
 
 // Query a given chart
-func (hc *HelmClient) queryChart(relName string) (string, error)  {
+func (hc *HelmClient) queryChart(relName string) (string, error) {
        actionConfig := new(action.Configuration)
        if err := actionConfig.Init(kube.GetConfig(hc.kubeconfig, "", releaseNamespace), releaseNamespace,
                os.Getenv("HELM_DRIVER"), func(format string, v ...interface{}) {
@@ -154,4 +154,4 @@ func fileExists(filename string) (bool, error) {
                return false, err
        }
        return !info.IsDir(), nil
-}
\ No newline at end of file
+}
index 919a4d2..4cebdb6 100644 (file)
@@ -16,8 +16,9 @@
 package plugin
 
 import (
-       "github.com/sirupsen/logrus"
        "os"
+
+       "github.com/sirupsen/logrus"
 )
 
 func GetLogger(logFile string, loggerLevel logrus.Level, file *os.File) *logrus.Logger {
@@ -31,4 +32,4 @@ func GetLogger(logFile string, loggerLevel logrus.Level, file *os.File) *logrus.
        logger.SetLevel(loggerLevel)
        logger.Infof("logger created")
        return logger
-}
\ No newline at end of file
+}
index 66a6370..52df5d1 100644 (file)
@@ -51,8 +51,10 @@ spec:
               name: my-db
       volumes:
         - name: my-db
-          persistentVolumeClaim:
-            claimName: my-db
+          hostPath:
+            # data folder needs to be created in host machine
+            path: /data
+
 # dbhost service
 ---
 apiVersion: v1