Merge "Update docker tagging"
diff --git a/onap-dcae-dcaepolicy-lib/onap_dcae_dcaepolicy_lib/dcae_policy.py b/onap-dcae-dcaepolicy-lib/onap_dcae_dcaepolicy_lib/dcae_policy.py
index 5a3a0b2..65c2614 100644
--- a/onap-dcae-dcaepolicy-lib/onap_dcae_dcaepolicy_lib/dcae_policy.py
+++ b/onap-dcae-dcaepolicy-lib/onap_dcae_dcaepolicy_lib/dcae_policy.py
@@ -48,6 +48,8 @@
 ACTION_GATHERED = "gathered"
 ACTION_UPDATED = "updated"
 
+CONFIG_ATTRIBUTES = "configAttributes"
+
 class Policies(object):
     """static class for policy operations"""
     _updated_policies = {}
@@ -99,6 +101,23 @@
         return True
 
     @staticmethod
+    def _fix_policy_filter(policy_filter):
+        if CONFIG_ATTRIBUTES in policy_filter:
+            config_attributes = policy_filter.get(CONFIG_ATTRIBUTES)
+            if isinstance(config_attributes, dict):
+                return
+            try:
+                config_attributes = json.loads(config_attributes)
+                if config_attributes and isinstance(config_attributes, dict):
+                    policy_filter[CONFIG_ATTRIBUTES] = config_attributes
+                    return
+            except (ValueError, TypeError):
+                pass
+            if config_attributes:
+                ctx.logger.warn("unexpected %s: %s", CONFIG_ATTRIBUTES, config_attributes)
+            del policy_filter[CONFIG_ATTRIBUTES]
+
+    @staticmethod
     def _gather_policies(target, policies, policy_filters):
         """adds the policies and policy-filter from dcae.nodes.policies node to policies"""
         if DCAE_POLICIES_TYPE not in target.node.type_hierarchy:
@@ -106,14 +125,16 @@
 
         property_policy_filter = target.node.properties.get(POLICY_FILTER)
         if property_policy_filter:
-            policy_filter = dict(
+            policy_filter = deepcopy(dict(
                 (k, v) for (k, v) in dict(property_policy_filter).iteritems()
                 if v or isinstance(v, (int, float))
-            )
+            ))
+            Policies._fix_policy_filter(policy_filter)
+
             if policy_filter:
                 policy_filters[target.instance.id] = {
                     POLICY_FILTER_ID : target.instance.id,
-                    POLICY_FILTER : deepcopy(policy_filter)
+                    POLICY_FILTER : policy_filter
                 }
 
         filtered_policies = target.instance.runtime_properties.get(POLICIES_FILTERED)
diff --git a/onap-dcae-dcaepolicy-lib/pom.xml b/onap-dcae-dcaepolicy-lib/pom.xml
index a60d848..8fce077 100644
--- a/onap-dcae-dcaepolicy-lib/pom.xml
+++ b/onap-dcae-dcaepolicy-lib/pom.xml
@@ -28,7 +28,7 @@
   <groupId>org.onap.dcaegen2.utils</groupId>
   <artifactId>onap-dcae-dcaepolicy-lib</artifactId>
   <name>dcaegen2-utils-onap-dcae-dcaepolicy-lib</name>
-  <version>2.2.0-SNAPSHOT</version>
+  <version>2.3.0-SNAPSHOT</version>
   <url>http://maven.apache.org</url>
 
   <properties>
