summaryrefslogtreecommitdiffstats
path: root/mock-sdc/vsp_handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'mock-sdc/vsp_handlers.go')
-rw-r--r--mock-sdc/vsp_handlers.go418
1 files changed, 418 insertions, 0 deletions
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")
+}