diff options
Diffstat (limited to 'mock-sdc')
-rw-r--r-- | mock-sdc/.dockerignore | 16 | ||||
-rw-r--r-- | mock-sdc/Dockerfile | 33 | ||||
-rw-r--r-- | mock-sdc/README.md | 2 | ||||
-rw-r--r-- | mock-sdc/generic_handlers.go | 32 | ||||
-rw-r--r-- | mock-sdc/mock-sdc.go | 71 | ||||
-rw-r--r-- | mock-sdc/resource_handlers.go | 1379 | ||||
-rw-r--r-- | mock-sdc/sdc_handlers.go | 210 | ||||
-rw-r--r-- | mock-sdc/vendor_handlers.go | 185 | ||||
-rw-r--r-- | mock-sdc/vsp_handlers.go | 418 |
9 files changed, 2346 insertions, 0 deletions
diff --git a/mock-sdc/.dockerignore b/mock-sdc/.dockerignore new file mode 100644 index 0000000..53b2e85 --- /dev/null +++ b/mock-sdc/.dockerignore @@ -0,0 +1,16 @@ +# Binaries for programs and plugins +mock-sdc +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ diff --git a/mock-sdc/Dockerfile b/mock-sdc/Dockerfile new file mode 100644 index 0000000..524c178 --- /dev/null +++ b/mock-sdc/Dockerfile @@ -0,0 +1,33 @@ +FROM golang:alpine AS builder + +# Add all the source code (except what's ignored +# under `.dockerignore`) to the build context. +ADD ./ /go/src/ + +WORKDIR /go/src + +RUN apk add --no-cache git +RUN go env -w GO111MODULE=auto +RUN go get github.com/satori/go.uuid +RUN go get github.com/labstack/echo +RUN go get github.com/golang-jwt/jwt +RUN go get golang.org/x/time/rate + +RUN set -ex && \ + CGO_ENABLED=0 GOOS=linux go build \ + -tags netgo \ + -installsuffix cgo \ + -v -a \ + -ldflags '-extldflags "-static"' \ + -o mock-sdc . + +RUN ls -la + +FROM scratch + +# Retrieve the binary from the previous stage +COPY --from=builder /go/src/mock-sdc /app/mock-sdc +WORKDIR /app + +# Set the binary as the entrypoint of the container +ENTRYPOINT [ "./mock-sdc" ] diff --git a/mock-sdc/README.md b/mock-sdc/README.md new file mode 100644 index 0000000..ae7ae66 --- /dev/null +++ b/mock-sdc/README.md @@ -0,0 +1,2 @@ +# mock-sdc + diff --git a/mock-sdc/generic_handlers.go b/mock-sdc/generic_handlers.go new file mode 100644 index 0000000..a24cb45 --- /dev/null +++ b/mock-sdc/generic_handlers.go @@ -0,0 +1,32 @@ +// Copyright 2023 Deutsche Telekom AG, Orange +// +// 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 main + +import ( + "net/http" + + "github.com/labstack/echo" +) + +func index(c echo.Context) error { + return c.String(http.StatusOK, "Hello, World!") +} + +func reset(c echo.Context) error { + generateInitialVendorList() + generateInitialVspList() + generateInitialResourceList() + return c.String(http.StatusCreated, "reset done!") +} diff --git a/mock-sdc/mock-sdc.go b/mock-sdc/mock-sdc.go new file mode 100644 index 0000000..0b53afe --- /dev/null +++ b/mock-sdc/mock-sdc.go @@ -0,0 +1,71 @@ +// Copyright 2023 Deutsche Telekom AG, Orange +// +// 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 main + +import ( + "github.com/labstack/echo" + "github.com/labstack/echo/middleware" + "github.com/labstack/gommon/log" +) + +func main() { + e := echo.New() + e.Use(middleware.Logger()) + e.Logger.SetLevel(log.DEBUG) + e.GET("/", index) + e.GET("/sdc1/feProxy/onboarding-api/v1.0/items/:itemID/versions", getItemVersions) + e.GET("/sdc1/feProxy/onboarding-api/v1.0/items/:itemID/versions/:versionID", getItemVersion) + e.PUT("/sdc1/feProxy/onboarding-api/v1.0/items/:itemID/versions/:versionID/actions", updateItemVersion) + e.GET("/sdc1/feProxy/onboarding-api/v1.0/vendor-license-models", getVendorServiceModels) + e.POST("/sdc1/feProxy/onboarding-api/v1.0/vendor-license-models", postVendorServiceModels) + e.PUT("/sdc1/feProxy/onboarding-api/v1.0/vendor-license-models/:vendorID/versions/:versionID/actions", updateVendorVersion) + e.GET("/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products", getVendorSoftwareProducts) + e.POST("/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products", postVendorSoftwareProducts) + e.GET("/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/:vspID/versions/:versionID", getVspVersion) + e.PUT("/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/:vspID/versions/:versionID/actions", updateVspVersion) + e.POST("/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/:vspID/versions/:versionID/orchestration-template-candidate", uploadArtifacts) + e.PUT("/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/:vspID/versions/:versionID/orchestration-template-candidate/process", validateArtifacts) + e.GET("/sdc1/feProxy/rest/v1/followed", getAllResources) + e.GET("/sdc1/feProxy/rest/v1/screen", getAllResources) + e.GET("/sdc/v1/catalog/resources", getResources) + e.GET("/sdc/v1/catalog/services", getServices) + e.GET("/sdc/v1/artifactTypes", getArtifactTypes) + e.GET("/sdc/v1/distributionKafkaData", distributionKafkaData) + e.POST("/sdc/v1/registerForDistribution", registerForDistribution) + e.POST("/sdc/v1/unRegisterForDistribution", unRegisterForDistribution) + e.POST("/sdc1/feProxy/rest/v1/catalog/resources", postResources) + e.POST("/sdc1/feProxy/rest/v1/catalog/resources/:resourceID/lifecycleState/:action", postResourceAction) + e.POST("/sdc1/feProxy/rest/v1/catalog/services", postResources) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/resourceInstance", postAddResourceToService) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/lifecycleState/:action", postResourceAction) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/distribution-state/:action", postResourceAction) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/distribution/PROD/:action", postResourceAction) + e.GET("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/distribution", getDistribution) + e.GET("/sdc1/feProxy/rest/v1/catalog/services/distribution/:distributionID", getDistributionList) + e.GET("/sdc1/feProxy/rest/v1/catalog/services/:resourceID", getServiceUniqueIdentifier) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/resourceInstance/:vfID/artifacts", uploadTcaArtifact) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/properties", postResourceProperties) + e.POST("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/create/inputs", postResourceInputs) + e.POST("/sdc1/feProxy/rest/v1/catalog/resources/:resourceID/create/inputs", postResourceInputs) + e.GET("/sdc1/feProxy/rest/v1/catalog/resources/:resourceID/filteredDataByParams", getResourcefilteredData) + e.GET("/sdc1/feProxy/rest/v1/catalog/services/:resourceID/filteredDataByParams", getResourcefilteredData) + e.GET("/sdc1/feProxy/rest/v1/setup/ui", getCategories) + e.POST("/reset", reset) + generateInitialVendorList() + generateInitialVspList() + generateInitialResourceList() + generateDistributionStatusList() + e.Logger.Fatal(e.Start(":30206")) +} diff --git a/mock-sdc/resource_handlers.go b/mock-sdc/resource_handlers.go new file mode 100644 index 0000000..53aa98f --- /dev/null +++ b/mock-sdc/resource_handlers.go @@ -0,0 +1,1379 @@ +// Copyright 2023 Deutsche Telekom AG, Orange +// +// 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 main + +import ( + "container/list" + "encoding/json" + "net/http" + "errors" + "io/ioutil" + + "github.com/labstack/echo" + uuid "github.com/satori/go.uuid" +) + +// ResourceLight describes license model in SDC +type ResourceLight struct { + ID string `json:"uuid"` + InvariantID string `json:"invariantUUID"` + ResourceType string `json:"resourceType"` + Name string `json:"name"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + LastUpdaterUserID string `json:"lastUpdaterUserId"` + LifecycleState string `json:"lifecycleState"` + Version string `json:"version"` + ToscaModelURL string `json:"toscaModelURL"` + DistributionStatus string `json:"distributionStatus"` +} + +// SubCategory describes SubCategory model in SDC +type SubCategory struct { + Name string `json:"name"` + NormalizedName string `json:"normalizedName"` + UniqueID string `json:"uniqueId"` + Icons []string `json:"icons"` + Groupings string `json:"groupings"` + OwnerID string `json:"ownerId"` + Empty bool `json:"empty"` + Version string `json:"version"` + Type string `json:"type"` +} + +// Category describes Category model in SDC +type Category struct { + Name string `json:"name"` + NormalizedName string `json:"normalizedName"` + UniqueID string `json:"uniqueId"` + Icons []string `json:"icons"` + Subcategories []SubCategory `json:"subcategories"` + OwnerID string `json:"ownerId"` + Empty bool `json:"empty"` + Type string `json:"type"` + Version string `json:"version"` +} + +//ArtifactAdd Describes ressource component Instances artifacts in SDC +type ArtifactAdd struct { + ArtifactName string `json:"artifactName"` + ArtifactLabel string `json:"artifactLabel"` + ArtifactType string `json:"artifactType"` + Description string `json:"description"` +} + +//ComponentInstance Describes ressource component Instances in SDC +type ComponentInstance struct { + UniqueID string `json:"uniqueId"` + Name string `json:"name"` + ComponentName string `json:"componentName"` + OriginType string `json:"originType"` + ComponentVersion string `json:"componentVersion"` + DeploymentArtifacts []ArtifactAdd `json:"deploymentArtifacts"` +} + +// Resource describes Resource model in SDC +type Resource struct { + ID string `json:"uuid"` + InvariantID string `json:"invariantUUID"` + UniqueID string `json:"uniqueId"` + ResourceType string `json:"resourceType"` + Name string `json:"name"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + LastUpdaterUserID string `json:"lastUpdaterUserId"` + LifecycleState string `json:"lifecycleState"` + Version string `json:"version"` + ToscaModelURL string `json:"toscaModelURL"` + Artifacts struct{} `json:"artifacts"` + Attributes []string `json:"attributes"` + Capabilities struct{} `json:"capabilities"` + Categories []Category `json:"categories"` + ComponentInstances []ComponentInstance `json:"componentInstances"` + ComponentInstancesAttributes struct{} `json:"componentInstancesAttributes"` + ComponentInstancesProperties struct{} `json:"componentInstancesProperties"` + ComponentType string `json:"componentType"` + ContactID string `json:"contactId"` + CsarUUID string `json:"csarUUID"` + CsarVersion string `json:"csarVersion"` + DeploymentArtifacts struct{} `json:"deploymentArtifacts"` + Description string `json:"description"` + Icon string `json:"icon"` + Properties []Property `json:"properties"` + Requirements struct{} `json:"requirements"` + Tags []string `json:"tags"` + ToscaArtifacts struct{} `json:"toscaArtifacts"` + VendorName string `json:"vendorName"` + VendorRelease string `json:"vendorRelease"` + DistributionStatus string `json:"distributionStatus"` + DistributionID string `json:"distributionID"` + Inputs []Input +} + +// ResourceList is the way to return Resources in SDC via DeepLoad +type ResourceList struct { + Resources []Resource `json:"resources"` + Services []Resource `json:"services"` +} + +// ActionBody yolo +type ActionBody struct { + UserRemarks string `json:"userRemarks"` +} + +// ResourceAdd to a Service +type ResourceAdd struct { + Name string `json:"name"` + ComponentVersion string `json:"componentVersion"` + PosY int `json:"posY"` + PosX int `json:"posX"` + UniqueID string `json:"uniqueId"` + OriginType string `json:"originType"` + ComponentUID string `json:"componentUid"` + Icon string `json:"icon"` +} + +// DistributionIDResult format +type DistributionIDResult struct { + DistributionID string `json:"distributionID"` + UserID string `json:"userId"` + DeployementStatus string `json:"deployementStatus"` +} + +// DistributionIDList format +type DistributionIDList struct { + DistributionStatusOfServiceList []DistributionIDResult `json:"distributionStatusOfServiceList"` +} + +//DistributionStatus format +type DistributionStatus struct { + OmfComponentID string `json:"omfComponentID"` + Timestamp string `json:"timestamp"` + URL string `json:"url"` + Status string `json:"status"` + ErrorReason string `json:"errorReason"` +} + +// DistributionStatusList format +type DistributionStatusList struct { + DistributionStatusList []DistributionStatus `json:"distributionStatusList"` +} + +// NewUploadResult format +type NewUploadResult struct { + Description string `json:"description"` + ArtifactType string `json:"artifactType"` + ArtifactName string `json:"artifactName"` +} + +//Property format +type Property struct { + Name string `json:"name"` + Value string `json:"value"` + Type string `json:"type"` + UniqueID string `json:"uniqueId"` + ParentUniqueID string `json:"parentUniqueId"` +} + +//Input format +type Input struct { + Name string `json:"name"` + Value string `json:"value"` + Type string `json:"type"` + UniqueID string `json:"uniqueId"` +} + +var resourceList []Resource +var distributionList []DistributionStatus + +func generateInitialResourceList() { + resourceList = nil + resourceList = append(resourceList, Resource{ + ID: "6c4952d2-0ecc-4697-a039-d9766565feae", + InvariantID: "803cbaf5-deea-4022-a731-709d285435d6", + UniqueID: "1e6e90ec-632a-492f-9511-f2787a2befaf", + ResourceType: "Configuration", + Name: "VLAN Network Receptor Configuration", + Category: "Configuration", + SubCategory: "Configuration", + LastUpdaterUserID: "jh0003", + LifecycleState: "CERTIFIED", + Version: "1.0", + ToscaModelURL: "/sdc/v1/catalog/resources/6c4952d2-0ecc-4697-a039-d9766565feae/toscaModel", + }) + resourceList = append(resourceList, Resource{ + ID: "85a9a912-b0ca-4cc9-9dc4-a480546ef93b", + InvariantID: "2df7615c-38f5-45e2-ac40-f9a8f97baec2", + UniqueID: "1e6e90ec-632a-492f-9511-f2787a2befaf", + ResourceType: "CP", + Name: "contrailV2VLANSubInterfaceV2", + Category: "Generic", + SubCategory: "Network Elements", + LastUpdaterUserID: "jh0003", + LifecycleState: "CERTIFIED", + Version: "1.0", + ToscaModelURL: "/sdc/v1/catalog/resources/85a9a912-b0ca-4cc9-9dc4-a480546ef93b/toscaModel", + }) + resourceList = append(resourceList, Resource{ + ID: "7c6b6644-590d-4e60-84d7-0dfba3ad4694", + InvariantID: "1e6e90ec-632a-492f-9511-f2787a2bef9f", + UniqueID: "1e6e90ec-632a-492f-9511-f2787a2befaf", + ResourceType: "VFC", + Name: "VDU Compute", + Category: "Generic", + SubCategory: "Infrastructure", + LastUpdaterUserID: "jh0003", + LifecycleState: "CERTIFIED", + Version: "1.0", + ToscaModelURL: "/sdc/v1/catalog/resources/7c6b6644-590d-4e60-84d7-0dfba3ad4694/toscaModel", + }) + resourceList = append(resourceList, Resource{ + ID: "9391354f-8f25-462d-b331-841e6cc5c851", + InvariantID: "85cd3f14-cb9c-4a28-811b-d076e9a48303", + UniqueID: "1e6e90ec-632a-492f-9511-f2787a2befaf", + ResourceType: "VFC", + Name: "Cp", + Category: "Generic", + SubCategory: "Infrastructure", + LastUpdaterUserID: "jh0003", + LifecycleState: "CERTIFIED", + Version: "1.0", + ToscaModelURL: "/sdc/v1/catalog/resources/9391354f-8f25-462d-b331-841e6cc5c851/toscaModel", + }) +} + +func getResources(c echo.Context) error { + resourceType := c.QueryParam("resourceType") + resources := []ResourceLight{} + for _, r := range resourceList { + if (r.ComponentType != "SERVICE") && + ((resourceType == "") || (r.ResourceType == resourceType)) { + resources = append(resources, ResourceLight{ + ID: r.ID, + InvariantID: r.InvariantID, + ResourceType: r.ResourceType, + Name: r.Name, + Category: r.Category, + SubCategory: r.SubCategory, + LastUpdaterUserID: r.LastUpdaterUserID, + LifecycleState: r.LifecycleState, + Version: r.Version, + ToscaModelURL: r.ToscaModelURL, + }) + } + } + if len(resources) != 0 { + return c.JSON(http.StatusOK, resources) + } + return c.JSON(http.StatusNotFound, SdcError{ + Message: "No Resources found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func getServices(c echo.Context) error { + resources := []ResourceLight{} + for _, r := range resourceList { + if r.ComponentType == "SERVICE" { + resources = append(resources, ResourceLight{ + ID: r.ID, + InvariantID: r.InvariantID, + ResourceType: r.ResourceType, + Name: r.Name, + Category: r.Category, + SubCategory: r.SubCategory, + LastUpdaterUserID: r.LastUpdaterUserID, + LifecycleState: r.LifecycleState, + Version: r.Version, + ToscaModelURL: r.ToscaModelURL, + DistributionStatus: r.DistributionStatus, + }) + } + } + if len(resources) != 0 { + return c.JSON(http.StatusOK, resources) + } + return c.JSON(http.StatusNotFound, SdcError{ + Message: "No Resources found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func postResources(c echo.Context) error { + resource := new(Resource) + if err := c.Bind(resource); err != nil { + return err + } + for _, r := range resourceList { + if resource.Name == r.Name && r.ResourceType == resource.ResourceType { + return c.JSON(http.StatusBadRequest, SdcError{ + Message: "Resource of same Name and ResourceType exists", + ErrorCode: "SVC3642", + Status: "Exists"}) + } + } + resource.ID = uuid.Must(uuid.NewV4()).String() + resource.InvariantID = uuid.Must(uuid.NewV4()).String() + resource.UniqueID = uuid.Must(uuid.NewV4()).String() + resource.Version = "0.1" + resource.LifecycleState = "NOT_CERTIFIED_CHECKOUT" + resource.DistributionStatus = "DISTRIBUTION_NOT_APPROVED" + + resourceList = append(resourceList, *resource) + + return c.JSON(http.StatusCreated, resource) +} + +func postResourceAction(c echo.Context) error { + resourceID := c.Param("resourceID") + action := c.Param("action") + actionBody := new(ActionBody) + if err := c.Bind(actionBody); err != nil { + return err + } + for i, r := range resourceList { + if r.UniqueID == resourceID { + if r.LifecycleState == "NOT_CERTIFIED_CHECKOUT" && action == "Certify" { + resourceList[i].Version = "1.0" + resourceList[i].LifecycleState = "CERTIFIED" + return c.JSON(http.StatusCreated, resourceList[i]) + } + if r.LifecycleState == "NOT_CERTIFIED_CHECKOUT" && action == "checkin" { + resourceList[i].LifecycleState = "NOT_CERTIFIED_CHECKIN" + return c.JSON(http.StatusOK, resourceList[i]) + } + if r.LifecycleState == "NOT_CERTIFIED_CHECKIN" && action == "Certify" { + resourceList[i].LifecycleState = "CERTIFIED" + resourceList[i].Version = "1.0" + resourceList[i].DistributionStatus = "DISTRIBUTION_APPROVED" + return c.JSON(http.StatusOK, resourceList[i]) + } + if r.LifecycleState == "CERTIFIED" && + r.DistributionStatus == "DISTRIBUTION_APPROVED" && + action == "activate" { + resourceList[i].DistributionStatus = "DISTRIBUTED" + return c.JSON(http.StatusOK, resourceList[i]) + } + return c.JSON(http.StatusBadRequest, SdcError{ + Message: "Cannot perform this action", + ErrorCode: "SVC3642", + Status: "Bad Action"}) + } + } + return c.JSON(http.StatusNotFound, SdcError{ + Message: "Resource not found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func postAddResourceToService(c echo.Context) error { + resourceID := c.Param("resourceID") + resourceAdd := new(ResourceAdd) + if err := c.Bind(resourceAdd); err != nil { + return err + } + for i, r := range resourceList { + if r.UniqueID == resourceID { + if r.LifecycleState == "NOT_CERTIFIED_CHECKOUT" { + for _, rr := range resourceList { + if rr.UniqueID == resourceAdd.UniqueID && + rr.UniqueID == resourceAdd.ComponentUID && + rr.Name == resourceAdd.Name && + rr.Version == resourceAdd.ComponentVersion && + rr.ResourceType == resourceAdd.OriginType { + if rr.ResourceType == "VF" { + ci := ComponentInstance{ + UniqueID: uuid.Must(uuid.NewV4()).String(), + Name: resourceAdd.Name, + ComponentName: resourceAdd.Name, + OriginType: "VF", + ComponentVersion: "1.0", + } + resourceList[i].ComponentInstances = append(r.ComponentInstances, ci) + } + return c.JSON(http.StatusCreated, r) + } + } + } + + return c.JSON(http.StatusBadRequest, SdcError{ + Message: "Cannot perform this action", + ErrorCode: "SVC3642", + Status: "Bad Action"}) + } + } + + return c.JSON(http.StatusNotFound, SdcError{ + Message: "Resource not found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func getDistribution(c echo.Context) error { + resourceID := c.Param("resourceID") + for i, r := range resourceList { + if r.ID == resourceID { + distributionIDResult := new(DistributionIDResult) + if r.DistributionStatus == "DISTRIBUTED" { + if len(r.DistributionID) < 1 { + resourceList[i].DistributionID = uuid.Must(uuid.NewV4()).String() + } + distributionIDResult.DeployementStatus = "Distributed" + distributionIDResult.UserID = "Oper P(op0001)" + distributionIDResult.DistributionID = resourceList[i].DistributionID + } + distributionIDList := new(DistributionIDList) + distributionIDList.DistributionStatusOfServiceList = append(distributionIDList.DistributionStatusOfServiceList, *distributionIDResult) + return c.JSON(http.StatusOK, distributionIDList) + } + } + return c.JSON(http.StatusNotFound, SdcError{ + Message: "Resource not found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func getDistributionList(c echo.Context) error { + distributionID := c.Param("distributionID") + for _, r := range resourceList { + if r.DistributionID == distributionID { + d := new(DistributionStatusList) + d.DistributionStatusList = distributionList + return c.JSON(http.StatusOK, d) + } + } + return c.JSON(http.StatusNotFound, SdcError{ + Message: "Resource not found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func getAllResources(c echo.Context) error { + + var listResources []Resource + var listServices []Resource + + for _, r := range resourceList { + if r.ComponentType != "SERVICE" { + listResources = append(listResources, r) + } else { + listServices = append(listServices, r) + } + } + list := &ResourceList{listResources, listServices} + return c.JSON(http.StatusOK, list) +} + +func getServiceUniqueIdentifier(c echo.Context) error { + resourceID := c.Param("resourceID") + for _, r := range resourceList { + if r.UniqueID == resourceID { + return c.JSON(http.StatusOK, r) + } + } + + return c.JSON(http.StatusNotFound, SdcError{ + Message: "Resource not found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func uploadTcaArtifact(c echo.Context) error { + resourceID := c.Param("resourceID") + vfID := c.Param("vfID") + for _, r := range resourceList { + if r.UniqueID == resourceID { + if r.LifecycleState == "NOT_CERTIFIED_CHECKOUT" { + for _, cc := range r.ComponentInstances { + if cc.UniqueID == vfID { + newArtifact := new(ArtifactAdd) + if err := c.Bind(newArtifact); err != nil { + return err + } + cc.DeploymentArtifacts = append(cc.DeploymentArtifacts, *newArtifact) + NewUploadResult := NewUploadResult{ + Description: newArtifact.Description, + ArtifactType: newArtifact.ArtifactType, + ArtifactName: newArtifact.ArtifactName, + } + return c.JSON(http.StatusCreated, NewUploadResult) + } + } + } + return c.JSON(http.StatusBadRequest, SdcError{ + Message: "Cannot perform this action", + ErrorCode: "SVC3642", + Status: "Bad Action"}) + } + } + return c.JSON(http.StatusNotFound, SdcError{ + Message: "Resource not found", + ErrorCode: "SVC4642", + Status: "Not Found"}) +} + +func postResourceProperties(c echo.Context) error { + resourceID := c.Param("resourceID") + var bodyBytes []byte + if c.Request().Body != nil { + bodyBytes, _ = ioutil.ReadAll(c.Request().Body) + } + var dat map[string]interface{} + if err := json.Unmarshal(bodyBytes, &dat); err != nil { + return err + } + for i, r := range resourceList { + if r.UniqueID == resourceID { + for key := range dat { + propertyBody := new(Property) + propertyBody.Name = dat[key].(map[string]interface{})["name"].(string) + propertyBody.Type = dat[key].(map[string]interface{})["type"].(string) + resourceList[i].Properties = append(r.Properties, *propertyBody) + } + return c.JSON(http.StatusOK, "") + } + } + return c.JSON(http.StatusNotFound, "") +} + +func getResourceProperties(c echo.Context) error { + resourceID := c.Param("resourceID") + for _, r := range resourceList { + if r.UniqueID == resourceID { + return c.JSON(http.StatusOK, map[string][]Property{ + "properties": r.Properties, + }) + } + } + return c.JSON(http.StatusNotFound, "") +} + +func postResourceInputs(c echo.Context) error { + resourceID := c.Param("resourceID") + inputBody := new(Input) + if err := c.Bind(inputBody); err != nil { + return err + } + for i, r := range resourceList { + if r.UniqueID == resourceID { + resourceList[i].Inputs = append(r.Inputs, *inputBody) + return c.JSON(http.StatusOK, r.Inputs) + } + } + return c.JSON(http.StatusNotFound, "") +} + +func getResourcefilteredData(c echo.Context) error { + paramType := c.QueryParam("include") + switch paramType { + case "inputs": + return getResourceInputs(c) + case "properties": + return getResourceProperties(c) + } + return errors.New("Invalid query param") +} + +func getResourceInputs(c echo.Context) error { + resourceID := c.Param("resourceID") + for _, r := range resourceList { + if r.UniqueID == resourceID { + return c.JSON(http.StatusOK, map[string][]Input{ + "inputs": r.Inputs, + }) + } + } + return c.JSON(http.StatusNotFound, "") +} + +func generateDistributionStatusList() { + distributionList = nil + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774737396", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774750490", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774744883", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774756945", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774752508", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774745892", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774757951", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774749381", + URL: "", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774746542", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774735595", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774748752", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774736609", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774969197", + URL: "", + Status: "DISTRIBUTION_COMPLETE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774750517", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774744623", + URL: "", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774750947", + URL: "", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774735764", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774750026", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "ALREADY_DOWNLOADED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774753902", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774737376", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774754939", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774748190", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774742014", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774745715", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-k8s-id", + Timestamp: "1574774736174", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774738399", + URL: "", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774740487", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774731805", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774740598", + URL: "", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774749858", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774748343", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774751522", + URL: "", + Status: "COMPONENT_DONE_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "cds", + Timestamp: "1574774726254", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774739512", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774746621", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774751028", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-csar.csar", + Status: "ALREADY_DEPLOYED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774740421", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774737784", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "sdc-COpenSource-Env11-sdnc-dockero", + Timestamp: "1574774720318", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "policy-id", + Timestamp: "1574774728667", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vf-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774751123", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "aai-ml", + Timestamp: "1574774737842", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vendor-license-model.xml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "dcae-sch", + Timestamp: "1574774724083", + URL: "/sdc/v1/catalog/services/Test12/1.0/artifacts/service-Test12-template.yml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-starlingx-id", + Timestamp: "1574774752037", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/vsrx0_modules.json", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "SO-COpenSource-Env11", + Timestamp: "1574774755942", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "DEPLOY_OK", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "clamp", + Timestamp: "1574774737925", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.yaml", + Status: "NOT_NOTIFIED", + ErrorReason: "null", + }) + distributionList = append(distributionList, DistributionStatus{ + OmfComponentID: "multicloud-windriver-id", + Timestamp: "1574774743466", + URL: "/sdc/v1/catalog/services/Test12/1.0/resourceInstances/vsrx0/artifacts/base_ubuntu16.env", + Status: "DOWNLOAD_OK", + ErrorReason: "null", + }) +} + +func getArtifactTypes(c echo.Context) error { + list := []string{"HEAT"} + return c.JSON(http.StatusOK, list) +} + +func registerForDistribution(c echo.Context) error { + distributionRegistration := map[string]string{ + "distrNotificationTopicName":"testName", + "distrStatusTopicName":"testTopic", + } + return c.JSON(http.StatusOK, distributionRegistration) +} + +func unRegisterForDistribution(c echo.Context) error { + return c.JSON(http.StatusOK, list.New()) +} + +func distributionKafkaData(c echo.Context) error { + kafkaData := map[string]string{ + "kafkaBootStrapServer":"localhost:43219", + "distrNotificationTopicName":"SDC-DIST-NOTIF-TOPIC", + "distrStatusTopicName":"SDC-DIST-STATUS-TOPIC", + } + return c.JSON(http.StatusOK, kafkaData) +} + diff --git a/mock-sdc/sdc_handlers.go b/mock-sdc/sdc_handlers.go new file mode 100644 index 0000000..02f8a11 --- /dev/null +++ b/mock-sdc/sdc_handlers.go @@ -0,0 +1,210 @@ +// Copyright 2023 Deutsche Telekom AG, Orange +// +// 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 main + +import ( + "net/http" + + "github.com/labstack/echo" +) + +// VersionList describe the list return in SDC +type VersionList struct { + ListCount int `json:"listCount"` + Results []VersionLight `json:"results"` +} + +// Version describe version model in SDC +type Version struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + BaseID string `json:"baseId"` + Status string `json:"status"` + RealStatus string + CreationTime int64 `json:"creationTime"` + ModificationTime int64 `json:"modificationTime"` + AdditionalInfo struct { + OptionalCreationMethods []string `json:"OptionalCreationMethods"` + } `json:"additionalInfo"` + State struct { + SynchronizationState string `json:"synchronizationState"` + Dirty bool `json:"dirty"` + } `json:"state"` +} + +// VersionLight describe version model in SDC +type VersionLight struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + BaseID string `json:"baseId"` + Status string `json:"status"` + CreationTime int64 `json:"creationTime"` + ModificationTime int64 `json:"modificationTime"` + AdditionalInfo struct { + OptionalCreationMethods []string `json:"OptionalCreationMethods"` + } `json:"additionalInfo"` +} + +// VersionDetails show details of a version +type VersionDetails struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Status string `json:"status"` + CreationTime int64 `json:"creationTime"` + ModificationTime int64 `json:"modificationTime"` + State struct { + SynchronizationState string `json:"synchronizationState"` + Dirty bool `json:"dirty"` + } `json:"state"` +} + +// CreatedVersion of a CreatedVendor in SDC +type CreatedVersion struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Status string `json:"status"` +} + +// CreatedItem model in SDC +type CreatedItem struct { + ItemID string `json:"itemId"` + Version CreatedVersion `json:"version"` +} + +// Action describe the action on items in SDC +type Action struct { + Action string `json:"action"` +} + +// SdcError is the way to return Error in SDC +type SdcError struct { + Status string `json:"status"` + ErrorCode string `json:"errorCode"` + Message string `json:"message"` +} + +func getItemVersions(c echo.Context) error { + itemID := c.Param("itemID") + for _, v := range vendorList { + if v.ID == itemID { + versionList := generateVersionList(v.Versions) + list := &VersionList{len(versionList), versionList} + return c.JSON(http.StatusOK, list) + } + } + for _, v := range vspList { + if v.ID == itemID { + versionList := generateVersionList(v.Versions) + list := &VersionList{len(versionList), versionList} + return c.JSON(http.StatusOK, list) + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} + +func generateVersionList(versions []Version) []VersionLight { + versionList := []VersionLight{} + for _, version := range versions { + versionList = append(versionList, VersionLight{ + ID: version.ID, + Name: version.Name, + Description: version.Description, + BaseID: version.BaseID, + Status: version.Status, + CreationTime: version.CreationTime, + ModificationTime: version.ModificationTime, + AdditionalInfo: version.AdditionalInfo, + }) + + } + return versionList +} + +func getItemVersion(c echo.Context) error { + itemID := c.Param("itemID") + versionID := c.Param("versionID") + for _, v := range vendorList { + if v.ID == itemID { + for _, version := range v.Versions { + if version.ID == versionID { + versionDetails := VersionDetails{ + ID: version.ID, + Name: version.Name, + Description: version.Description, + Status: version.Status, + CreationTime: version.CreationTime, + ModificationTime: version.ModificationTime, + State: version.State, + } + return c.JSON(http.StatusOK, versionDetails) + } + } + } + } + for _, v := range vspList { + if v.ID == itemID { + for _, version := range v.Versions { + if version.ID == versionID { + versionDetails := VersionDetails{ + ID: version.ID, + Name: version.Name, + Description: version.Description, + Status: version.Status, + CreationTime: version.CreationTime, + ModificationTime: version.ModificationTime, + State: version.State, + } + return c.JSON(http.StatusOK, versionDetails) + } + } + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} + +func updateItemVersion(c echo.Context) error { + action := new(Action) + if err := c.Bind(action); err != nil { + return err + } + itemID := c.Param("itemID") + versionID := c.Param("versionID") + for i, v := range vspList { + if v.ID == itemID { + for j, version := range v.Versions { + if version.ID == versionID { + if action.Action == "Commit" { + if version.RealStatus == "Validated" { + vspList[i].Versions[j].RealStatus = "Commited" + vspList[i].Versions[j].State.Dirty = false + return c.String(http.StatusOK, "{}") + } + return echo.NewHTTPError(http.StatusNotFound, "Item not in good state") + } + return echo.NewHTTPError(http.StatusNotFound, "Unknown Action") + } + } + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} + +func getCategories(c echo.Context) error { + return c.String(http.StatusOK, `{"categories":{"resourceCategories":[{"name":"Application L4+","normalizedName":"application l4+","uniqueId":"resourceNewCategory.application l4+","icons":null,"subcategories":[{"name":"Media Servers","normalizedName":"media servers","uniqueId":"resourceNewCategory.application l4+.media servers","icons":["applicationServer"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Database","normalizedName":"database","uniqueId":"resourceNewCategory.application l4+.database","icons":["database"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Border Element","normalizedName":"border element","uniqueId":"resourceNewCategory.application l4+.border element","icons":["borderElement"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Application Server","normalizedName":"application server","uniqueId":"resourceNewCategory.application l4+.application server","icons":["applicationServer"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Firewall","normalizedName":"firewall","uniqueId":"resourceNewCategory.application l4+.firewall","icons":["firewall"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Call Control","normalizedName":"call control","uniqueId":"resourceNewCategory.application l4+.call control","icons":["call_controll"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Web Server","normalizedName":"web server","uniqueId":"resourceNewCategory.application l4+.web server","icons":["applicationServer"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Load Balancer","normalizedName":"load balancer","uniqueId":"resourceNewCategory.application l4+.load balancer","icons":["loadBalancer"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network Connectivity","normalizedName":"network connectivity","uniqueId":"resourceNewCategory.network connectivity","icons":null,"subcategories":[{"name":"Connection Points","normalizedName":"connection points","uniqueId":"resourceNewCategory.network connectivity.connection points","icons":["cp"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Virtual Links","normalizedName":"virtual links","uniqueId":"resourceNewCategory.network connectivity.virtual links","icons":["vl"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Allotted Resource","normalizedName":"allotted resource","uniqueId":"resourceNewCategory.allotted resource","icons":null,"subcategories":[{"name":"BRG","normalizedName":"brg","uniqueId":"resourceNewCategory.allotted resource.brg","icons":["brg"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"TunnelXConn","normalizedName":"tunnelxconn","uniqueId":"resourceNewCategory.allotted resource.tunnelxconn","icons":["tunnel_x_connect"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"IP Mux Demux","normalizedName":"ip mux demux","uniqueId":"resourceNewCategory.allotted resource.ip mux demux","icons":["ip_mux_demux"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Security Zone","normalizedName":"security zone","uniqueId":"resourceNewCategory.allotted resource.security zone","icons":["security_zone"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Service Admin","normalizedName":"service admin","uniqueId":"resourceNewCategory.allotted resource.service admin","icons":["service_admin"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Allotted Resource","normalizedName":"allotted resource","uniqueId":"resourceNewCategory.allotted resource.allotted resource","icons":["allotted_resource"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Contrail Route","normalizedName":"contrail route","uniqueId":"resourceNewCategory.allotted resource.contrail route","icons":["contrail_route"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Configuration","normalizedName":"configuration","uniqueId":"resourceNewCategory.configuration","icons":null,"subcategories":[{"name":"Configuration","normalizedName":"configuration","uniqueId":"resourceNewCategory.configuration.configuration","icons":["pmc"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network L4+","normalizedName":"network l4+","uniqueId":"resourceNewCategory.network l4+","icons":null,"subcategories":[{"name":"Common Network Resources","normalizedName":"common network resources","uniqueId":"resourceNewCategory.network l4+.common network resources","icons":["network"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Generic","normalizedName":"generic","uniqueId":"resourceNewCategory.generic","icons":null,"subcategories":[{"name":"Abstract","normalizedName":"abstract","uniqueId":"resourceNewCategory.generic.abstract","icons":["objectStorage","compute"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network Service","normalizedName":"network service","uniqueId":"resourceNewCategory.generic.network service","icons":["network"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Rules","normalizedName":"rules","uniqueId":"resourceNewCategory.generic.rules","icons":["networkrules","securityrules"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Infrastructure","normalizedName":"infrastructure","uniqueId":"resourceNewCategory.generic.infrastructure","icons":["connector"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network Elements","normalizedName":"network elements","uniqueId":"resourceNewCategory.generic.network elements","icons":["network","connector"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Database","normalizedName":"database","uniqueId":"resourceNewCategory.generic.database","icons":["database"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"DCAE Component","normalizedName":"dcae component","uniqueId":"resourceNewCategory.dcae component","icons":null,"subcategories":[{"name":"Analytics","normalizedName":"analytics","uniqueId":"resourceNewCategory.dcae component.analytics","icons":["dcae_analytics"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Database","normalizedName":"database","uniqueId":"resourceNewCategory.dcae component.database","icons":["dcae_database"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Policy","normalizedName":"policy","uniqueId":"resourceNewCategory.dcae component.policy","icons":["dcae_policy"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Machine Learning","normalizedName":"machine learning","uniqueId":"resourceNewCategory.dcae component.machine learning","icons":["dcae_machineLearning"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Microservice","normalizedName":"microservice","uniqueId":"resourceNewCategory.dcae component.microservice","icons":["dcae_microservice"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Source","normalizedName":"source","uniqueId":"resourceNewCategory.dcae component.source","icons":["dcae_source"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Collector","normalizedName":"collector","uniqueId":"resourceNewCategory.dcae component.collector","icons":["dcae_collector"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Utility","normalizedName":"utility","uniqueId":"resourceNewCategory.dcae component.utility","icons":["dcae_utilty"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network L2-3","normalizedName":"network l2-3","uniqueId":"resourceNewCategory.network l2-3","icons":null,"subcategories":[{"name":"Gateway","normalizedName":"gateway","uniqueId":"resourceNewCategory.network l2-3.gateway","icons":["gateway"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"WAN Connectors","normalizedName":"wan connectors","uniqueId":"resourceNewCategory.network l2-3.wan connectors","icons":["network","connector","port"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Infrastructure","normalizedName":"infrastructure","uniqueId":"resourceNewCategory.network l2-3.infrastructure","icons":["ucpe"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Router","normalizedName":"router","uniqueId":"resourceNewCategory.network l2-3.router","icons":["router","vRouter"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"LAN Connectors","normalizedName":"lan connectors","uniqueId":"resourceNewCategory.network l2-3.lan connectors","icons":["network","connector","port"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Template","normalizedName":"template","uniqueId":"resourceNewCategory.template","icons":null,"subcategories":[{"name":"Base Monitoring Template","normalizedName":"base monitoring template","uniqueId":"resourceNewCategory.template.base monitoring template","icons":["monitoring_template"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Monitoring Template","normalizedName":"monitoring template","uniqueId":"resourceNewCategory.template.monitoring template","icons":["monitoring_template"],"groupings":null,"version":null,"ownerId":null,"empty":false,"type":null}],"version":null,"ownerId":null,"empty":false,"type":null}],"serviceCategories":[{"name":"Mobility","normalizedName":"mobility","uniqueId":"serviceNewCategory.mobility","icons":["mobility"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network L4+","normalizedName":"network l4+","uniqueId":"serviceNewCategory.network l4+","icons":["network_l_4"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"E2E Service","normalizedName":"e2e service","uniqueId":"serviceNewCategory.e2e service","icons":["network_l_1-3"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"VoIP Call Control","normalizedName":"voip call control","uniqueId":"serviceNewCategory.voip call control","icons":["call_controll"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network Service","normalizedName":"network service","uniqueId":"serviceNewCategory.network service","icons":["network_l_1-3"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Network L1-3","normalizedName":"network l1-3","uniqueId":"serviceNewCategory.network l1-3","icons":["network_l_1-3"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null},{"name":"Partner Domain Service","normalizedName":"partner domain service","uniqueId":"serviceNewCategory.partner domain service","icons":["partner_domain_service"],"subcategories":null,"version":null,"ownerId":null,"empty":false,"type":null}],"productCategories":[]},"version":"1.6.7"}`) +} diff --git a/mock-sdc/vendor_handlers.go b/mock-sdc/vendor_handlers.go new file mode 100644 index 0000000..2bdde87 --- /dev/null +++ b/mock-sdc/vendor_handlers.go @@ -0,0 +1,185 @@ +// Copyright 2023 Deutsche Telekom AG, Orange +// +// 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 main + +import ( + "net/http" + "time" + + "github.com/labstack/echo" + uuid "github.com/satori/go.uuid" +) + +// Vendor describes license model in SDC +type Vendor struct { + ID string `json:"id"` + Type string `json:"type"` + Name string `json:"name"` + Description string `json:"description"` + Owner string `json:"owner"` + Status string `json:"status"` + Properties struct { + } `json:"properties"` + Versions []Version `json:"-"` +} + +// NewVendor describe the vendor creation model in SDC +type NewVendor struct { + IconRef string `json:"iconRef"` + VendorName string `json:"vendorName"` + Description string `json:"description"` +} + +// VendorList is the way to return Vendors in SDC +type VendorList struct { + ListCount int `json:"listCount"` + Results []Vendor `json:"results"` +} + +var vendorList []Vendor + +func generateInitialVendorList() { + vendorList = nil + var empty struct{} + version1 := Version{ + ID: "61c134e128f54119934b3960c77a3f33", + Name: "1.0", + Description: "Initial version", + BaseID: "", + Status: "Certified", + RealStatus: "Certified", + CreationTime: 1559565688604, + ModificationTime: 1559565787436, + AdditionalInfo: struct { + OptionalCreationMethods []string `json:"OptionalCreationMethods"` + }{ + OptionalCreationMethods: []string{"major"}}, + } + version2 := Version{ + ID: "2e3ba48c748d47e3bd4afdd8348bdfb9", + Name: "1.0", + Description: "Initial version", + BaseID: "", + Status: "Certified", + RealStatus: "Certified", + CreationTime: 1559562354868, + ModificationTime: 1559562421476, + AdditionalInfo: struct { + OptionalCreationMethods []string `json:"OptionalCreationMethods"` + }{ + OptionalCreationMethods: []string{"major"}}, + } + vendorList = append(vendorList, + Vendor{ + ID: "212a52b2630749388a7693086ac1467e", + Type: "vlm", + Name: "wvfw", + Description: "wvfw", + Owner: "cs0008", + Status: "ACTIVE", + Properties: empty, + Versions: []Version{version1}}) + vendorList = append(vendorList, Vendor{ + ID: "e78eb0b1c73e43138f705cd92c0e4ace", + Type: "vlm", + Name: "vfw_test", + Description: "test vfw", + Owner: "cs0008", + Status: "ACTIVE", + Properties: empty, + Versions: []Version{version2}}) +} + +func getVendorServiceModels(c echo.Context) error { + list := &VendorList{len(vendorList), vendorList} + return c.JSON(http.StatusOK, list) +} + +func postVendorServiceModels(c echo.Context) error { + newVendor := new(NewVendor) + if err := c.Bind(newVendor); err != nil { + return err + } + + u1 := uuid.Must(uuid.NewV4()).String() + version := Version{ + ID: u1, + Name: "1.0", + Description: "Initial version", + BaseID: "", + Status: "Draft", + RealStatus: "Draft", + CreationTime: (time.Now().UnixNano() / 1000000), + ModificationTime: (time.Now().UnixNano() / 1000000), + AdditionalInfo: struct { + OptionalCreationMethods []string `json:"OptionalCreationMethods"` + }{ + OptionalCreationMethods: []string{"major"}}, + State: struct { + SynchronizationState string `json:"synchronizationState"` + Dirty bool `json:"dirty"` + }{ + SynchronizationState: "UpToDate", + Dirty: false, + }, + } + u2 := uuid.Must(uuid.NewV4()).String() + var empty struct{} + vendorList = append(vendorList, Vendor{ + ID: u2, + Type: "vlm", + Name: newVendor.VendorName, + Description: newVendor.Description, + Owner: "cs0008", + Status: "ACTIVE", + Properties: empty, + Versions: []Version{version}}) + + createdVendor := CreatedItem{ + ItemID: u2, + Version: CreatedVersion{ + ID: u1, + Name: "1.0", + Description: "Initial version", + Status: "Draft", + }, + } + return c.JSON(http.StatusCreated, createdVendor) +} + +func updateVendorVersion(c echo.Context) error { + action := new(Action) + if err := c.Bind(action); err != nil { + return err + } + if action.Action == "Submit" { + vendorID := c.Param("vendorID") + versionID := c.Param("versionID") + for i, vendor := range vendorList { + if vendor.ID == vendorID { + for j, version := range vendor.Versions { + if version.ID == versionID { + vendorList[i].Versions[j].Status = "Certified" + vendorList[i].Versions[j].RealStatus = "Certified" + } + return c.String(http.StatusOK, "{}") + } + return echo.NewHTTPError(http.StatusNotFound, "Version Not Found") + } + } + return echo.NewHTTPError(http.StatusNotFound, "Vendor Not Found") + } + return echo.NewHTTPError(http.StatusNotFound, "Unknown Action") +} diff --git a/mock-sdc/vsp_handlers.go b/mock-sdc/vsp_handlers.go new file mode 100644 index 0000000..6b45774 --- /dev/null +++ b/mock-sdc/vsp_handlers.go @@ -0,0 +1,418 @@ +// Copyright 2023 Deutsche Telekom AG, Orange +// +// 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 main + +import ( + "net/http" + "strings" + "time" + + "github.com/labstack/echo" + uuid "github.com/satori/go.uuid" +) + +// Vsp describes software product in SDC +type Vsp struct { + ID string `json:"id"` + Icon string `json:"icon"` + OnboardingMethod string `json:"onboardingMethod"` + Name string `json:"name"` + Description string `json:"description"` + Owner string `json:"owner"` + Status string `json:"status"` + VendorName string `json:"vendorName"` + VendorID string `json:"vendorId"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + CandidateOnboardingOrigin string `json:"candidateOnboardingOrigin"` + OnboardingOrigin string `json:"onboardingOrigin"` + NetworkPackageName string `json:"networkPackageName"` + ValidationData struct { + ImportStructure struct { + Heat string `json:"heat"` + } `json:"importStructure"` + } `json:"validationData"` + Versions []Version `json:"-"` +} + +// VspLight describes software product in SDC lists +type VspLight struct { + ID string `json:"id"` + OnboardingMethod string `json:"onboardingMethod"` + Name string `json:"name"` + Description string `json:"description"` + Owner string `json:"owner"` + Status string `json:"status"` + VendorName string `json:"vendorName"` + VendorID string `json:"vendorId"` +} + +// VspList is the way to return Vsps in SDC +type VspList struct { + ListCount int `json:"listCount"` + Results []VspLight `json:"results"` +} + +// VspDetailsDraft describes software product in SDC +type VspDetailsDraft struct { + ID string `json:"id"` + Icon string `json:"icon"` + OnboardingMethod string `json:"onboardingMethod"` + Name string `json:"name"` + Description string `json:"description"` + VendorName string `json:"vendorName"` + VendorID string `json:"vendorId"` + Version string `json:"version"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` +} + +// VspDetailsUploaded describes software product in SDC +type VspDetailsUploaded struct { + ID string `json:"id"` + Icon string `json:"icon"` + OnboardingMethod string `json:"onboardingMethod"` + Name string `json:"name"` + Description string `json:"description"` + VendorName string `json:"vendorName"` + VendorID string `json:"vendorId"` + Version string `json:"version"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + CandidateOnboardingOrigin string `json:"candidateOnboardingOrigin"` + NetworkPackageName string `json:"networkPackageName"` +} + +// VspDetailsValidated describes software product in SDC +type VspDetailsValidated struct { + ID string `json:"id"` + Icon string `json:"icon"` + OnboardingMethod string `json:"onboardingMethod"` + Name string `json:"name"` + Description string `json:"description"` + VendorName string `json:"vendorName"` + VendorID string `json:"vendorId"` + Version string `json:"version"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + OnboardingOrigin string `json:"onboardingOrigin"` + NetworkPackageName string `json:"networkPackageName"` + ValidationData struct { + ImportStructure struct { + Heat string `json:"heat"` + } `json:"importStructure"` + } `json:"validationData"` +} + +// NewVsp describe the vsp creation model in SDC +type NewVsp struct { + Icon string `json:"iconRef"` + Name string `json:"name"` + VendorName string `json:"vendorName"` + VendorID string `json:"vendorId"` + Description string `json:"description"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + LicensingData struct{} `json:"licensingData"` + OnboardingMethod string `json:"onboardingMethod"` +} + +// ArtifactUploadResult bla +type ArtifactUploadResult struct { + Errors struct{} `json:"errors"` + Status string `json:"status"` + OnboardingOrigin string `json:"onboardingOrigin"` + NetworkPackageName string `json:"networkPackageName"` +} + +// ArtifactValidationResult bla +type ArtifactValidationResult struct { + Errors struct{} `json:"errors"` + Status string `json:"status"` + FileNames []string `json:"fileNames"` +} + +// CsarCreateResult bla +type CsarCreateResult struct { + Description string `json:"description"` + VspName string `json:"vspName"` + Version string `json:"version"` + PackageID string `json:"packageId"` + Category string `json:"category"` + SubCategory string `json:"subCategory"` + VendorName string `json:"vendorName"` + VendorRelease string `json:"vendorRelease"` + PackageType string `json:"packageType"` + ResourceType string `json:"resourceType"` +} + +var vspList []Vsp + +func generateInitialVspList() { + vspList = []Vsp{} +} + +func getVendorSoftwareProducts(c echo.Context) error { + vspLights := []VspLight{} + for _, v := range vspList { + vspLights = append(vspLights, VspLight{ + ID: v.ID, + OnboardingMethod: v.OnboardingMethod, + Name: v.Name, + Description: v.Description, + Owner: v.Owner, + Status: v.Status, + VendorName: v.VendorName, + VendorID: v.VendorID, + }) + } + list := &VspList{len(vspLights), vspLights} + return c.JSON(http.StatusOK, list) +} + +func postVendorSoftwareProducts(c echo.Context) error { + newVsp := new(NewVsp) + if err := c.Bind(newVsp); err != nil { + return err + } + + u1 := uuid.Must(uuid.NewV4()).String() + version := Version{ + ID: u1, + Name: "1.0", + Description: "Initial version", + BaseID: "", + Status: "Draft", + RealStatus: "Draft", + CreationTime: (time.Now().UnixNano() / 1000000), + ModificationTime: (time.Now().UnixNano() / 1000000), + AdditionalInfo: struct { + OptionalCreationMethods []string `json:"OptionalCreationMethods"` + }{ + OptionalCreationMethods: []string{"major"}}, + State: struct { + SynchronizationState string `json:"synchronizationState"` + Dirty bool `json:"dirty"` + }{ + SynchronizationState: "UpToDate", + Dirty: false, + }, + } + u2 := uuid.Must(uuid.NewV4()).String() + vspList = append(vspList, Vsp{ + ID: u2, + OnboardingMethod: "NetworkPackage", + Name: newVsp.Name, + Description: newVsp.Description, + Owner: "cs0008", + Status: "ACTIVE", + VendorName: newVsp.VendorName, + VendorID: newVsp.VendorID, + Category: "resourceNewCategory.generic", + SubCategory: "resourceNewCategory.generic.abstract", + Icon: "icon", + Versions: []Version{version}}) + + createdVsp := CreatedItem{ + ItemID: u2, + Version: CreatedVersion{ + ID: u1, + Name: "1.0", + Description: "Initial version", + Status: "Draft", + }, + } + return c.JSON(http.StatusCreated, createdVsp) +} + +func uploadArtifacts(c echo.Context) error { + vspID := c.Param("vspID") + versionID := c.Param("versionID") + for i, v := range vspList { + if v.ID == vspID { + for j, version := range v.Versions { + if version.ID == versionID { + if version.RealStatus == "Draft" { + file, err := c.FormFile("upload") + if err != nil { + return err + } + fileName := strings.Split(file.Filename, ".")[0] + fileExtension := strings.Split(file.Filename, ".")[1] + vspList[i].NetworkPackageName = fileName + vspList[i].CandidateOnboardingOrigin = fileExtension + vspList[i].Versions[j].RealStatus = "Uploaded" + var empty struct{} + artifactUploadResult := ArtifactUploadResult{ + Errors: empty, + Status: "Success", + OnboardingOrigin: fileExtension, + NetworkPackageName: fileName, + } + return c.JSON(http.StatusCreated, artifactUploadResult) + } + } + } + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} + +func validateArtifacts(c echo.Context) error { + vspID := c.Param("vspID") + versionID := c.Param("versionID") + for i, v := range vspList { + if v.ID == vspID { + for j, version := range v.Versions { + if version.ID == versionID { + if version.RealStatus == "Uploaded" { + vspList[i].OnboardingOrigin = vspList[i].CandidateOnboardingOrigin + vspList[i].Versions[j].State.Dirty = true + vspList[i].ValidationData = struct { + ImportStructure struct { + Heat string `json:"heat"` + } `json:"importStructure"` + }{ + ImportStructure: struct { + Heat string `json:"heat"` + }{ + Heat: "Yes", + }, + } + vspList[i].Versions[j].RealStatus = "Validated" + var empty struct{} + artifactValidationResult := ArtifactValidationResult{ + Errors: empty, + FileNames: []string{ + "base_ubuntu16.env", + "base_ubuntu16.yaml", + }, + Status: "Success", + } + return c.JSON(http.StatusOK, artifactValidationResult) + } + } + } + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} + +func updateVspVersion(c echo.Context) error { + action := new(Action) + if err := c.Bind(action); err != nil { + return err + } + vspID := c.Param("vspID") + versionID := c.Param("versionID") + for i, v := range vspList { + if v.ID == vspID { + for j, version := range v.Versions { + if version.ID == versionID { + if action.Action == "Submit" { + if version.RealStatus == "Commited" { + vspList[i].Versions[j].RealStatus = "Certified" + vspList[i].Versions[j].Status = "Certified" + return c.String(http.StatusOK, "{}") + } + return echo.NewHTTPError(http.StatusNotFound, "Item not in good state") + } + if action.Action == "Create_Package" { + if version.RealStatus == "Certified" { + csarCreateResult := CsarCreateResult{ + Description: v.Description, + VspName: v.Name, + Version: version.Name, + PackageID: v.ID, + Category: v.Category, + SubCategory: v.SubCategory, + VendorName: v.VendorName, + VendorRelease: "1.0", + PackageType: "CSAR", + ResourceType: "VF", + } + return c.JSON(http.StatusOK, csarCreateResult) + } + return echo.NewHTTPError(http.StatusNotFound, "Item not in good state") + } + return echo.NewHTTPError(http.StatusNotFound, "Unknown Action") + } + } + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} + +func getVspVersion(c echo.Context) error { + vspID := c.Param("vspID") + versionID := c.Param("versionID") + for _, v := range vspList { + if v.ID == vspID { + for _, version := range v.Versions { + if version.ID == versionID { + if version.RealStatus == "Draft" { + vspDetails := VspDetailsDraft{ + ID: v.ID, + Icon: v.Icon, + OnboardingMethod: v.OnboardingMethod, + Name: v.Name, + Description: v.Description, + VendorName: v.VendorName, + VendorID: v.VendorID, + Version: version.ID, + Category: v.Category, + SubCategory: v.SubCategory, + } + return c.JSON(http.StatusOK, vspDetails) + } + if version.RealStatus == "Uploaded" { + vspDetails := VspDetailsUploaded{ + ID: v.ID, + Icon: v.Icon, + OnboardingMethod: v.OnboardingMethod, + Name: v.Name, + Description: v.Description, + VendorName: v.VendorName, + VendorID: v.VendorID, + Version: version.ID, + Category: v.Category, + SubCategory: v.SubCategory, + CandidateOnboardingOrigin: v.CandidateOnboardingOrigin, + NetworkPackageName: v.NetworkPackageName, + } + return c.JSON(http.StatusOK, vspDetails) + } + vspDetails := VspDetailsValidated{ + ID: v.ID, + Icon: v.Icon, + OnboardingMethod: v.OnboardingMethod, + Name: v.Name, + Description: v.Description, + VendorName: v.VendorName, + VendorID: v.VendorID, + Version: version.ID, + Category: v.Category, + SubCategory: v.SubCategory, + OnboardingOrigin: v.OnboardingOrigin, + NetworkPackageName: v.NetworkPackageName, + ValidationData: v.ValidationData, + } + return c.JSON(http.StatusOK, vspDetails) + } + } + } + } + return echo.NewHTTPError(http.StatusNotFound, "Item Not Found") +} |