diff options
Diffstat (limited to 'onap-dcae-dcaepolicy-lib/README.md')
-rw-r--r-- | onap-dcae-dcaepolicy-lib/README.md | 93 |
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** |