diff options
Diffstat (limited to 'python-dcae-policy/dcaepolicy')
-rw-r--r-- | python-dcae-policy/dcaepolicy/dcae_consul_client.py | 45 | ||||
-rw-r--r-- | python-dcae-policy/dcaepolicy/dcae_policy.py | 91 |
2 files changed, 1 insertions, 135 deletions
diff --git a/python-dcae-policy/dcaepolicy/dcae_consul_client.py b/python-dcae-policy/dcaepolicy/dcae_consul_client.py deleted file mode 100644 index 9856eeb..0000000 --- a/python-dcae-policy/dcaepolicy/dcae_consul_client.py +++ /dev/null @@ -1,45 +0,0 @@ -"""client to talk to consul on standard port 8500""" - -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -import requests - -CONSUL_HOST = "localhost" -CONSUL_PORT = 8500 - -class ConsulClient(object): - """talking to the local Consul agent for interfacing with Consul from the plugin. - Safe to assume that the Consul agent is always at localhost. - """ - CONSUL_SERVICE_MASK = "{0}/v1/catalog/service/{1}" - SERVICE_MASK = "http://{0}:{1}" - _consul_url = "http://{0}:{1}".format(CONSUL_HOST, CONSUL_PORT) - - @staticmethod - def get_service_url(service_name): - """find the service record in consul""" - response = requests.get(ConsulClient.CONSUL_SERVICE_MASK.format( \ - ConsulClient._consul_url, service_name)) - response.raise_for_status() - resp_json = response.json() - if resp_json: - service = resp_json[0] - return ConsulClient.SERVICE_MASK.format( \ - service["ServiceAddress"], service["ServicePort"]) diff --git a/python-dcae-policy/dcaepolicy/dcae_policy.py b/python-dcae-policy/dcaepolicy/dcae_policy.py index 1ae9b8f..d64d50f 100644 --- a/python-dcae-policy/dcaepolicy/dcae_policy.py +++ b/python-dcae-policy/dcaepolicy/dcae_policy.py @@ -19,23 +19,15 @@ # # ECOMP is a trademark and service mark of AT&T Intellectual Property. - import json -import uuid import copy from functools import wraps -import requests - from cloudify import ctx from cloudify.context import NODE_INSTANCE from cloudify.exceptions import NonRecoverableError -from .dcae_consul_client import ConsulClient - POLICIES = 'policies' -SERVICE_NAME_POLICY_HANDLER = "policy_handler" -X_ECOMP_REQUESTID = 'X-ECOMP-RequestID' POLICY_ID = 'policy_id' POLICY_APPLY_MODE = 'policy_apply_mode' @@ -44,69 +36,9 @@ POLICY_VERSION = "policyVersion" POLICY_CONFIG = 'config' DCAE_POLICY_TYPE = 'dcae.nodes.policy' POLICY_MESSAGE_TYPE = 'policy' -POLICY_NOTIFICATION_SCRIPT = 'script' class Policies(object): """static class for policy operations""" - _policy_handler_url = None - - @staticmethod - def _get_latest_policy(policy_id): - """retrieve the latest policy for policy_id from policy-handler""" - if not Policies._policy_handler_url: - Policies._policy_handler_url = ConsulClient.get_service_url(SERVICE_NAME_POLICY_HANDLER) - - ph_path = "{0}/policy_latest/{1}".format(Policies._policy_handler_url, policy_id) - headers = {X_ECOMP_REQUESTID: str(uuid.uuid4())} - - ctx.logger.info("getting latest policy from {0} headers={1}".format( \ - ph_path, json.dumps(headers))) - res = requests.get(ph_path, headers=headers) - res.raise_for_status() - - if res.status_code == requests.codes.ok: - return res.json() - return {} - - @staticmethod - def populate_policy_on_node(func): - """dcae.nodes.policy node retrieves the policy_body identified by policy_id property - from policy-handler that gets it from policy-engine. - - Places the found policy into runtime_properties["policy_body"]. - """ - if not func: - return - - @wraps(func) - def wrapper(*args, **kwargs): - """retrieve and save the latest policy body per policy_id""" - try: - if ctx.type != NODE_INSTANCE: - return func(*args, **kwargs) - - if POLICY_ID not in ctx.node.properties: - ctx.logger.error("no {0} found in ctx.node.properties".format(POLICY_ID)) - return func(*args, **kwargs) - - policy_id = ctx.node.properties[POLICY_ID] - policy = Policies._get_latest_policy(policy_id) - if policy: - ctx.logger.info("found policy {0}".format(json.dumps(policy))) - if POLICY_BODY in policy: - ctx.instance.runtime_properties[POLICY_BODY] = policy[POLICY_BODY] - else: - error = "policy not found for policy_id {0}".format(policy_id) - ctx.logger.error(error) - raise NonRecoverableError(error) - - except Exception as ex: - error = "Failed to get the policy {0}".format(str(ex)) - ctx.logger.error(error) - raise NonRecoverableError(error) - - return func(*args, **kwargs) - return wrapper @staticmethod def gather_policies_to_node(func): @@ -206,9 +138,6 @@ class Policies(object): Passes through the filtered list of updated_policies that apply to the current node instance :updated_policies: contains the list of changed policy-configs when configs_only=True. - - :notify_app_through_script: in kwargs is set to True/False to indicate whether to invoke - the script based on policy_apply_mode property in the blueprint """ def update_policies_decorator(func): """actual decorator""" @@ -223,34 +152,16 @@ class Policies(object): updated_policies = Policies._update_policies_on_ctx(updated_policies) if updated_policies: - notify_app_through_script = max( - updated_policies, - key=lambda pol: pol.get(POLICY_APPLY_MODE) == POLICY_NOTIFICATION_SCRIPT - ) - if configs_only: updated_policies = [policy[POLICY_BODY][POLICY_CONFIG] \ for policy in updated_policies \ if POLICY_BODY in policy \ and POLICY_CONFIG in policy[POLICY_BODY] \ ] - return func(updated_policies, - notify_app_through_script=notify_app_through_script, **kwargs) + return func(updated_policies, **kwargs) return wrapper return update_policies_decorator - @staticmethod - def get_notify_app_through_script(): - """returns True if any of the policy has property policy_apply_mode==script""" - if ctx.type != NODE_INSTANCE \ - or POLICIES not in ctx.instance.runtime_properties: - return - policies = ctx.instance.runtime_properties[POLICIES] - if not policies: - return - for policy_id in policies: - if policies[policy_id].get(POLICY_APPLY_MODE) == POLICY_NOTIFICATION_SCRIPT: - return True @staticmethod def get_policy_configs(): |