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 42d4a54  Adding rule annotations for managed project (#731)
42d4a54 is described below

commit 42d4a54fe289a8c28e0a982b548406b852043896
Author: Priti Desai <pde...@us.ibm.com>
AuthorDate: Mon Feb 12 14:27:06 2018 -0800

    Adding rule annotations for managed project (#731)
    
    * adding annotation to rules
    
    * updating dep to include rule annotations in go client
    
    * updating unit tests
    
    * go fmt
---
 Godeps/Godeps.json              |  4 ++--
 deployers/manifestreader.go     |  2 +-
 deployers/servicedeployer.go    | 37 ++++++++++++++++++++++++++++++++++++-
 parsers/manifest_parser.go      | 32 +++++++++++++++++++++++++++-----
 parsers/manifest_parser_test.go |  4 ++--
 parsers/yamlparser.go           |  3 ++-
 6 files changed, 70 insertions(+), 12 deletions(-)

diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json
index 1758c5d..d6613b3 100644
--- a/Godeps/Godeps.json
+++ b/Godeps/Godeps.json
@@ -105,11 +105,11 @@
                },
                {
                        "ImportPath": 
"github.com/apache/incubator-openwhisk-client-go/whisk",
-                       "Rev": "d7cab4297a25e2cc25492b85b64e7ec000da9ffb"
+                       "Rev": "a81a9be21faae877e858c6ab9122a40419577f95"
                },
                {
                        "ImportPath": 
"github.com/apache/incubator-openwhisk-client-go/wski18n",
-                       "Rev": "d7cab4297a25e2cc25492b85b64e7ec000da9ffb"
+                       "Rev": "a81a9be21faae877e858c6ab9122a40419577f95"
                },
                {
                        "ImportPath": "github.com/pelletier/go-buffruneio",
diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index 0442abc..6c433fb 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -88,7 +88,7 @@ func (deployer *ManifestReader) HandleYaml(sdeployer 
*ServiceDeployer, manifestP
                return wskderrors.NewYAMLFileFormatError(manifestName, err)
        }
 
-       rules, err := manifestParser.ComposeRulesFromAllPackages(manifest)
+       rules, err := manifestParser.ComposeRulesFromAllPackages(manifest, ma)
        if err != nil {
                return wskderrors.NewYAMLFileFormatError(manifestName, err)
        }
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 14fc1c8..1bb2f5e 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -603,9 +603,44 @@ func (deployer *ServiceDeployer) RefreshManagedTriggers(ma 
map[string]interface{
        return nil
 }
 
-// TODO() engage community to allow metadata (annotations) on Rules
 // TODO() display "update" | "synced" messages pre/post
 func (deployer *ServiceDeployer) RefreshManagedRules(ma 
map[string]interface{}) error {
+       options := whisk.RuleListOptions{}
+       // Get list of rules in your namespace
+       rules, _, err := deployer.Client.Rules.List(&options)
+       if err != nil {
+               return err
+       }
+       // iterate over the list of rules to determine whether any of them was 
part of managed project
+       // and now deleted from manifest file we can determine that from the 
managed annotation
+       // If a rule has attached managed annotation with the project name 
equals to the current project name
+       // but the project hash is different (project hash differs since the 
rule is deleted from the manifest file)
+       for _, rule := range rules {
+               // rule has attached managed annotation
+               if a := rule.Annotations.GetValue(utils.MANAGED); a != nil {
+                       // decode the JSON blob and retrieve __OW_PROJECT_NAME 
and __OW_PROJECT_HASH
+                       ta := a.(map[string]interface{})
+                       if ta[utils.OW_PROJECT_NAME] == 
ma[utils.OW_PROJECT_NAME] && ta[utils.OW_PROJECT_HASH] != 
ma[utils.OW_PROJECT_HASH] {
+                               // we have found a trigger which was earlier 
part of the current project
+                               output := 
wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
+                                       map[string]interface{}{
+                                               wski18n.KEY_KEY:     
parsers.YAML_KEY_RULE,
+                                               wski18n.KEY_NAME:    rule.Name,
+                                               wski18n.KEY_PROJECT: 
ma[utils.OW_PROJECT_NAME]})
+                               wskprint.PrintOpenWhiskWarning(output)
+
+                               var err error
+                               err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, 
func() error {
+                                       _, err := 
deployer.Client.Rules.Delete(rule.Name)
+                                       return err
+                               })
+
+                               if err != nil {
+                                       return err
+                               }
+                       }
+               }
+       }
        return nil
 }
 
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index b8405b1..88a3b03 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -827,12 +827,12 @@ func (dm *YAMLParser) ComposeTriggers(filePath string, 
pkg Package, ma whisk.Key
        return t1, nil
 }
 
