mrutkows closed pull request #678: Parameterizing trigger name rule name as
well as triggers and actions inside rule
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/678
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/manifest_parser.go b/parsers/manifest_parser.go
index 8403b47e..5061351c 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -691,7 +691,7 @@ func (dm *YAMLParser) ComposeTriggers(filePath string, pkg
Package, ma whisk.Key
for _, trigger := range pkg.GetTriggerList() {
wsktrigger := new(whisk.Trigger)
- wsktrigger.Name = trigger.Name
+ wsktrigger.Name = wskenv.ConvertSingleName(trigger.Name)
wsktrigger.Namespace = trigger.Namespace
pub := false
wsktrigger.Publish = &pub
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index 7ec496ae..dde8866a 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -1683,6 +1683,39 @@ func TestPackageName_Env_Var(t *testing.T) {
}
}
+func TestRuleName_Env_Var(t *testing.T) {
+ // read and parse manifest file with env var for rule name, and rule
trigger and action
+ testRule := "test_rule"
+ os.Setenv("rule_name", testRule)
+ testTrigger := "test_trigger"
+ os.Setenv("trigger_name", testTrigger)
+ testAction := "test_actions"
+ os.Setenv("action_name", testAction);
+ mm := NewYAMLParser()
+ manifestfile := "../tests/dat/manifest_data_rule_env_var.yaml"
+ manifest, _ := mm.ParseManifest(manifestfile)
+ rules, err := mm.ComposeRulesFromAllPackages(manifest)
+ if err != nil {
+ assert.Fail(t, "Failed to compose rules")
+ }
+ packageName := "manifest1"
+
+ assert.Equal(t, 1, len(manifest.Packages[packageName].Rules), "Get rule
list failed.")
+ for _, rule := range rules {
+ fmt.Print("ruleName: ")
+ fmt.Print(rule)
+ //var rule = manifest.Packages[packageName].Rules[rule_name]
+ switch rule.Name {
+ case testRule:
+ assert.Equal(t, "test_trigger", rule.Trigger, "Get trigger name
failed.")
+ assert.Equal(t, packageName + "/" + testAction, rule.Action, "Get
action name failed.")
+ //assert.Equal(t, "true", rule.Rule, "Get rule expression failed.")
+ default:
+ t.Error("Get rule name failed")
+ }
+ }
+}
+
func TestComposeActionForAnnotations(t *testing.T) {
manifestFile := "../tests/dat/manifest_validate_action_annotations.yaml"
mm := NewYAMLParser()
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index 9b95a097..58cd46be 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -177,18 +177,6 @@ func (yaml *YAML) GetProject() Project {
return yaml.Application
}
-func convertSinglePackageName(packageName string) string {
- if len(packageName) != 0 {
- packageNameEnv := wskenv.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 {
@@ -197,7 +185,7 @@ func convertPackageName(packageMap map[string]Package)
map[string]Package {
if str, ok := packageName.(string); ok {
name = str
}
- depPacks.Packagename =
convertSinglePackageName(depPacks.Packagename)
+ depPacks.Packagename =
wskenv.ConvertSingleName(depPacks.Packagename)
packages[name] = depPacks
}
return packages
@@ -205,12 +193,12 @@ func convertPackageName(packageMap map[string]Package)
map[string]Package {
func ReadEnvVariable(yaml *YAML) *YAML {
if yaml.Application.Name != "" {
- yaml.Application.Package.Packagename =
convertSinglePackageName(yaml.Application.Package.Packagename)
- yaml.Package.Packagename =
convertSinglePackageName(yaml.Package.Packagename)
+ yaml.Application.Package.Packagename =
wskenv.ConvertSingleName(yaml.Application.Package.Packagename)
+ yaml.Package.Packagename =
wskenv.ConvertSingleName(yaml.Package.Packagename)
yaml.Application.Packages =
convertPackageName(yaml.Application.Packages)
} else {
- yaml.Project.Package.Packagename =
convertSinglePackageName(yaml.Project.Package.Packagename)
- yaml.Package.Packagename =
convertSinglePackageName(yaml.Package.Packagename)
+ yaml.Project.Package.Packagename =
wskenv.ConvertSingleName(yaml.Project.Package.Packagename)
+ yaml.Package.Packagename =
wskenv.ConvertSingleName(yaml.Package.Packagename)
yaml.Project.Packages =
convertPackageName(yaml.Project.Packages)
}
yaml.Packages = convertPackageName(yaml.Packages)
@@ -232,13 +220,12 @@ func (trigger *Trigger) ComposeWskTrigger(kvarr
[]whisk.KeyValue) *whisk.Trigger
//********************Rule functions*************************//
func (rule *Rule) ComposeWskRule() *whisk.Rule {
wskrule := new(whisk.Rule)
- wskrule.Name = rule.Name
+ wskrule.Name = wskenv.ConvertSingleName(rule.Name)
//wskrule.Namespace = rule.Namespace
pub := false
wskrule.Publish = &pub
- wskrule.Trigger = rule.Trigger
-
- wskrule.Action = rule.Action
+ wskrule.Trigger = wskenv.ConvertSingleName(rule.Trigger)
+ wskrule.Action = wskenv.ConvertSingleName(rule.Action)
return wskrule
}
diff --git a/tests/dat/manifest_data_rule_env_var.yaml
b/tests/dat/manifest_data_rule_env_var.yaml
new file mode 100644
index 00000000..71ef1960
--- /dev/null
+++ b/tests/dat/manifest_data_rule_env_var.yaml
@@ -0,0 +1,14 @@
+# This test file is used to test the basic Trigger-Action-Rule grammar
+packages:
+ manifest1:
+ version: 1.0
+ license: Apache-2.0
+ actions:
+ first_action:
+ function: actions/hello.js
+ triggers:
+ $trigger_name:
+ rules:
+ $rule_name:
+ trigger: $trigger_name
+ action: $action_name
diff --git a/wskenv/environment.go b/wskenv/environment.go
index 97023712..50d935ba 100644
--- a/wskenv/environment.go
+++ b/wskenv/environment.go
@@ -88,3 +88,17 @@ func GetEnvVar(key interface{}) interface{} {
}
return key
}
+
+// Convert a string name with environment variables into
+// the new string with env variables replaced
+func ConvertSingleName(theName string) string {
+ if len(theName) != 0 {
+ theNameEnv := GetEnvVar(theName)
+ if str, ok := theNameEnv.(string); ok {
+ return str
+ } else {
+ return theName
+ }
+ }
+ return theName
+}
----------------------------------------------------------------
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:
[email protected]
With regards,
Apache Git Services