コード例 #1
0
    def _validate_alarming_policy(self, context, policy):
        vnf_id = policy['vnf']['id']
        # validate policy type
        type = policy['type']
        if type not in constants.POLICY_ALARMING:
            raise exceptions.VnfPolicyTypeInvalid(
                type=type,
                valid_types=constants.POLICY_ALARMING,
                policy=policy['id']
            )
        # validate alarm status
        if not self._vnf_alarm_monitor.process_alarm_for_vnf(policy):
            raise exceptions.AlarmUrlInvalid(vnf_id=vnf_id)

        # validate policy action
        action = policy['action_name']
        policy_ = None
        if action not in (constants.DEFAULT_ALARM_ACTIONS + constants.CLUSTER_ALARM_ACTIONS):
            policy_ = self.get_vnf_policy(context, action, vnf_id)
            if not policy_:
                raise exceptions.VnfPolicyNotFound(
                    vnf_id=action,
                    policy=policy['id']
                )
        LOG.debug(_("Policy %s is validated successfully") % policy)
        return policy_
コード例 #2
0
    def get_vnf_policy(self, context, policy_id, vnf_id, fields=None):
        policies = self.get_vnf_policies(context,
                                         vnf_id,
                                         filters={'name': policy_id})
        if policies:
            return policies[0]

        raise exceptions.VnfPolicyNotFound(policy=policy_id, vnf_id=vnf_id)
コード例 #3
0
ファイル: plugin.py プロジェクト: wq618/tacker
    def create_vnf_scale(self, context, vnf_id, scale):
        policy_ = self.get_vnf_policy(context, scale['scale']['policy'],
                                      vnf_id)
        if not policy_:
            raise exceptions.VnfPolicyNotFound(policy=scale['scale']['policy'],
                                               vnf_id=vnf_id)
        policy_.update({'action': scale['scale']['type']})
        self._handle_vnf_scaling(context, policy_)

        return scale['scale']
コード例 #4
0
    def update_vnf_with_reservation(self, plugin, context, vnf, policy_dict):

        alarm_url = dict()

        def create_alarm_action(action, action_list, scaling_type):
            params = dict()
            params['vnf_id'] = vnf['id']
            params['mon_policy_name'] = action
            driver = 'ceilometer'

            def _refactor_backend_policy(bk_policy_name, bk_action_name):
                policy = '%(policy_name)s%(action_name)s' % {
                    'policy_name': bk_policy_name,
                    'action_name': bk_action_name}
                return policy

            for index, policy_action_name in enumerate(action_list):
                filters = {'name': policy_action_name}
                bkend_policies = \
                    plugin.get_vnf_policies(context, vnf['id'], filters)
                if bkend_policies:
                    if constants.POLICY_SCALING in str(bkend_policies[0]):
                        action_list[index] = _refactor_backend_policy(
                            policy_action_name, scaling_type)

                # Support multiple action. Ex: respawn % notify
                action_name = '%'.join(action_list)
                params['mon_policy_action'] = action_name
                alarm_url[action] = \
                    self.call_alarm_url(driver, vnf, params)
                details = "Alarm URL set successfully: %s" % alarm_url
                vnfm_utils.log_events(t_context.get_admin_context(), vnf,
                                      constants.RES_EVT_MONITOR,
                                      details)

        before_end_action = policy_dict['reservation']['before_end_actions']
        end_action = policy_dict['reservation']['end_actions']
        start_action = policy_dict['reservation']['start_actions']

        scaling_policies = \
            plugin.get_vnf_policies(
                context, vnf['id'], filters={
                    'type': constants.POLICY_SCALING})

        if len(scaling_policies) == 0:
            raise exceptions.VnfPolicyNotFound(
                policy=constants.POLICY_SCALING, vnf_id=vnf['id'])

        for scaling_policy in scaling_policies:
            # validating start_action for scale-out policy action
            if scaling_policy['name'] not in start_action:
                raise exceptions.Invalid(
                    'Not a valid template: start_action must contain'
                    ' %s as scaling-out action' % scaling_policy['name'])

            # validating before_end and end_actions for scale-in policy action
            if scaling_policy['name'] not in before_end_action:
                if scaling_policy['name'] not in end_action:
                    raise exceptions.Invalid(
                        'Not a valid template:'
                        ' before_end_action or end_action'
                        ' should contain scaling policy: %s'
                        % scaling_policy['name'])

        for action in constants.RESERVATION_POLICY_ACTIONS:
            scaling_type = "-out" if action == 'start_actions' else "-in"
            create_alarm_action(action, policy_dict[
                'reservation'][action], scaling_type)

        return alarm_url