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>'].