+
+ db_nsr = self.db_client.get_nsr(nsr_id)
+ nb_scale_op = 0
+ if db_nsr["_admin"].get("scaling-group"):
+ db_nsr_admin = db_nsr["_admin"][
+ "scaling-group"
+ ]
+ for (
+ admin_scale_index,
+ admin_scale_info,
+ ) in enumerate(db_nsr_admin):
+ if (
+ admin_scale_info["name"]
+ == scaling_aspect["name"]
+ ):
+ nb_scale_op = admin_scale_info.get(
+ "nb-scale-op", 0
+ )
+ break
+ min_instance_count = 1
+ for vdu_profile in df.get("vdu-profile", ()):
+ if vdu_profile.get("id") == vdu_id:
+ min_instance_count = int(
+ vdu_profile.get(
+ "min-number-of-instances ", 1
+ )
+ )
+ break
+ if nb_scale_op >= min_instance_count:
+ alarm_uuid = (
+ await self.mon_client.create_alarm(
+ metric_name=metric_name,
+ ns_id=nsr_id,
+ vdu_name=vdur["name"],
+ vnf_member_index=vnfr[
+ "member-vnf-index-ref"
+ ],
+ threshold=scaling_criteria[
+ "scale-in-threshold"
+ ],
+ operation=scaling_criteria[
+ "scale-in-relational-operation"
+ ],
+ action="scale_in",
+ )
+ )
+ alarm = ScalingAlarmRepository.create(
+ alarm_uuid=alarm_uuid,
+ action="scale_in",
+ vnf_member_index=vnfr[
+ "member-vnf-index-ref"
+ ],
+ vdu_name=vdur["name"],
+ scaling_criteria=scaling_criteria_record,
+ )
+ alarms_created.append(alarm)