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_
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)
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']
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