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 <[email protected]>
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:[email protected]/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:[email protected]/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
[email protected].

Reply via email to