You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2017/10/24 13:55:14 UTC

[GitHub] mrutkows closed pull request #614: Add the support to read env variable for package name

mrutkows closed pull request #614: Add the support to read env variable for package name
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/614
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 08c5c99..264b387 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 39c1a6a..d46ff44 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -1609,3 +1609,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 4b7a2db..f435544 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_env_var.yaml b/tests/dat/deployment_data_application_package_env_var.yaml
new file mode 100644
index 0000000..eb987a5
--- /dev/null
+++ b/tests/dat/deployment_data_application_package_env_var.yaml
@@ -0,0 +1,10 @@
+application:
+  name: wskdeploy-samples
+  namespace: /wskdeploy/samples/
+
+  package:
+      name: ${package_name}
+      namespace: /wskdeploy/samples/test
+      credential: 12345678ABCDEF
+      inputs:
+        param: value
diff --git a/tests/dat/deployment_data_application_package_env_var_con.yaml b/tests/dat/deployment_data_application_package_env_var_con.yaml
new file mode 100644
index 0000000..8372140
--- /dev/null
+++ b/tests/dat/deployment_data_application_package_env_var_con.yaml
@@ -0,0 +1,10 @@
+application:
+  name: wskdeploy-samples
+  namespace: /wskdeploy/samples/
+
+  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


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services