From b2c9f4c61d00bf18e7a253c410479f8124640106 Mon Sep 17 00:00:00 2001 From: Rajamohan Raj Date: Wed, 26 Aug 2020 00:28:12 +0000 Subject: Adding validations for all JSON data across modules Issue-ID: MULTICLOUD-1198 Signed-off-by: Rajamohan Raj Change-Id: Idc2fbfd6e875bd7b662c7d60925aeb776b3f7bea --- src/orchestrator/api/add_intents_handler.go | 5 +- src/orchestrator/api/app_intent_handler.go | 5 +- src/orchestrator/api/app_profilehandler.go | 5 +- src/orchestrator/api/apphandler.go | 5 +- src/orchestrator/api/composite_app_handler.go | 5 +- src/orchestrator/api/composite_profilehandler.go | 5 +- .../api/composite_profilehandler_test.go | 4 + src/orchestrator/api/controllerhandler.go | 5 +- src/orchestrator/api/controllerhandler_test.go | 4 + .../api/deployment_intent_groups_handler.go | 5 +- .../api/generic_placement_intent_handler.go | 5 +- src/orchestrator/api/json-schemas/cluster-kv.json | 54 --------- .../api/json-schemas/cluster-label.json | 13 --- .../api/json-schemas/composite-app.json | 45 -------- .../api/json-schemas/composite-profile.json | 46 -------- src/orchestrator/api/json-schemas/controller.json | 73 ------------ .../api/json-schemas/deployment-group-intent.json | 79 ------------- .../api/json-schemas/deployment-intent.json | 55 ---------- .../json-schemas/generic-placement-intent-app.json | 117 -------------------- .../api/json-schemas/generic-placement-intent.json | 51 --------- src/orchestrator/api/json-schemas/metadata.json | 37 ------- .../api/json-schemas/network-load-interface.json | 77 ------------- .../api/json-schemas/network-workload.json | 67 ----------- .../api/json-schemas/provider-network.json | 122 --------------------- .../api/json-schemas/virtual-network.json | 75 ------------- src/orchestrator/api/projecthandler.go | 6 +- src/orchestrator/api/projecthandler_test.go | 4 + src/orchestrator/json-schemas/composite-app.json | 45 ++++++++ .../json-schemas/composite-profile.json | 46 ++++++++ src/orchestrator/json-schemas/controller.json | 73 ++++++++++++ .../json-schemas/deployment-group-intent.json | 79 +++++++++++++ .../json-schemas/deployment-intent.json | 55 ++++++++++ .../json-schemas/generic-placement-intent-app.json | 117 ++++++++++++++++++++ .../json-schemas/generic-placement-intent.json | 51 +++++++++ src/orchestrator/json-schemas/metadata.json | 37 +++++++ src/orchestrator/scripts/start-dev.sh | 2 +- 36 files changed, 547 insertions(+), 932 deletions(-) delete mode 100644 src/orchestrator/api/json-schemas/cluster-kv.json delete mode 100644 src/orchestrator/api/json-schemas/cluster-label.json delete mode 100644 src/orchestrator/api/json-schemas/composite-app.json delete mode 100644 src/orchestrator/api/json-schemas/composite-profile.json delete mode 100644 src/orchestrator/api/json-schemas/controller.json delete mode 100644 src/orchestrator/api/json-schemas/deployment-group-intent.json delete mode 100644 src/orchestrator/api/json-schemas/deployment-intent.json delete mode 100644 src/orchestrator/api/json-schemas/generic-placement-intent-app.json delete mode 100644 src/orchestrator/api/json-schemas/generic-placement-intent.json delete mode 100644 src/orchestrator/api/json-schemas/metadata.json delete mode 100644 src/orchestrator/api/json-schemas/network-load-interface.json delete mode 100644 src/orchestrator/api/json-schemas/network-workload.json delete mode 100644 src/orchestrator/api/json-schemas/provider-network.json delete mode 100644 src/orchestrator/api/json-schemas/virtual-network.json create mode 100644 src/orchestrator/json-schemas/composite-app.json create mode 100644 src/orchestrator/json-schemas/composite-profile.json create mode 100644 src/orchestrator/json-schemas/controller.json create mode 100644 src/orchestrator/json-schemas/deployment-group-intent.json create mode 100644 src/orchestrator/json-schemas/deployment-intent.json create mode 100644 src/orchestrator/json-schemas/generic-placement-intent-app.json create mode 100644 src/orchestrator/json-schemas/generic-placement-intent.json create mode 100644 src/orchestrator/json-schemas/metadata.json (limited to 'src/orchestrator') diff --git a/src/orchestrator/api/add_intents_handler.go b/src/orchestrator/api/add_intents_handler.go index 21a33739..66f3839a 100644 --- a/src/orchestrator/api/add_intents_handler.go +++ b/src/orchestrator/api/add_intents_handler.go @@ -27,6 +27,8 @@ import ( "github.com/gorilla/mux" ) +var addIntentJSONFile string = "json-schemas/deployment-intent.json" + type intentHandler struct { client moduleLib.IntentManager } @@ -46,9 +48,8 @@ func (h intentHandler) addIntentHandler(w http.ResponseWriter, r *http.Request) return } - jsonFile := "json-schemas/deployment-intent.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, i) + err, httpError := validation.ValidateJsonSchemaData(addIntentJSONFile, i) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/app_intent_handler.go b/src/orchestrator/api/app_intent_handler.go index a51b9b92..1d48f8a6 100644 --- a/src/orchestrator/api/app_intent_handler.go +++ b/src/orchestrator/api/app_intent_handler.go @@ -26,6 +26,8 @@ import ( moduleLib "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module" ) +var appIntentJSONFile string = "json-schemas/generic-placement-intent-app.json" + /* Used to store backend implementation objects Also simplifies mocking for unit testing purposes */ @@ -48,9 +50,8 @@ func (h appIntentHandler) createAppIntentHandler(w http.ResponseWriter, r *http. return } - jsonFile := "json-schemas/generic-placement-intent-app.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, a) + err, httpError := validation.ValidateJsonSchemaData(appIntentJSONFile, a) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/app_profilehandler.go b/src/orchestrator/api/app_profilehandler.go index 2fa0f26d..58cd2145 100644 --- a/src/orchestrator/api/app_profilehandler.go +++ b/src/orchestrator/api/app_profilehandler.go @@ -34,6 +34,8 @@ import ( pkgerrors "github.com/pkg/errors" ) +var appProfileJSONFile string = "json-schemas/metadata.json" + /* Used to store backend implementation objects Also simplifies mocking for unit testing purposes */ @@ -73,9 +75,8 @@ func (h appProfileHandler) createAppProfileHandler(w http.ResponseWriter, r *htt return } - jsonFile := "json-schemas/metadata.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, ap) + err, httpError := validation.ValidateJsonSchemaData(appProfileJSONFile, ap) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/apphandler.go b/src/orchestrator/api/apphandler.go index 7d901a8f..7429f5c2 100644 --- a/src/orchestrator/api/apphandler.go +++ b/src/orchestrator/api/apphandler.go @@ -33,6 +33,8 @@ import ( "github.com/gorilla/mux" ) +var appJSONFile string = "json-schemas/metadata.json" + // appHandler to store backend implementations objects // Also simplifies mocking for unit testing purposes type appHandler struct { @@ -70,9 +72,8 @@ func (h appHandler) createAppHandler(w http.ResponseWriter, r *http.Request) { return } - jsonFile := "json-schemas/metadata.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, a) + err, httpError := validation.ValidateJsonSchemaData(appJSONFile, a) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/composite_app_handler.go b/src/orchestrator/api/composite_app_handler.go index 1e69c353..d531b28d 100644 --- a/src/orchestrator/api/composite_app_handler.go +++ b/src/orchestrator/api/composite_app_handler.go @@ -26,6 +26,8 @@ import ( moduleLib "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module" ) +var caJSONFile string = "json-schemas/composite-app.json" + // compositeAppHandler to store backend implementations objects // Also simplifies mocking for unit testing purposes type compositeAppHandler struct { @@ -47,9 +49,8 @@ func (h compositeAppHandler) createHandler(w http.ResponseWriter, r *http.Reques http.Error(w, err.Error(), http.StatusUnprocessableEntity) return } - jsonFile := "json-schemas/composite-app.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, c) + err, httpError := validation.ValidateJsonSchemaData(caJSONFile, c) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/composite_profilehandler.go b/src/orchestrator/api/composite_profilehandler.go index 5a3fb19c..de1c8f2d 100644 --- a/src/orchestrator/api/composite_profilehandler.go +++ b/src/orchestrator/api/composite_profilehandler.go @@ -27,6 +27,8 @@ import ( "github.com/gorilla/mux" ) +var caprofileJSONFile string = "json-schemas/metadata.json" + /* Used to store backend implementation objects Also simplifies mocking for unit testing purposes */ @@ -49,9 +51,8 @@ func (h compositeProfileHandler) createHandler(w http.ResponseWriter, r *http.Re return } - jsonFile := "json-schemas/metadata.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, cpf) + err, httpError := validation.ValidateJsonSchemaData(caprofileJSONFile, cpf) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/composite_profilehandler_test.go b/src/orchestrator/api/composite_profilehandler_test.go index ec3ec24b..d1e34230 100644 --- a/src/orchestrator/api/composite_profilehandler_test.go +++ b/src/orchestrator/api/composite_profilehandler_test.go @@ -70,6 +70,10 @@ func (m *mockCompositeProfileManager) DeleteCompositeProfile(name string, projec return m.Err } +func init() { + caprofileJSONFile = "../json-schemas/metadata.json" +} + func Test_compositeProfileHandler_createHandler(t *testing.T) { testCases := []struct { label string diff --git a/src/orchestrator/api/controllerhandler.go b/src/orchestrator/api/controllerhandler.go index be300d89..418aa70f 100644 --- a/src/orchestrator/api/controllerhandler.go +++ b/src/orchestrator/api/controllerhandler.go @@ -28,6 +28,8 @@ import ( pkgerrors "github.com/pkg/errors" ) +var controllerJSONFile string = "json-schemas/controller.json" + // Used to store backend implementations objects // Also simplifies mocking for unit testing purposes type controllerHandler struct { @@ -87,9 +89,8 @@ func (h controllerHandler) createHandler(w http.ResponseWriter, r *http.Request) return } - jsonFile := "json-schemas/controller.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, m) + err, httpError := validation.ValidateJsonSchemaData(controllerJSONFile, m) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/controllerhandler_test.go b/src/orchestrator/api/controllerhandler_test.go index 6cbb2a79..ecc2d1f7 100644 --- a/src/orchestrator/api/controllerhandler_test.go +++ b/src/orchestrator/api/controllerhandler_test.go @@ -73,6 +73,10 @@ func (m *mockControllerManager) InitControllers() { return } +func init() { + controllerJSONFile = "../json-schemas/controller.json" +} + func TestControllerCreateHandler(t *testing.T) { testCases := []struct { label string diff --git a/src/orchestrator/api/deployment_intent_groups_handler.go b/src/orchestrator/api/deployment_intent_groups_handler.go index 76dea14c..b9466a2c 100644 --- a/src/orchestrator/api/deployment_intent_groups_handler.go +++ b/src/orchestrator/api/deployment_intent_groups_handler.go @@ -27,6 +27,8 @@ import ( "github.com/gorilla/mux" ) +var dpiJSONFile string = "json-schemas/deployment-group-intent.json" + /* Used to store backend implementation objects Also simplifies mocking for unit testing purposes */ @@ -49,9 +51,8 @@ func (h deploymentIntentGroupHandler) createDeploymentIntentGroupHandler(w http. return } - jsonFile := "json-schemas/deployment-group-intent.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, d) + err, httpError := validation.ValidateJsonSchemaData(dpiJSONFile, d) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/generic_placement_intent_handler.go b/src/orchestrator/api/generic_placement_intent_handler.go index 16f1f234..2415ae2c 100644 --- a/src/orchestrator/api/generic_placement_intent_handler.go +++ b/src/orchestrator/api/generic_placement_intent_handler.go @@ -27,6 +27,8 @@ import ( "github.com/gorilla/mux" ) +var gpiJSONFile string = "json-schemas/generic-placement-intent.json" + /* Used to store backend implementation objects Also simplifies mocking for unit testing purposes */ @@ -49,9 +51,8 @@ func (h genericPlacementIntentHandler) createGenericPlacementIntentHandler(w htt return } - jsonFile := "json-schemas/generic-placement-intent.json" // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, g) + err, httpError := validation.ValidateJsonSchemaData(gpiJSONFile, g) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/json-schemas/cluster-kv.json b/src/orchestrator/api/json-schemas/cluster-kv.json deleted file mode 100644 index c7013bab..00000000 --- a/src/orchestrator/api/json-schemas/cluster-kv.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "required": [ - "kv" - ], - "type": "object", - "properties": { - "kv": { - "items": { - "additionalProperties": { - "type": "string", - "maxLength": 128 - }, - "type": "object" - }, - "type": "array" - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/cluster-label.json b/src/orchestrator/api/json-schemas/cluster-label.json deleted file mode 100644 index 22267b3d..00000000 --- a/src/orchestrator/api/json-schemas/cluster-label.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "label-name": { - "description": "Logical Cloud to use for this intent", - "type": "string", - "example": "cluster-label-1", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/composite-app.json b/src/orchestrator/api/json-schemas/composite-app.json deleted file mode 100644 index 3f976831..00000000 --- a/src/orchestrator/api/json-schemas/composite-app.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "version": { - "description": "Composite Application Version", - "type": "string", - "example": "v1", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/composite-profile.json b/src/orchestrator/api/json-schemas/composite-profile.json deleted file mode 100644 index e404a64c..00000000 --- a/src/orchestrator/api/json-schemas/composite-profile.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "app-name": { - "description": "Application Name", - "required": [ - "app-name" - ], - "type": "string", - "example": "Application1", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/controller.json b/src/orchestrator/api/json-schemas/controller.json deleted file mode 100644 index 3263ff21..00000000 --- a/src/orchestrator/api/json-schemas/controller.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "required": [ - "host", - "port", - "type", - "priority" - ], - "type": "object", - "properties": { - "priority": { - "description": "Priority of controller to be called", - "type": "integer", - "example": 4, - "minimum": 0, - "maximum": 100 - }, - "host": { - "description": "Controller reachibility information", - "type": "string", - "example": "10.7.100.4", - "maxLength": 128 - }, - "type": { - "description": "Type of controller (placement, action are 2 types supported)", - "type": "string", - "example": "placement", - "maxLength": 48 - }, - "port": { - "description": "Port for controller", - "type": "integer", - "minimum": 0, - "maximum": 50000, - "example": 9029 - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/deployment-group-intent.json b/src/orchestrator/api/json-schemas/deployment-group-intent.json deleted file mode 100644 index 2740747b..00000000 --- a/src/orchestrator/api/json-schemas/deployment-group-intent.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "required": [ - "profile", - "version" - ], - "type": "object", - "description": "DepSpecData has profile, version, OverrideValuesObj", - "properties": { - "override-values": { - "items": { - "required": [ - "app-name", - "values" - ], - "type": "object", - "description": "OverrideValues has appName and ValuesObj", - "properties": { - "app-name": { - "type": "string" - }, - "values": { - "additionalProperties": { - "type": "string", - "maxLength": 128 - }, - "type": "object" - } - } - }, - "type": "array" - }, - "profile": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "version": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/deployment-intent.json b/src/orchestrator/api/json-schemas/deployment-intent.json deleted file mode 100644 index 6bdc0b43..00000000 --- a/src/orchestrator/api/json-schemas/deployment-intent.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "required": [ - "intent" - ], - "type": "object", - "description": "IntentSpecData has Intent", - "properties": { - "intent": { - "additionalProperties": { - "type": "string", - "maxLength": 128 - }, - "type": "object", - "example": { - "generic-placement-intent": "gpi-name" - } - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } -} \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/generic-placement-intent-app.json b/src/orchestrator/api/json-schemas/generic-placement-intent-app.json deleted file mode 100644 index 0b6447c2..00000000 --- a/src/orchestrator/api/json-schemas/generic-placement-intent-app.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "properties": { - "app-name": { - "type": "string", - "example": "appl", - "maxLength": 128 - }, - "anyOf": { - "items": { - "type": "object", - "description": "AnyOf consists of Array of ProviderName & ClusterLabelNames", - "properties": { - "cluster-label-name": { - "type": "string", - "example": "east", - "maxLength": 128 - }, - "provider-name": { - "type": "string", - "example": "provider1", - "maxLength": 128 - }, - "cluster-name": { - "type": "string", - "example": "cluster1", - "maxLength": 128 - } - } - }, - "type": "array" - }, - "allOf": { - "items": { - "type": "object", - "description": "AllOf ProviderName, ClusterName, ClusterLabelName and AnyOfArray", - "properties": { - "provider-name": { - "type": "string", - "example": "provider2", - "maxLength": 128 - }, - "cluster-label-name": { - "type": "string", - "example": "west", - "maxLength": 128 - }, - "anyOf": { - "items": { - "type": "object", - "description": "AnyOf consists of Array of ProviderName & ClusterLabelNames", - "properties": { - "cluster-label-name": { - "type": "string", - "example": "east", - "maxLength": 128 - }, - "provider-name": { - "type": "string", - "example": "provider1", - "maxLength": 128 - }, - "cluster-name": { - "type": "string", - "example": "cluster1", - "maxLength": 128 - } - } - }, - "type": "array" - }, - "cluster-name": { - "type": "string", - "example": "cluster2", - "maxLength": 128 - } - } - }, - "type": "array" - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } -} \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/generic-placement-intent.json b/src/orchestrator/api/json-schemas/generic-placement-intent.json deleted file mode 100644 index 44df9087..00000000 --- a/src/orchestrator/api/json-schemas/generic-placement-intent.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "type": "object", - "description": "Spec", - "properties": { - "logical-cloud": { - "description": "Logical Cloud to use for this intent", - "required": [ - "logical-cloud" - ], - "type": "string", - "example": "cloud1", - "maxLength": 128 - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/metadata.json b/src/orchestrator/api/json-schemas/metadata.json deleted file mode 100644 index 960545ee..00000000 --- a/src/orchestrator/api/json-schemas/metadata.json +++ /dev/null @@ -1,37 +0,0 @@ - -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/network-load-interface.json b/src/orchestrator/api/json-schemas/network-load-interface.json deleted file mode 100644 index dd5b40d1..00000000 --- a/src/orchestrator/api/json-schemas/network-load-interface.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "required": [ - "interface", - "name" - ], - "type": "object", - "properties": { - "interface": { - "description": "interface Name", - "type": "string", - "example": "eth0", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "macAddress": { - "description": "Name of the network", - "type": "string", - "example": "x.x.x.x", - "maxLength": 128 - }, - "ipAddress": { - "description": "Name of the network", - "type": "string", - "example": "0.0.0.0", - "maxLength": 128 - }, - "name": { - "description": "Name of the network", - "type": "string", - "example": "provider-1", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "defaultGateway": { - "description": "Is this interface default gateway", - "type": "boolean", - "example": false, - "maxLength": 128 - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/network-workload.json b/src/orchestrator/api/json-schemas/network-workload.json deleted file mode 100644 index c5dc14cb..00000000 --- a/src/orchestrator/api/json-schemas/network-workload.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "type": "object", - "description": "Newtwork Workload Intent", - "properties": { - "spec": { - "type": "object", - "properties": { - "workload-resource": { - "description": "Name of the workload", - "type": "string", - "example": "firewall", - "maxLength": 254, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "type": { - "description": "Type of the workload", - "type": "string", - "example": "deployment", - "maxLength": 128 - }, - "application-name": { - "description": "Application Name", - "type": "string", - "example": "Application1", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } - } - } -} \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/provider-network.json b/src/orchestrator/api/json-schemas/provider-network.json deleted file mode 100644 index 0aef0304..00000000 --- a/src/orchestrator/api/json-schemas/provider-network.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "required": [ - "cniType", - "ipv4Subnets", - "providerNetType", - "vlan" - ], - "type": "object", - "properties": { - "ipv4Subnets": { - "items": { - "required": [ - "name", - "subnet" - ], - "type": "object", - "properties": { - "subnet": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "excludeIps": { - "type": "string", - "maxLength": 128 - }, - "gateway": { - "type": "string", - "maxLength": 128 - }, - "name": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - }, - "type": "array" - }, - "cniType": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "vlan": { - "required": [ - "logicalInterfaceName", - "nodeLabelList", - "providerInterfaceName", - "vlanID", - "vlanNodeSelector" - ], - "type": "object", - "properties": { - "vlanNodeSelector": { - "type": "string", - "maxLength": 128 - }, - "nodeLabelList": { - "items": { - "type": "string", - "maxLength": 128 - }, - "type": "array" - }, - "providerInterfaceName": { - "type": "string", - "maxLength": 128 - }, - "vlanID": { - "type": "string", - "maxLength": 128 - }, - "logicalInterfaceName": { - "type": "string", - "maxLength": 128 - } - } - }, - "providerNetType": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } -} \ No newline at end of file diff --git a/src/orchestrator/api/json-schemas/virtual-network.json b/src/orchestrator/api/json-schemas/virtual-network.json deleted file mode 100644 index f2bc9d3d..00000000 --- a/src/orchestrator/api/json-schemas/virtual-network.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema#", - "type": "object", - "properties": { - "spec": { - "properties": { - "ipv4Subnets": { - "items": { - "required": [ - "name", - "subnet" - ], - "type": "object", - "properties": { - "subnet": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "excludeIps": { - "type": "string", - "maxLength": 1024 - }, - "gateway": { - "type": "string", - "maxLength": 128 - }, - "name": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - }, - "type": "array" - }, - "cniType": { - "type": "string", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - } - } - }, - "metadata": { - "required": ["name"], - "properties": { - "userData2": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some more data", - "maxLength": 512 - }, - "userData1": { - "description": "User relevant data for the resource", - "type": "string", - "example": "Some data", - "maxLength": 512 - }, - "name": { - "description": "Name of the resource", - "type": "string", - "example": "ResName", - "maxLength": 128, - "pattern": "[-_0-9a-zA-Z]+$" - }, - "description": { - "description": "Description for the resource", - "type": "string", - "example": "Resource description", - "maxLength": 1024 - } - } - } - } -} \ No newline at end of file diff --git a/src/orchestrator/api/projecthandler.go b/src/orchestrator/api/projecthandler.go index f130d283..07cd79ce 100644 --- a/src/orchestrator/api/projecthandler.go +++ b/src/orchestrator/api/projecthandler.go @@ -26,6 +26,8 @@ import ( moduleLib "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module" ) +var projectJSONFile string = "json-schemas/metadata.json" + // Used to store backend implementations objects // Also simplifies mocking for unit testing purposes type projectHandler struct { @@ -47,9 +49,9 @@ func (h projectHandler) createHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusUnprocessableEntity) return } - jsonFile := "json-schemas/metadata.json" + // Verify JSON Body - err, httpError := validation.ValidateJsonSchemaData(jsonFile, p) + err, httpError := validation.ValidateJsonSchemaData(projectJSONFile, p) if err != nil { http.Error(w, err.Error(), httpError) return diff --git a/src/orchestrator/api/projecthandler_test.go b/src/orchestrator/api/projecthandler_test.go index ef5fdf07..5e88bab9 100644 --- a/src/orchestrator/api/projecthandler_test.go +++ b/src/orchestrator/api/projecthandler_test.go @@ -64,6 +64,10 @@ func (m *mockProjectManager) GetAllProjects() ([]moduleLib.Project, error) { return []moduleLib.Project{}, m.Err } +func init() { + projectJSONFile = "../json-schemas/metadata.json" +} + func TestProjectCreateHandler(t *testing.T) { testCases := []struct { label string diff --git a/src/orchestrator/json-schemas/composite-app.json b/src/orchestrator/json-schemas/composite-app.json new file mode 100644 index 00000000..3f976831 --- /dev/null +++ b/src/orchestrator/json-schemas/composite-app.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "version": { + "description": "Composite Application Version", + "type": "string", + "example": "v1", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } + } \ No newline at end of file diff --git a/src/orchestrator/json-schemas/composite-profile.json b/src/orchestrator/json-schemas/composite-profile.json new file mode 100644 index 00000000..e404a64c --- /dev/null +++ b/src/orchestrator/json-schemas/composite-profile.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "app-name": { + "description": "Application Name", + "required": [ + "app-name" + ], + "type": "string", + "example": "Application1", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } + } \ No newline at end of file diff --git a/src/orchestrator/json-schemas/controller.json b/src/orchestrator/json-schemas/controller.json new file mode 100644 index 00000000..3263ff21 --- /dev/null +++ b/src/orchestrator/json-schemas/controller.json @@ -0,0 +1,73 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "required": [ + "host", + "port", + "type", + "priority" + ], + "type": "object", + "properties": { + "priority": { + "description": "Priority of controller to be called", + "type": "integer", + "example": 4, + "minimum": 0, + "maximum": 100 + }, + "host": { + "description": "Controller reachibility information", + "type": "string", + "example": "10.7.100.4", + "maxLength": 128 + }, + "type": { + "description": "Type of controller (placement, action are 2 types supported)", + "type": "string", + "example": "placement", + "maxLength": 48 + }, + "port": { + "description": "Port for controller", + "type": "integer", + "minimum": 0, + "maximum": 50000, + "example": 9029 + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } + } \ No newline at end of file diff --git a/src/orchestrator/json-schemas/deployment-group-intent.json b/src/orchestrator/json-schemas/deployment-group-intent.json new file mode 100644 index 00000000..2740747b --- /dev/null +++ b/src/orchestrator/json-schemas/deployment-group-intent.json @@ -0,0 +1,79 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "required": [ + "profile", + "version" + ], + "type": "object", + "description": "DepSpecData has profile, version, OverrideValuesObj", + "properties": { + "override-values": { + "items": { + "required": [ + "app-name", + "values" + ], + "type": "object", + "description": "OverrideValues has appName and ValuesObj", + "properties": { + "app-name": { + "type": "string" + }, + "values": { + "additionalProperties": { + "type": "string", + "maxLength": 128 + }, + "type": "object" + } + } + }, + "type": "array" + }, + "profile": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "version": { + "type": "string", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } + } \ No newline at end of file diff --git a/src/orchestrator/json-schemas/deployment-intent.json b/src/orchestrator/json-schemas/deployment-intent.json new file mode 100644 index 00000000..6bdc0b43 --- /dev/null +++ b/src/orchestrator/json-schemas/deployment-intent.json @@ -0,0 +1,55 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "required": [ + "intent" + ], + "type": "object", + "description": "IntentSpecData has Intent", + "properties": { + "intent": { + "additionalProperties": { + "type": "string", + "maxLength": 128 + }, + "type": "object", + "example": { + "generic-placement-intent": "gpi-name" + } + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } +} \ No newline at end of file diff --git a/src/orchestrator/json-schemas/generic-placement-intent-app.json b/src/orchestrator/json-schemas/generic-placement-intent-app.json new file mode 100644 index 00000000..0b6447c2 --- /dev/null +++ b/src/orchestrator/json-schemas/generic-placement-intent-app.json @@ -0,0 +1,117 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "properties": { + "app-name": { + "type": "string", + "example": "appl", + "maxLength": 128 + }, + "anyOf": { + "items": { + "type": "object", + "description": "AnyOf consists of Array of ProviderName & ClusterLabelNames", + "properties": { + "cluster-label-name": { + "type": "string", + "example": "east", + "maxLength": 128 + }, + "provider-name": { + "type": "string", + "example": "provider1", + "maxLength": 128 + }, + "cluster-name": { + "type": "string", + "example": "cluster1", + "maxLength": 128 + } + } + }, + "type": "array" + }, + "allOf": { + "items": { + "type": "object", + "description": "AllOf ProviderName, ClusterName, ClusterLabelName and AnyOfArray", + "properties": { + "provider-name": { + "type": "string", + "example": "provider2", + "maxLength": 128 + }, + "cluster-label-name": { + "type": "string", + "example": "west", + "maxLength": 128 + }, + "anyOf": { + "items": { + "type": "object", + "description": "AnyOf consists of Array of ProviderName & ClusterLabelNames", + "properties": { + "cluster-label-name": { + "type": "string", + "example": "east", + "maxLength": 128 + }, + "provider-name": { + "type": "string", + "example": "provider1", + "maxLength": 128 + }, + "cluster-name": { + "type": "string", + "example": "cluster1", + "maxLength": 128 + } + } + }, + "type": "array" + }, + "cluster-name": { + "type": "string", + "example": "cluster2", + "maxLength": 128 + } + } + }, + "type": "array" + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } +} \ No newline at end of file diff --git a/src/orchestrator/json-schemas/generic-placement-intent.json b/src/orchestrator/json-schemas/generic-placement-intent.json new file mode 100644 index 00000000..44df9087 --- /dev/null +++ b/src/orchestrator/json-schemas/generic-placement-intent.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "spec": { + "type": "object", + "description": "Spec", + "properties": { + "logical-cloud": { + "description": "Logical Cloud to use for this intent", + "required": [ + "logical-cloud" + ], + "type": "string", + "example": "cloud1", + "maxLength": 128 + } + } + }, + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } + } \ No newline at end of file diff --git a/src/orchestrator/json-schemas/metadata.json b/src/orchestrator/json-schemas/metadata.json new file mode 100644 index 00000000..960545ee --- /dev/null +++ b/src/orchestrator/json-schemas/metadata.json @@ -0,0 +1,37 @@ + +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "properties": { + "metadata": { + "required": ["name"], + "properties": { + "userData2": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some more data", + "maxLength": 512 + }, + "userData1": { + "description": "User relevant data for the resource", + "type": "string", + "example": "Some data", + "maxLength": 512 + }, + "name": { + "description": "Name of the resource", + "type": "string", + "example": "ResName", + "maxLength": 128, + "pattern": "[-_0-9a-zA-Z]+$" + }, + "description": { + "description": "Description for the resource", + "type": "string", + "example": "Resource description", + "maxLength": 1024 + } + } + } + } + } \ No newline at end of file diff --git a/src/orchestrator/scripts/start-dev.sh b/src/orchestrator/scripts/start-dev.sh index 003773be..ad21dc47 100755 --- a/src/orchestrator/scripts/start-dev.sh +++ b/src/orchestrator/scripts/start-dev.sh @@ -28,6 +28,6 @@ echo "Compiling source code" pushd $opath generate_config make all -cp -r $k8s_path/src/orchestrator/api/json-schemas $k8s_path/src/orchestrator +cp -r $k8s_path/src/orchestrator/json-schemas $k8s_path/src/orchestrator ./orchestrator popd -- cgit 1.2.3-korg