This is an automated email from the ASF dual-hosted git repository. mrutkowski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git
The following commit(s) were added to refs/heads/master by this push: new 9ed3425 Add the support to read env variable for package name (#614) 9ed3425 is described below commit 9ed3425fe8a4a4b6c5cdbb4139043b6d822d4f50 Author: Vincent <s...@us.ibm.com> AuthorDate: Tue Oct 24 09:55:10 2017 -0400 Add the support to read env variable for package name (#614) Closes: #610 --- parsers/deploy_parser.go | 3 +- parsers/deploy_parser_test.go | 105 +++++++++++++++++++++ parsers/manifest_parser.go | 4 +- parsers/manifest_parser_test.go | 17 ++++ parsers/yamlparser.go | 36 +++++++ tests/dat/deployment_data_application_package.yaml | 1 - ...ployment_data_application_package_env_var.yaml} | 6 +- ...ment_data_application_package_env_var_con.yaml} | 6 +- ...ployment_data_application_packages_env_var.yaml | 17 ++++ ...ment_data_application_packages_env_var_con.yaml | 17 ++++ tests/dat/deployment_data_package_env_var.yaml | 7 ++ tests/dat/deployment_data_packages_env_var.yaml | 7 ++ .../manifest_validate_package_grammar_env_var.yaml | 14 +++ 13 files changed, 229 insertions(+), 11 deletions(-) diff --git a/parsers/deploy_parser.go b/parsers/deploy_parser.go index 148d6ce..ee9e041 100644 --- a/parsers/deploy_parser.go +++ b/parsers/deploy_parser.go @@ -53,7 +53,8 @@ func (dm *YAMLParser) ParseDeployment(deploymentPath string) (*YAML, error) { return &dplyyaml, utils.NewParserErr(deploymentPath, lines, msgs) } dplyyaml.Filepath = deploymentPath - return &dplyyaml, nil + dplyyamlEnvVar := ReadEnvVariable(&dplyyaml) + return dplyyamlEnvVar, nil } func (dm *YAMLParser) convertErrorToLinesMsgs(errorString string) (lines []string, msgs []string) { diff --git a/parsers/deploy_parser_test.go b/parsers/deploy_parser_test.go index e98666f..30992b9 100644 --- a/parsers/deploy_parser_test.go +++ b/parsers/deploy_parser_test.go @@ -193,3 +193,108 @@ func TestParseDeploymentYAML_Action(t *testing.T) { } } } + +func TestParseDeploymentYAML_Packages_Env(t *testing.T) { + testPackage := "test_package" + os.Setenv("package_name", testPackage) + assert.Equal(t, testPackage, os.Getenv("package_name")) + //var deployment utils.DeploymentYAML + mm := NewYAMLParser() + deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_packages_env_var.yaml") + + assert.Equal(t, 0, len(deployment.Application.Packages), "Packages under application are empty.") + assert.Equal(t, 0, len(deployment.Application.Package.Packagename), "Package name is empty.") + assert.Equal(t, 1, len(deployment.Packages), "Packages are available.") + for pkg_name := range deployment.Packages { + assert.Equal(t, testPackage, pkg_name, "Get package name failed.") + var pkg = deployment.Packages[pkg_name] + assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.") + assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.") + assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.") + //get and verify inputs + for param_name, param := range pkg.Inputs { + assert.Equal(t, "value", param.Value, "Get input value failed.") + assert.Equal(t, "param", param_name, "Get input param name failed.") + } + } +} + +func TestParseDeploymentYAML_Package_Env(t *testing.T) { + testPackage := "test_package" + os.Setenv("package_name", testPackage) + assert.Equal(t, testPackage, os.Getenv("package_name")) + //var deployment utils.DeploymentYAML + mm := NewYAMLParser() + deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_package_env_var.yaml") + + assert.Equal(t, 0, len(deployment.Application.Packages), "Get package list failed.") + assert.Equal(t, 0, len(deployment.Application.Package.Packagename), "Package name is empty.") + assert.Equal(t, 0, len(deployment.Packages), "Get package list failed.") + assert.Equal(t, testPackage, deployment.Package.Packagename, "Get package name failed.") + assert.Equal(t, "/wskdeploy/samples/test", deployment.Package.Namespace, "Get package namespace failed.") + assert.Equal(t, "12345678ABCDEF", deployment.Package.Credential, "Get package credential failed.") + assert.Equal(t, 1, len(deployment.Package.Inputs), "Get package input list failed.") + //get and verify inputs + for param_name, param := range deployment.Package.Inputs { + assert.Equal(t, "value", param.Value, "Get input value failed.") + assert.Equal(t, "param", param_name, "Get input param name failed.") + } +} + +func TestParseDeploymentYAML_Application_Package_Env(t *testing.T) { + testPackage := "test_package" + os.Setenv("package_name", testPackage) + assert.Equal(t, testPackage, os.Getenv("package_name")) + mm := NewYAMLParser() + deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application_package_env_var.yaml") + assert.Equal(t, testPackage, deployment.Application.Package.Packagename, "Get package name failed.") + assert.Equal(t, "/wskdeploy/samples/test", deployment.Application.Package.Namespace, "Get package namespace failed.") + assert.Equal(t, "12345678ABCDEF", deployment.Application.Package.Credential, "Get package credential failed.") + assert.Equal(t, 1, len(deployment.Application.Package.Inputs), "Get package input list failed.") + + // Verify the case of using concatenation. + deployment, _ = mm.ParseDeployment("../tests/dat/deployment_data_application_package_env_var_con.yaml") + assert.Equal(t, "test_package-test_package", deployment.Application.Package.Packagename, "Get package name failed.") +} + +func TestParseDeploymentYAML_Application_Packages_Env(t *testing.T) { + testPackage := "test_package" + os.Setenv("package_name", testPackage) + testPackageSec := "test_package_second" + os.Setenv("package_name_second", testPackageSec) + assert.Equal(t, testPackage, os.Getenv("package_name")) + mm := NewYAMLParser() + deployment, _ := mm.ParseDeployment("../tests/dat/deployment_data_application_packages_env_var.yaml") + + expectedPackages := [2]string{testPackage, testPackageSec} + assert.Equal(t, 2, len(deployment.Application.Packages), "Get package list failed.") + for _, pkg_name := range expectedPackages { + var pkg = deployment.Application.Packages[pkg_name] + assert.Equal(t, pkg_name, pkg.Packagename, "Get package package name failed.") + assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.") + assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.") + assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.") + //get and verify inputs + for param_name, param := range pkg.Inputs { + assert.Equal(t, "value", param.Value, "Get input value failed.") + assert.Equal(t, "param", param_name, "Get input param name failed.") + } + } + + // Verify the case of using concatenation. + expectedPackages = [2]string{testPackage + "suffix", testPackageSec + "suffix"} + deployment, _ = mm.ParseDeployment("../tests/dat/deployment_data_application_packages_env_var_con.yaml") + assert.Equal(t, 2, len(deployment.Application.Packages), "Get package list failed.") + for _, pkg_name := range expectedPackages { + var pkg = deployment.Application.Packages[pkg_name] + assert.Equal(t, pkg_name, pkg.Packagename, "Get package package name failed.") + assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.") + assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.") + assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.") + //get and verify inputs + for param_name, param := range pkg.Inputs { + assert.Equal(t, "value", param.Value, "Get input value failed.") + assert.Equal(t, "param", param_name, "Get input param name failed.") + } + } +} diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go index c6ce6d2..62098b8 100644 --- a/parsers/manifest_parser.go +++ b/parsers/manifest_parser.go @@ -98,7 +98,9 @@ func (dm *YAMLParser) ParseManifest(manifestPath string) (*YAML, error) { return &maniyaml, utils.NewParserErr(manifestPath, lines, msgs) } maniyaml.Filepath = manifestPath - return &maniyaml, nil + manifest := ReadEnvVariable(&maniyaml) + + return manifest, nil } func (dm *YAMLParser) ComposeDependenciesFromAllPackages(manifest *YAML, projectPath string, filePath string) (map[string]utils.DependencyRecord, error) { diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go index 0aef582..558cdeb 100644 --- a/parsers/manifest_parser_test.go +++ b/parsers/manifest_parser_test.go @@ -1578,3 +1578,20 @@ func TestParseYAML_param(t *testing.T) { } } } + +func TestPackageName_Env_Var(t *testing.T) { + testPackage := "test_package" + os.Setenv("package_name", testPackage) + testPackageSec := "test_package_second" + os.Setenv("package_name_second", testPackageSec) + mm := NewYAMLParser() + manifestfile := "../tests/dat/manifest_validate_package_grammar_env_var.yaml" + manifest, _ := mm.ParseManifest(manifestfile) + assert.Equal(t, 4, len(manifest.Packages), "Get package list failed.") + expectedPackages := [4]string{testPackage, testPackageSec, testPackage + "suffix", testPackage+ "-" + testPackageSec} + for _, pkg_name := range expectedPackages { + var pkg = manifest.Packages[pkg_name] + assert.Equal(t, "1.0", pkg.Version, "Get the wrong package version.") + assert.Equal(t, "Apache-2.0", pkg.License, "Get the wrong license.") + } +} diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go index 974ce5b..006e1cb 100644 --- a/parsers/yamlparser.go +++ b/parsers/yamlparser.go @@ -19,6 +19,7 @@ package parsers import ( "github.com/apache/incubator-openwhisk-client-go/whisk" + "github.com/apache/incubator-openwhisk-wskdeploy/utils" ) // structs that denotes the sample manifest.yaml, wrapped yaml.v2 @@ -184,6 +185,41 @@ type YAML struct { Filepath string //file path of the yaml file } +func convertSinglePackageName(packageName string) string { + if len(packageName) != 0 { + packageNameEnv := utils.GetEnvVar(packageName) + if str, ok := packageNameEnv.(string); ok { + return str + } else { + return packageName + } + } + return packageName +} + +func convertPackageName(packageMap map[string]Package) map[string]Package { + packages := make(map[string]Package) + for packName, depPacks := range packageMap { + name := packName + packageName := utils.GetEnvVar(packName) + if str, ok := packageName.(string); ok { + name = str + } + depPacks.Packagename = convertSinglePackageName(depPacks.Packagename) + packages[name] = depPacks + } + return packages +} + +func ReadEnvVariable(yaml *YAML) *YAML { + yaml.Application.Package.Packagename = convertSinglePackageName(yaml.Application.Package.Packagename) + yaml.Package.Packagename = convertSinglePackageName(yaml.Package.Packagename) + yaml.Application.Packages = convertPackageName(yaml.Application.Packages) + yaml.Packages = convertPackageName(yaml.Packages) + + return yaml +} + //********************Trigger functions*************************// //add the key/value array as the annotations of the trigger. func (trigger *Trigger) ComposeWskTrigger(kvarr []whisk.KeyValue) *whisk.Trigger { diff --git a/tests/dat/deployment_data_application_package.yaml b/tests/dat/deployment_data_application_package.yaml index 404d9e1..e2904e4 100644 --- a/tests/dat/deployment_data_application_package.yaml +++ b/tests/dat/deployment_data_application_package.yaml @@ -9,4 +9,3 @@ application: credential: 12345678ABCDEF inputs: param: value - diff --git a/tests/dat/deployment_data_application_package.yaml b/tests/dat/deployment_data_application_package_env_var.yaml similarity index 76% copy from tests/dat/deployment_data_application_package.yaml copy to tests/dat/deployment_data_application_package_env_var.yaml index 404d9e1..eb987a5 100644 --- a/tests/dat/deployment_data_application_package.yaml +++ b/tests/dat/deployment_data_application_package_env_var.yaml @@ -2,11 +2,9 @@ application: name: wskdeploy-samples namespace: /wskdeploy/samples/ - packages: - test_package: - name: test_package + package: + name: ${package_name} namespace: /wskdeploy/samples/test credential: 12345678ABCDEF inputs: param: value - diff --git a/tests/dat/deployment_data_application_package.yaml b/tests/dat/deployment_data_application_package_env_var_con.yaml similarity index 76% copy from tests/dat/deployment_data_application_package.yaml copy to tests/dat/deployment_data_application_package_env_var_con.yaml index 404d9e1..8372140 100644 --- a/tests/dat/deployment_data_application_package.yaml +++ b/tests/dat/deployment_data_application_package_env_var_con.yaml @@ -2,11 +2,9 @@ application: name: wskdeploy-samples namespace: /wskdeploy/samples/ - packages: - test_package: - name: test_package + package: + name: ${package_name}-${package_name} namespace: /wskdeploy/samples/test credential: 12345678ABCDEF inputs: param: value - diff --git a/tests/dat/deployment_data_application_packages_env_var.yaml b/tests/dat/deployment_data_application_packages_env_var.yaml new file mode 100644 index 0000000..55546fc --- /dev/null +++ b/tests/dat/deployment_data_application_packages_env_var.yaml @@ -0,0 +1,17 @@ +application: + name: wskdeploy-samples + namespace: /wskdeploy/samples/ + + packages: + $package_name: + name: $package_name + namespace: /wskdeploy/samples/test + credential: 12345678ABCDEF + inputs: + param: value + $package_name_second: + name: $package_name_second + namespace: /wskdeploy/samples/test + credential: 12345678ABCDEF + inputs: + param: value diff --git a/tests/dat/deployment_data_application_packages_env_var_con.yaml b/tests/dat/deployment_data_application_packages_env_var_con.yaml new file mode 100644 index 0000000..9366928 --- /dev/null +++ b/tests/dat/deployment_data_application_packages_env_var_con.yaml @@ -0,0 +1,17 @@ +application: + name: wskdeploy-samples + namespace: /wskdeploy/samples/ + + packages: + ${package_name}suffix: + name: ${package_name}suffix + namespace: /wskdeploy/samples/test + credential: 12345678ABCDEF + inputs: + param: value + ${package_name_second}suffix: + name: ${package_name_second}suffix + namespace: /wskdeploy/samples/test + credential: 12345678ABCDEF + inputs: + param: value diff --git a/tests/dat/deployment_data_package_env_var.yaml b/tests/dat/deployment_data_package_env_var.yaml new file mode 100644 index 0000000..e2647e1 --- /dev/null +++ b/tests/dat/deployment_data_package_env_var.yaml @@ -0,0 +1,7 @@ +package: + name: $package_name + namespace: /wskdeploy/samples/test + credential: 12345678ABCDEF + inputs: + param: value + diff --git a/tests/dat/deployment_data_packages_env_var.yaml b/tests/dat/deployment_data_packages_env_var.yaml new file mode 100644 index 0000000..fb685d6 --- /dev/null +++ b/tests/dat/deployment_data_packages_env_var.yaml @@ -0,0 +1,7 @@ +packages: + $package_name: + namespace: /wskdeploy/samples/test + credential: 12345678ABCDEF + inputs: + param: value + diff --git a/tests/dat/manifest_validate_package_grammar_env_var.yaml b/tests/dat/manifest_validate_package_grammar_env_var.yaml new file mode 100644 index 0000000..411f122 --- /dev/null +++ b/tests/dat/manifest_validate_package_grammar_env_var.yaml @@ -0,0 +1,14 @@ +# This test file is used to test the basic Package grammar +packages: + $package_name: + version: 1.0 + license: Apache-2.0 + $package_name_second: + version: 1.0 + license: Apache-2.0 + ${package_name}suffix: + version: 1.0 + license: Apache-2.0 + ${package_name}-${package_name_second}: + version: 1.0 + license: Apache-2.0 -- To stop receiving notification emails like this one, please contact ['"commits@openwhisk.apache.org" <commits@openwhisk.apache.org>'].