-func (dm *YAMLParser) ComposeRulesFromAllPackages(manifest *YAML) 
([]*whisk.Rule, error) {
+func (dm *YAMLParser) ComposeRulesFromAllPackages(manifest *YAML, ma 
whisk.KeyValue) ([]*whisk.Rule, error) {
        var rules []*whisk.Rule = make([]*whisk.Rule, 0)
        manifestPackages := make(map[string]Package)
 
        if manifest.Package.Packagename != "" {
-               return dm.ComposeRules(manifest.Package, 
manifest.Package.Packagename)
+               return dm.ComposeRules(manifest.Package, 
manifest.Package.Packagename, ma)
        } else {
                if len(manifest.Packages) != 0 {
                        manifestPackages = manifest.Packages
@@ -842,7 +842,7 @@ func (dm *YAMLParser) ComposeRulesFromAllPackages(manifest 
*YAML) ([]*whisk.Rule
        }
 
        for n, p := range manifestPackages {
-               r, err := dm.ComposeRules(p, n)
+               r, err := dm.ComposeRules(p, n, ma)
                if err == nil {
                        rules = append(rules, r...)
                } else {
@@ -852,16 +852,38 @@ func (dm *YAMLParser) 
ComposeRulesFromAllPackages(manifest *YAML) ([]*whisk.Rule
        return rules, nil
 }
 
-func (dm *YAMLParser) ComposeRules(pkg Package, packageName string) 
([]*whisk.Rule, error) {
+func (dm *YAMLParser) ComposeRules(pkg Package, packageName string, ma 
whisk.KeyValue) ([]*whisk.Rule, error) {
        var r1 []*whisk.Rule = make([]*whisk.Rule, 0)
 
        for _, rule := range pkg.GetRuleList() {
-               wskrule := rule.ComposeWskRule()
+               wskrule := new(whisk.Rule)
+               wskrule.Name = wskenv.ConvertSingleName(rule.Name)
+               //wskrule.Namespace = rule.Namespace
+               pub := false
+               wskrule.Publish = &pub
+               wskrule.Trigger = wskenv.ConvertSingleName(rule.Trigger)
+               wskrule.Action = wskenv.ConvertSingleName(rule.Action)
                act := strings.TrimSpace(wskrule.Action.(string))
                if !strings.ContainsRune(act, '/') && !strings.HasPrefix(act, 
packageName+"/") {
                        act = path.Join(packageName, act)
                }
                wskrule.Action = act
+               listOfAnnotations := make(whisk.KeyValueArr, 0)
+               for name, value := range rule.Annotations {
+                       var keyVal whisk.KeyValue
+                       keyVal.Key = name
+                       keyVal.Value = wskenv.GetEnvVar(value)
+                       listOfAnnotations = append(listOfAnnotations, keyVal)
+               }
+               if len(listOfAnnotations) > 0 {
+                       wskrule.Annotations = append(wskrule.Annotations, 
listOfAnnotations...)
+               }
+
+               // add managed annotations if its a managed deployment
+               if utils.Flags.Managed {
+                       wskrule.Annotations = append(wskrule.Annotations, ma)
+               }
+
                r1 = append(r1, wskrule)
        }
        return r1, nil
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index cd07c5c..af906d1 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -1327,7 +1327,7 @@ func TestComposeRules(t *testing.T) {
        // read and parse manifest.yaml file
        p := NewYAMLParser()
        m, _ := p.ParseManifest(tmpfile.Name())
-       ruleList, err := p.ComposeRulesFromAllPackages(m)
+       ruleList, err := p.ComposeRulesFromAllPackages(m, whisk.KeyValue{})
        if err != nil {
                assert.Fail(t, "Failed to compose rules")
        }
@@ -1800,7 +1800,7 @@ func TestRuleName_Env_Var(t *testing.T) {
        mm := NewYAMLParser()
        manifestfile := "../tests/dat/manifest_data_rule_env_var.yaml"
        manifest, _ := mm.ParseManifest(manifestfile)
-       rules, err := mm.ComposeRulesFromAllPackages(manifest)
+       rules, err := mm.ComposeRulesFromAllPackages(manifest, whisk.KeyValue{})
        if err != nil {
                assert.Fail(t, "Failed to compose rules")
        }
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index 94227af..8b2752c 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -173,7 +173,8 @@ type Rule struct {
        Action string `yaml:"action"` //used in manifest.yaml
        Rule   string `yaml:"rule"`   //used in manifest.yaml
        //mapping to wsk.Rule.Name
-       Name string
+       Name        string
+       Annotations map[string]interface{} `yaml:"annotations,omitempty"`
 }
 
 type Repository struct {

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

Reply via email to