diff options
author | Rajamohan Raj <rajamohan.raj@intel.com> | 2020-08-26 00:28:12 +0000 |
---|---|---|
committer | Rajamohan Raj <rajamohan.raj@intel.com> | 2020-09-10 22:12:17 +0000 |
commit | b2c9f4c61d00bf18e7a253c410479f8124640106 (patch) | |
tree | f2c3df18a5cb904f3b57b858cff7d889a36837c6 /src/orchestrator | |
parent | 4759e43ff7f29727477b0d928047bf5ca283cef1 (diff) |
Adding validations for all JSON data across modules
Issue-ID: MULTICLOUD-1198
Signed-off-by: Rajamohan Raj <rajamohan.raj@intel.com>
Change-Id: Idc2fbfd6e875bd7b662c7d60925aeb776b3f7bea
Diffstat (limited to 'src/orchestrator')
28 files changed, 44 insertions, 429 deletions
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/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/api/json-schemas/composite-app.json b/src/orchestrator/json-schemas/composite-app.json index 3f976831..3f976831 100644 --- a/src/orchestrator/api/json-schemas/composite-app.json +++ b/src/orchestrator/json-schemas/composite-app.json diff --git a/src/orchestrator/api/json-schemas/composite-profile.json b/src/orchestrator/json-schemas/composite-profile.json index e404a64c..e404a64c 100644 --- a/src/orchestrator/api/json-schemas/composite-profile.json +++ b/src/orchestrator/json-schemas/composite-profile.json diff --git a/src/orchestrator/api/json-schemas/controller.json b/src/orchestrator/json-schemas/controller.json index 3263ff21..3263ff21 100644 --- a/src/orchestrator/api/json-schemas/controller.json +++ b/src/orchestrator/json-schemas/controller.json diff --git a/src/orchestrator/api/json-schemas/deployment-group-intent.json b/src/orchestrator/json-schemas/deployment-group-intent.json index 2740747b..2740747b 100644 --- a/src/orchestrator/api/json-schemas/deployment-group-intent.json +++ b/src/orchestrator/json-schemas/deployment-group-intent.json diff --git a/src/orchestrator/api/json-schemas/deployment-intent.json b/src/orchestrator/json-schemas/deployment-intent.json index 6bdc0b43..6bdc0b43 100644 --- a/src/orchestrator/api/json-schemas/deployment-intent.json +++ b/src/orchestrator/json-schemas/deployment-intent.json diff --git a/src/orchestrator/api/json-schemas/generic-placement-intent-app.json b/src/orchestrator/json-schemas/generic-placement-intent-app.json index 0b6447c2..0b6447c2 100644 --- a/src/orchestrator/api/json-schemas/generic-placement-intent-app.json +++ b/src/orchestrator/json-schemas/generic-placement-intent-app.json diff --git a/src/orchestrator/api/json-schemas/generic-placement-intent.json b/src/orchestrator/json-schemas/generic-placement-intent.json index 44df9087..44df9087 100644 --- a/src/orchestrator/api/json-schemas/generic-placement-intent.json +++ b/src/orchestrator/json-schemas/generic-placement-intent.json diff --git a/src/orchestrator/api/json-schemas/metadata.json b/src/orchestrator/json-schemas/metadata.json index 960545ee..960545ee 100644 --- a/src/orchestrator/api/json-schemas/metadata.json +++ b/src/orchestrator/json-schemas/metadata.json 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 |