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

[GitHub] mrutkows closed pull request #746: Adding support for env variables into github repo

mrutkows closed pull request #746: Adding support for env variables into github repo
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/746
 
 
   

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/deployers/deploymentreader.go b/deployers/deploymentreader.go
index 03c7abcb..9e60ff90 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 b18118e3..349891c9 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 1ac7b872..a8832fd5 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 bd05201a..3bbb11bd 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 8b2752c3..799e832d 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 3a6cfec1..cf9026e0 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 7961a3a0..bf73cc29 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")
 }


 

----------------------------------------------------------------
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