diff --git a/onap-dcae-dcaepolicy-lib/setup.py b/onap-dcae-dcaepolicy-lib/setup.py
index eed69f0..55dbaf3 100644
--- a/onap-dcae-dcaepolicy-lib/setup.py
+++ b/onap-dcae-dcaepolicy-lib/setup.py
@@ -23,7 +23,7 @@
 setup(
     name='onap-dcae-dcaepolicy-lib',
     description='lib of policy decorators to be used by cloudify plugins of dcae controller',
-    version="2.2.0",
+    version="2.3.0",
     author='Alex Shatov',
     author_email="alexs@att.com",
     license='Apache 2',
diff --git a/onap-dcae-dcaepolicy-lib/tests/test_dcae_policy.py b/onap-dcae-dcaepolicy-lib/tests/test_dcae_policy.py
index 81958f0..37ab9f6 100644
--- a/onap-dcae-dcaepolicy-lib/tests/test_dcae_policy.py
+++ b/onap-dcae-dcaepolicy-lib/tests/test_dcae_policy.py
@@ -40,6 +40,7 @@
 POLICY_NAME = "policyName"
 POLICY_BODY = 'policy_body'
 POLICY_CONFIG = 'config'
+CONFIG_NAME = "ConfigName"
 
 MONKEYED_POLICY_ID = 'monkeyed.Config_peach'
 MONKEYED_POLICY_ID_2 = 'monkeyed.Config_peach_2'
@@ -90,7 +91,7 @@
 
         matching_conditions = {
             "ONAPName": "DCAE",
-            "ConfigName": "alex_config_name"
+            CONFIG_NAME: "alex_config_name"
         }
         if priority is not None:
             matching_conditions["priority"] = priority
@@ -183,12 +184,6 @@
 
 @CtxLogger.log_ctx(pre_log=True, after_log=True, exe_task='exe_task')
 @Policies.gather_policies_to_node()
-def node_configure_default_order(**kwargs):
-    """default policy sorting because no param of policy_apply_order_path"""
-    operation_node_configure(**kwargs)
-
-@CtxLogger.log_ctx(pre_log=True, after_log=True, exe_task='exe_task')
-@Policies.gather_policies_to_node()
 def node_configure(**kwargs):
     """decorate with @Policies.gather_policies_to_node on policy consumer node to
     bring all policies to runtime_properties["policies"]
@@ -333,7 +328,12 @@
                 'dcae_policies_node_id',
                 'dcae_policies_node_name',
                 dcae_policy.DCAE_POLICIES_TYPE,
-                {dcae_policy.POLICY_FILTER: {POLICY_NAME: MONKEYED_POLICY_ID_M + ".*"}},
+                {dcae_policy.POLICY_FILTER: {
+                    POLICY_NAME: MONKEYED_POLICY_ID_M + ".*",
+                    dcae_policy.CONFIG_ATTRIBUTES: json.dumps({
+                        CONFIG_NAME: "alex_config_name"
+                    })
+                }},
                 None,
                 {dcae_policy.POLICIES_FILTERED: {
                     MONKEYED_POLICY_ID_M:
@@ -471,31 +471,7 @@
 @cfy_ctx(include_bad=True)
 def test_gather_policies_to_node():
     """test gather_policies_to_node"""
-    node_configure_default_order()
-
-    runtime_properties = ctx.instance.runtime_properties
-    ctx.logger.info("runtime_properties: {0}".format(json.dumps(runtime_properties)))
-
-    assert dcae_policy.POLICIES in runtime_properties
-    policies = runtime_properties[dcae_policy.POLICIES]
-    ctx.logger.info("policies: {0}".format(json.dumps(policies)))
-
-@cfy_ctx(include_bad=True)
-def test_policies_wrong_order():
-    """test gather_policies_to_node"""
-    node_configure_wrong_order_path()
-
-    runtime_properties = ctx.instance.runtime_properties
-    ctx.logger.info("runtime_properties: {0}".format(json.dumps(runtime_properties)))
-
-    assert dcae_policy.POLICIES in runtime_properties
-    policies = runtime_properties[dcae_policy.POLICIES]
-    ctx.logger.info("policies: {0}".format(json.dumps(policies)))
-
-@cfy_ctx(include_bad=True)
-def test_policies_empty_order():
-    """test gather_policies_to_node"""
-    node_configure_empty_order_path()
+    node_configure()
 
     runtime_properties = ctx.instance.runtime_properties
     ctx.logger.info("runtime_properties: {0}".format(json.dumps(runtime_properties)))