- def _configure_scaling_groups(self, nsr_id: str):
- log.debug("_configure_scaling_groups: %s", nsr_id)
- # TODO(diazb): Check for alarm creation on exception and clean resources if needed.
- # TODO: Add support for non-nfvi metrics
- with database.db.atomic():
- vnfrs = self.db_client.get_vnfrs(nsr_id)
- log.info("Found %s vnfrs", len(vnfrs))
- for vnfr in vnfrs:
- vnfd = self.db_client.get_vnfd(vnfr['vnfd-id'])
- log.info("Looking for vnfd %s", vnfr['vnfd-id'])
- scaling_groups = vnfd['scaling-group-descriptor']
- vnf_monitoring_params = vnfd['monitoring-param']
- for scaling_group in scaling_groups:
- try:
- scaling_group_record = ScalingGroup.select().where(
- ScalingGroup.nsr_id == nsr_id,
- ScalingGroup.vnf_member_index == vnfr['member-vnf-index-ref'],
- ScalingGroup.name == scaling_group['name']
- ).get()
- log.info("Found existing scaling group record in DB...")
- except ScalingGroup.DoesNotExist:
- log.info("Creating scaling group record in DB...")
- scaling_group_record = ScalingGroup.create(
- nsr_id=nsr_id,
- vnf_member_index=vnfr['member-vnf-index-ref'],
- name=scaling_group['name'],
- content=json.dumps(scaling_group)
- )
- log.info(
- "Created scaling group record in DB : nsr_id=%s, vnf_member_index=%d, name=%s, content=%s",
- scaling_group_record.nsr_id,
- scaling_group_record.vnf_member_index,
- scaling_group_record.name,
- scaling_group_record.content)
- for scaling_policy in scaling_group['scaling-policy']:
- if scaling_policy['scaling-type'] != 'automatic':
- continue
- try:
- scaling_policy_record = ScalingPolicy.select().join(ScalingGroup).where(
- ScalingPolicy.name == scaling_policy['name'],
- ScalingGroup.id == scaling_group_record.id
- ).get()
- log.info("Found existing scaling policy record in DB...")
- except ScalingPolicy.DoesNotExist:
- log.info("Creating scaling policy record in DB...")
- scaling_policy_record = ScalingPolicy.create(
- nsr_id=nsr_id,
- name=scaling_policy['name'],
- cooldown_time=scaling_policy['cooldown-time'],
- scaling_group=scaling_group_record
- )
- log.info("Created scaling policy record in DB : name=%s, scaling_group.name=%s",
- scaling_policy_record.name,
- scaling_policy_record.scaling_group.name)
-
- for scaling_criteria in scaling_policy['scaling-criteria']:
- try:
- scaling_criteria_record = ScalingCriteria.select().join(ScalingPolicy).where(
- ScalingPolicy.id == scaling_policy_record.id,
- ScalingCriteria.name == scaling_criteria['name']
- ).get()
- log.info("Found existing scaling criteria record in DB...")
- except ScalingCriteria.DoesNotExist:
- log.info("Creating scaling criteria record in DB...")
- scaling_criteria_record = ScalingCriteria.create(
- nsr_id=nsr_id,
- name=scaling_criteria['name'],
- scaling_policy=scaling_policy_record
- )
- log.info(
- "Created scaling criteria record in DB : name=%s, scaling_policy.name=%s",
- scaling_criteria_record.name,
- scaling_criteria_record.scaling_policy.name)
+ async def _handle_scaled(self, content):
+ log.debug("_handle_scaled: %s", content)
+ nslcmop_id = content['nslcmop_id']
+ nslcmop = self.db_client.get_nslcmop(nslcmop_id)
+ if nslcmop['operationState'] == 'COMPLETED' or nslcmop['operationState'] == 'PARTIALLY_COMPLETED':
+ nsr_id = nslcmop['nsInstanceId']
+ log.info("Configuring scaled service with nsr_id: %s", nsr_id)
+ await self.autoscaling_service.configure_scaling_groups(nsr_id)
+ await self.autoscaling_service.delete_orphaned_alarms(nsr_id)
+ await self.alarming_service.configure_vnf_alarms(nsr_id)
+ else:
+ log.debug(
+ "Network service is not in COMPLETED or PARTIALLY_COMPLETED state. "
+ "Current state is %s. Skipping...",
+ nslcmop['operationState'])