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.