summaryrefslogtreecommitdiffstats
path: root/onap-dcae-dcaepolicy-lib/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'onap-dcae-dcaepolicy-lib/README.md')
-rw-r--r--onap-dcae-dcaepolicy-lib/README.md93
1 files changed, 39 insertions, 54 deletions
diff --git a/onap-dcae-dcaepolicy-lib/README.md b/onap-dcae-dcaepolicy-lib/README.md
index ff37256..b46f0b1 100644
--- a/onap-dcae-dcaepolicy-lib/README.md
+++ b/onap-dcae-dcaepolicy-lib/README.md
@@ -1,4 +1,5 @@
# onap-dcae-dcaepolicy-lib - policy in dcae controller
+
- python-package to be used in cloudify plugins to maintain the policies lifecycle
## upload the python package to pypi server
@@ -8,23 +9,26 @@ python setup.py sdist upload
```
---
-# usage in plugins
-**requirements.txt**
+## usage in plugins
+
+### **requirements.txt**
+
```python
onap-dcae-dcaepolicy-lib==1.0.0
```
-**tasks.py**
-- import
+### **tasks.py**
+
+import
```python
from onap_dcae_dcaepolicy_lib import Policies
```
-# examples of **@operation** with **@Policies.<>** decorator
+### examples of **@operation** with **@Policies.<>** decorator
-## Usage
+### Usage:
import the dcaepolicy-node-type.yaml into your blueprint to use the dcae.nodes.type node
@@ -46,9 +50,12 @@ node_templates:
Then the dcaepolicyplugin will bring the latest policy to the dcae.nodes.policy node during the install workflow of cloudify.
-------
-## cloudify.interfaces.lifecycle.**configure**
+---
+
+### cloudify.interfaces.lifecycle.**configure**
+
- gather policy data into runtime_properties of policy consumer node
+
```yaml
cloudify.interfaces.lifecycle:
configure:
@@ -64,23 +71,15 @@ APPLICATION_CONFIG = "application_config"
SERVICE_COMPONENT_NAME = "service_component_name"
@operation
-@Policies.gather_policies_to_node
+@Policies.gather_policies_to_node()
def node_configure(**kwargs):
- """decorate with @Policies.gather_policies_to_node on policy consumer node to
+ """decorate with @Policies.gather_policies_to_node() on policy consumer node to
prepopulate runtime_properties[POLICIES]
"""
- app_config = None
- if APPLICATION_CONFIG in ctx.node.properties:
- # dockerized blueprint puts the app config into property application_config
- app_config = ctx.node.properties.get(APPLICATION_CONFIG)
- else:
- # CDAP components expect that in property app_config
- app_config = ctx.node.properties.get("app_config")
-
- app_config = Policies.shallow_merge_policies_into(app_config)
+ app_config = ctx.node.properties.get(APPLICATION_CONFIG)
+
ctx.instance.runtime_properties[APPLICATION_CONFIG] = app_config
- ctx.logger.info("example: applied policy_configs to property app_config: {0}" \
- .format(json.dumps(app_config)))
+ ctx.logger.info("app_config: {0}".format(json.dumps(app_config)))
if SERVICE_COMPONENT_NAME in ctx.instance.runtime_properties:
ctx.logger.info("saving app_config({0}) to consul under key={1}" \
@@ -88,16 +87,6 @@ def node_configure(**kwargs):
ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME]))
DiscoveryClient.put_kv(ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME], app_config)
- # alternative 1 - use the list of policy configs from policies in runtime_properties
- policy_configs = Policies.get_policy_configs()
- if policy_configs:
- ctx.logger.warn("TBD: apply policy_configs: {0}".format(json.dumps(policy_configs)))
-
- # alternative 2 - use the policies dict by policy_id from runtime_properties
- if POLICIES in ctx.instance.runtime_properties:
- policies = ctx.instance.runtime_properties[POLICIES]
- ctx.logger.warn("TBD: apply policies: {0}".format(json.dumps(policies)))
-
ctx.logger.info("deploying the demo component: {0}...".format(ctx.node.id))
demo_app = DemoApp(ctx.node.id)
demo_app.start()
@@ -105,8 +94,10 @@ def node_configure(**kwargs):
demo_app.get_logs()
```
-------
-## execute-operation **policy-update**
+---
+
+### execute-operation **policy-update**
+
```yaml
dcae.interfaces.policy:
policy_update:
@@ -114,6 +105,7 @@ dcae.interfaces.policy:
```
execute-operation **policy-update** that gets a list of changed policy-configs
+
```python
from .discovery import DiscoveryClient
@@ -123,25 +115,13 @@ APPLICATION_CONFIG = "application_config"
SERVICE_COMPONENT_NAME = "service_component_name"
@operation
-@Policies.update_policies_on_node(configs_only=True)
-def policy_update(updated_policies, **kwargs):
+@Policies.update_policies_on_node()
+def policy_update(updated_policies, removed_policies=None, policies=None, **kwargs):
"""decorate with @Policies.update_policies_on_node() to update runtime_properties[POLICIES]
:updated_policies: contains the list of changed policy-configs when configs_only=True (default).
Use configs_only=False to bring the full policy objects in :updated_policies:.
"""
- app_config = DiscoveryClient.get_value(ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME])
-
- # This is how to merge the policies into app_config object
- app_config = Policies.shallow_merge_policies_into(app_config)
-
- ctx.logger.info("merged updated_policies {0} into app_config {1}"
- .format(json.dumps(updated_policies), json.dumps(app_config)))
-
- ctx.instance.runtime_properties[APPLICATION_CONFIG] = app_config
-
- DiscoveryClient.put_kv(ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME], app_config)
-
# example how to notify the dockerized component about the policy change
notify_app_through_script = True
if notify_app_through_script:
@@ -149,24 +129,29 @@ def policy_update(updated_policies, **kwargs):
.format(json.dumps(updated_policies), json.dumps(app_config)))
demo_app = DemoApp(ctx.node.id)
demo_app.notify_app_through_script(
- POLICY_MESSAGE_TYPE,
+ "policies",
updated_policies=updated_policies,
- application_config=app_config
+ removed_policies=removed_policies,
+ policies=policies
)
```
example of the **changed\_policies** with **configs_only=True**
+
- list of config objects (preparsed from json string)
+
- manual mess produced by mock_policy_updater
+
```json
[{
- "policy_updated_from_ver": "2",
- "policy_updated_to_ver": "3",
- "updated_policy_id": "DCAE_alex.Config_db_client_policy_id_value",
- "policy_hello": "world!",
- "policy_updated_ts": "2017-08-17T21:49:39.279187Z"
+ "policy_updated_from_ver": "2",
+ "policy_updated_to_ver": "3",
+ "updated_policy_id": "DCAE_alex.Config_db_client_policy_id_value",
+ "policy_hello": "world!",
+ "policy_updated_ts": "2017-08-17T21:49:39.279187Z"
}]
```
+
---
example of **policies** in runtime_properties **before policy-update**