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 2018/02/16 15:52:51 UTC

[incubator-openwhisk-wskdeploy] branch master updated: Adding support for env variables into github repo (#746)

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 c85d8a0  Adding support for env variables into github repo (#746)
c85d8a0 is described below

commit c85d8a0b3806d5499bf0a202980cbd3b7812d977
Author: Priti Desai <pd...@us.ibm.com>
AuthorDate: Fri Feb 16 07:52:49 2018 -0800

    Adding support for env variables into github repo (#746)
---
 deployers/deploymentreader.go   |  6 +++---
 parsers/manifest_parser.go      | 15 ++++++++-------
 parsers/manifest_parser_test.go | 37 +++++++++++++++++++++++--------------
 parsers/parameters.go           |  2 +-
 parsers/yamlparser.go           |  2 +-
 wskenv/environment.go           |  5 +++--
 wskenv/environment_test.go      | 30 +++++++++++++++---------------
 7 files changed, 54 insertions(+), 43 deletions(-)

diff --git a/deployers/deploymentreader.go b/deployers/deploymentreader.go
index 03c7abc..9e60ff9 100644
--- a/deployers/deploymentreader.go
+++ b/deployers/deploymentreader.go
@@ -122,7 +122,7 @@ func (reader *DeploymentReader) bindPackageInputsAndAnnotations() error {
 
 				keyVal.Key = name
 
-				keyVal.Value = wskenv.GetEnvVar(input.Value)
+				keyVal.Value = wskenv.InterpolateStringWithEnvVar(input.Value)
 
 				keyValArr = append(keyValArr, keyVal)
 			}
@@ -215,7 +215,7 @@ func (reader *DeploymentReader) bindActionInputsAndAnnotations() error {
 
 					keyVal.Key = name
 
-					keyVal.Value = wskenv.GetEnvVar(input.Value)
+					keyVal.Value = wskenv.InterpolateStringWithEnvVar(input.Value)
 
 					keyValArr = append(keyValArr, keyVal)
 				}
@@ -303,7 +303,7 @@ func (reader *DeploymentReader) bindTriggerInputsAndAnnotations() error {
 					var keyVal whisk.KeyValue
 
 					keyVal.Key = name
-					keyVal.Value = wskenv.GetEnvVar(input.Value)
+					keyVal.Value = wskenv.InterpolateStringWithEnvVar(input.Value)
 
 					keyValArr = append(keyValArr, keyVal)
 				}
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index b18118e..349891c 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -162,6 +162,7 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, fileP
 			// TODO() define const for the protocol prefix, etc.
 			if !strings.HasPrefix(location, "https://") && !strings.HasPrefix(location, "http://") {
 				location = "https://" + dependency.Location
+				location = wskenv.InterpolateStringWithEnvVar(location).(string)
 			}
 
 			isBinding = false
@@ -190,7 +191,7 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, fileP
 		for name, value := range dependency.Annotations {
 			var keyVal whisk.KeyValue
 			keyVal.Key = name
-			keyVal.Value = wskenv.GetEnvVar(value)
+			keyVal.Value = wskenv.InterpolateStringWithEnvVar(value)
 
 			keyValArrAnot = append(keyValArrAnot, keyVal)
 		}
@@ -315,7 +316,7 @@ func (dm *YAMLParser) ComposePackage(pkg Package, packageName string, filePath s
 	for name, value := range pkg.Annotations {
 		var keyVal whisk.KeyValue
 		keyVal.Key = name
-		keyVal.Value = wskenv.GetEnvVar(value)
+		keyVal.Value = wskenv.InterpolateStringWithEnvVar(value)
 		listOfAnnotations = append(listOfAnnotations, keyVal)
 	}
 	if len(listOfAnnotations) > 0 {
@@ -384,7 +385,7 @@ func (dm *YAMLParser) ComposeSequences(namespace string, sequences map[string]Se
 		for name, value := range sequence.Annotations {
 			var keyVal whisk.KeyValue
 			keyVal.Key = name
-			keyVal.Value = wskenv.GetEnvVar(value)
+			keyVal.Value = wskenv.InterpolateStringWithEnvVar(value)
 
 			keyValArr = append(keyValArr, keyVal)
 		}
@@ -647,7 +648,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action,
 		for name, value := range action.Annotations {
 			var keyVal whisk.KeyValue
 			keyVal.Key = name
-			keyVal.Value = wskenv.GetEnvVar(value)
+			keyVal.Value = wskenv.InterpolateStringWithEnvVar(value)
 			listOfAnnotations = append(listOfAnnotations, keyVal)
 		}
 		if len(listOfAnnotations) > 0 {
@@ -776,7 +777,7 @@ func (dm *YAMLParser) ComposeTriggers(filePath string, pkg Package, ma whisk.Key
 
 		// replacing env. variables here in the trigger feed name
 		// to support trigger feed with $READ_FROM_ENV_TRIGGER_FEED
-		trigger.Feed = wskenv.GetEnvVar(trigger.Feed).(string)
+		trigger.Feed = wskenv.InterpolateStringWithEnvVar(trigger.Feed).(string)
 
 		keyValArr := make(whisk.KeyValueArr, 0)
 		if trigger.Feed != "" {
@@ -814,7 +815,7 @@ func (dm *YAMLParser) ComposeTriggers(filePath string, pkg Package, ma whisk.Key
 		for name, value := range trigger.Annotations {
 			var keyVal whisk.KeyValue
 			keyVal.Key = name
-			keyVal.Value = wskenv.GetEnvVar(value)
+			keyVal.Value = wskenv.InterpolateStringWithEnvVar(value)
 			listOfAnnotations = append(listOfAnnotations, keyVal)
 		}
 		if len(listOfAnnotations) > 0 {
@@ -876,7 +877,7 @@ func (dm *YAMLParser) ComposeRules(pkg Package, packageName string, ma whisk.Key
 		for name, value := range rule.Annotations {
 			var keyVal whisk.KeyValue
 			keyVal.Key = name
-			keyVal.Value = wskenv.GetEnvVar(value)
+			keyVal.Value = wskenv.InterpolateStringWithEnvVar(value)
 			listOfAnnotations = append(listOfAnnotations, keyVal)
 		}
 		if len(listOfAnnotations) > 0 {
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index 1ac7b87..a8832fd 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -1457,6 +1457,8 @@ func TestComposeDependencies(t *testing.T) {
 	data := `package:
   name: helloworld
   dependencies:
+    my-private-repo:
+      location: ${USERNAME}:${PASSWORD}@github.com/user/repo/folder
     myhelloworld:
       location: github.com/user/repo/folder
     myCloudant:
@@ -1465,6 +1467,8 @@ func TestComposeDependencies(t *testing.T) {
         dbname: myGreatDB
       annotations:
         myAnnotation: Here it is`
+	os.Setenv("USERNAME", "myusername")
+	os.Setenv("PASSWORD", "mypassword")
 	tmpfile, err := _createTmpfile(data, "manifest_parser_test_")
 	if err != nil {
 		assert.Fail(t, "Failed to create temp file")
@@ -1480,27 +1484,32 @@ func TestComposeDependencies(t *testing.T) {
 	if err != nil {
 		assert.Fail(t, "Failed to compose rules")
 	}
-	assert.Equal(t, 2, len(depdList), "Failed to get rules")
+	assert.Equal(t, 3, len(depdList), "Failed to get rules")
 	for depdy_name, depdy := range depdList {
-		assert.Equal(t, "helloworld", depdy.Packagename, "Failed to set dependecy isbinding")
-		assert.Equal(t, "/project_folder/Packages", depdy.ProjectPath, "Failed to set dependecy isbinding")
+		assert.Equal(t, "helloworld", depdy.Packagename, "Failed to set dependency isbinding")
+		assert.Equal(t, "/project_folder/Packages", depdy.ProjectPath, "Failed to set dependency isbinding")
 		d := strings.Split(depdy_name, ":")
 		assert.NotEqual(t, d[1], "", "Failed to get dependency name")
 		switch d[1] {
 		case "myhelloworld":
-			assert.Equal(t, "https://github.com/user/repo/folder", depdy.Location, "Failed to set dependecy location")
-			assert.Equal(t, false, depdy.IsBinding, "Failed to set dependecy isbinding")
-			assert.Equal(t, "https://github.com/user/repo", depdy.BaseRepo, "Failed to set dependecy base repo url")
-			assert.Equal(t, "/folder", depdy.SubFolder, "Failed to set dependecy sub folder")
+			assert.Equal(t, "https://github.com/user/repo/folder", depdy.Location, "Failed to set dependency location")
+			assert.Equal(t, false, depdy.IsBinding, "Failed to set dependency isbinding")
+			assert.Equal(t, "https://github.com/user/repo", depdy.BaseRepo, "Failed to set dependency base repo url")
+			assert.Equal(t, "/folder", depdy.SubFolder, "Failed to set dependency sub folder")
 		case "myCloudant":
 			assert.Equal(t, "/whisk.system/cloudant", depdy.Location, "Failed to set rule trigger")
-			assert.Equal(t, true, depdy.IsBinding, "Failed to set dependecy isbinding")
-			assert.Equal(t, 1, len(depdy.Parameters), "Failed to set dependecy parameter")
-			assert.Equal(t, 1, len(depdy.Annotations), "Failed to set dependecy annotation")
-			assert.Equal(t, "myAnnotation", depdy.Annotations[0].Key, "Failed to set dependecy parameter key")
-			assert.Equal(t, "Here it is", depdy.Annotations[0].Value, "Failed to set dependecy parameter value")
-			assert.Equal(t, "dbname", depdy.Parameters[0].Key, "Failed to set dependecy annotation key")
-			assert.Equal(t, "myGreatDB", depdy.Parameters[0].Value, "Failed to set dependecy annotation value")
+			assert.Equal(t, true, depdy.IsBinding, "Failed to set dependency isbinding")
+			assert.Equal(t, 1, len(depdy.Parameters), "Failed to set dependency parameter")
+			assert.Equal(t, 1, len(depdy.Annotations), "Failed to set dependency annotation")
+			assert.Equal(t, "myAnnotation", depdy.Annotations[0].Key, "Failed to set dependency parameter key")
+			assert.Equal(t, "Here it is", depdy.Annotations[0].Value, "Failed to set dependency parameter value")
+			assert.Equal(t, "dbname", depdy.Parameters[0].Key, "Failed to set dependency annotation key")
+			assert.Equal(t, "myGreatDB", depdy.Parameters[0].Value, "Failed to set dependency annotation value")
+		case "my-private-repo":
+			assert.Equal(t, "https://myusername:mypassword@github.com/user/repo/folder", depdy.Location, "Failed to set dependency location for private repo")
+			assert.Equal(t, false, depdy.IsBinding, "Failed to set dependency isbinding")
+			assert.Equal(t, "https://myusername:mypassword@github.com/user/repo", depdy.BaseRepo, "Failed to set dependency base repo url")
+			assert.Equal(t, "/folder", depdy.SubFolder, "Failed to set dependency sub folder")
 		default:
 			assert.Fail(t, "Failed to get dependency name")
 		}
diff --git a/parsers/parameters.go b/parsers/parameters.go
index bd05201..3bbb11b 100644
--- a/parsers/parameters.go
+++ b/parsers/parameters.go
@@ -318,7 +318,7 @@ func ResolveParameter(paramName string, param *Parameter, filePath string) (inte
 	// Make sure the parameter's value is a valid, non-empty string
 	if param.Value != nil && param.Type == "string" {
 		// perform $ notation replacement on string if any exist
-		value = wskenv.GetEnvVar(param.Value)
+		value = wskenv.InterpolateStringWithEnvVar(param.Value)
 	}
 
 	// JSON - Handle both cases, where value 1) is a string containing JSON, 2) is a map of JSON
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index 8b2752c..799e832 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -239,7 +239,7 @@ func convertPackageName(packageMap map[string]Package) map[string]Package {
 	packages := make(map[string]Package)
 	for packName, depPacks := range packageMap {
 		name := packName
-		packageName := wskenv.GetEnvVar(packName)
+		packageName := wskenv.InterpolateStringWithEnvVar(packName)
 		if str, ok := packageName.(string); ok {
 			name = str
 		}
diff --git a/wskenv/environment.go b/wskenv/environment.go
index 3a6cfec..cf9026e 100644
--- a/wskenv/environment.go
+++ b/wskenv/environment.go
@@ -44,7 +44,8 @@ func isValidEnvironmentVar(value string) bool {
 
 // Get the env variable value by key.
 // Get the env variable if the key is start by $
-func GetEnvVar(key interface{}) interface{} {
+// Replace all occurrences of env. variables in the input string
+func InterpolateStringWithEnvVar(key interface{}) interface{} {
 	// Assure the key itself is not nil
 	if key == nil {
 		return nil
@@ -93,7 +94,7 @@ func GetEnvVar(key interface{}) interface{} {
 // the new string with env variables replaced
 func ConvertSingleName(theName string) string {
 	if len(theName) != 0 {
-		theNameEnv := GetEnvVar(theName)
+		theNameEnv := InterpolateStringWithEnvVar(theName)
 		if str, ok := theNameEnv.(string); ok {
 			return str
 		} else {
diff --git a/wskenv/environment_test.go b/wskenv/environment_test.go
index 7961a3a..bf73cc2 100644
--- a/wskenv/environment_test.go
+++ b/wskenv/environment_test.go
@@ -25,22 +25,22 @@ import (
 )
 
 // The dollar sign test cases.
-func TestGetEnvVar(t *testing.T) {
+func TestInterpolateStringWithEnvVar(t *testing.T) {
 	os.Setenv("NoDollar", "NO dollar")
 	os.Setenv("WithDollar", "oh, dollars!")
 	os.Setenv("5000", "5000")
-	fmt.Println(GetEnvVar("NoDollar"))
-	fmt.Println(GetEnvVar("$WithDollar"))
-	fmt.Println(GetEnvVar("$5000"))
-	assert.Equal(t, "NoDollar", GetEnvVar("NoDollar"), "NoDollar should be no change.")
-	assert.Equal(t, "oh, dollars!", GetEnvVar("$WithDollar"), "dollar sign should be handled.")
-	assert.Equal(t, "5000", GetEnvVar("5000"), "Should be no difference between integer and string.")
-	assert.Equal(t, "", GetEnvVar("$WithDollarAgain"), "if not found in environemnt, return empty string.")
-	assert.Equal(t, "oh, dollars!.ccc.aaa", GetEnvVar("${WithDollar}.ccc.aaa"), "String concatenation fail")
-	assert.Equal(t, "ddd.NO dollar.aaa", GetEnvVar("ddd.${NoDollar}.aaa"), "String concatenation fail")
-	assert.Equal(t, "oh, dollars!.NO dollar.aaa", GetEnvVar("${WithDollar}.${NoDollar}.aaa"), "String concatenation fail")
-	assert.Equal(t, "ddd.ccc.oh, dollars!", GetEnvVar("ddd.ccc.${WithDollar}"), "String concatenation fail")
-	assert.Equal(t, "", GetEnvVar("$WithDollarAgain.ccc.aaa"), "String concatenation fail")
-	assert.Equal(t, "ddd..aaa", GetEnvVar("ddd.${WithDollarAgain}.aaa"), "String concatenation fail")
-	assert.Equal(t, "oh, dollars!NO dollar.NO dollar", GetEnvVar("${WithDollar}${NoDollar}.${NoDollar}"), "String concatenation fail")
+	fmt.Println(InterpolateStringWithEnvVar("NoDollar"))
+	fmt.Println(InterpolateStringWithEnvVar("$WithDollar"))
+	fmt.Println(InterpolateStringWithEnvVar("$5000"))
+	assert.Equal(t, "NoDollar", InterpolateStringWithEnvVar("NoDollar"), "NoDollar should be no change.")
+	assert.Equal(t, "oh, dollars!", InterpolateStringWithEnvVar("$WithDollar"), "dollar sign should be handled.")
+	assert.Equal(t, "5000", InterpolateStringWithEnvVar("5000"), "Should be no difference between integer and string.")
+	assert.Equal(t, "", InterpolateStringWithEnvVar("$WithDollarAgain"), "if not found in environemnt, return empty string.")
+	assert.Equal(t, "oh, dollars!.ccc.aaa", InterpolateStringWithEnvVar("${WithDollar}.ccc.aaa"), "String concatenation fail")
+	assert.Equal(t, "ddd.NO dollar.aaa", InterpolateStringWithEnvVar("ddd.${NoDollar}.aaa"), "String concatenation fail")
+	assert.Equal(t, "oh, dollars!.NO dollar.aaa", InterpolateStringWithEnvVar("${WithDollar}.${NoDollar}.aaa"), "String concatenation fail")
+	assert.Equal(t, "ddd.ccc.oh, dollars!", InterpolateStringWithEnvVar("ddd.ccc.${WithDollar}"), "String concatenation fail")
+	assert.Equal(t, "", InterpolateStringWithEnvVar("$WithDollarAgain.ccc.aaa"), "String concatenation fail")
+	assert.Equal(t, "ddd..aaa", InterpolateStringWithEnvVar("ddd.${WithDollarAgain}.aaa"), "String concatenation fail")
+	assert.Equal(t, "oh, dollars!NO dollar.NO dollar", InterpolateStringWithEnvVar("${WithDollar}${NoDollar}.${NoDollar}"), "String concatenation fail")
 }

-- 
To stop receiving notification emails like this one, please contact
mrutkowski@apache.org.