You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mr...@apache.org on 2017/10/24 13:55:12 UTC
[incubator-openwhisk-wskdeploy] branch master updated: Add the
support to read env variable for package name (#614)
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 <sh...@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" <co...@openwhisk.apache.org>'].