X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Fautoscaling%2Fservice.py;h=33472fd26cdba54d6703718425bca9b7cbe5c6cb;hb=1087dcb824d02e6b1f83d6c34375f90701a724c6;hp=2709f642f9ecd6f1f753cc37f7298cccae4ae1ba;hpb=4584f8e86a492d67d120bfea1195eff1475c0a65;p=osm%2FPOL.git diff --git a/osm_policy_module/autoscaling/service.py b/osm_policy_module/autoscaling/service.py index 2709f64..33472fd 100644 --- a/osm_policy_module/autoscaling/service.py +++ b/osm_policy_module/autoscaling/service.py @@ -26,6 +26,8 @@ import asyncio import datetime import json import logging +import operator +import functools from osm_policy_module.common.common_db_client import CommonDbClient from osm_policy_module.common.lcm_client import LcmClient @@ -57,7 +59,7 @@ class AutoscalingService: self.mon_client = MonClient(config, loop=self.loop) self.lcm_client = LcmClient(config, loop=self.loop) - async def configure_scaling_groups(self, nsr_id: str): + async def configure_scaling_groups(self, nsr_id: str, vnf_member_index=None): """ Configures scaling groups for a network service. Creates records in DB. Creates alarms in MON. :param nsr_id: Network service record id @@ -71,7 +73,13 @@ class AutoscalingService: try: with database.db.atomic() as tx: try: - vnfrs = self.db_client.get_vnfrs(nsr_id) + if vnf_member_index is None: + vnfrs = self.db_client.get_vnfrs(nsr_id) + else: + vnfrs = [] + vnfr = self.db_client.get_vnfr(nsr_id, vnf_member_index) + vnfrs.append(vnfr) + # vnfrs = self.db_client.get_vnfrs(nsr_id) for vnfr in vnfrs: log.debug("Processing vnfr: %s", vnfr) vnfd = self.db_client.get_vnfd(vnfr["vnfd-id"]) @@ -190,6 +198,7 @@ class AutoscalingService: operation=scaling_criteria[ "scale-in-relational-operation" ], + action="scale_in", ) ) alarm = ScalingAlarmRepository.create( @@ -215,6 +224,7 @@ class AutoscalingService: operation=scaling_criteria[ "scale-out-relational-operation" ], + action="scale_out", ) alarm = ScalingAlarmRepository.create( alarm_uuid=alarm_uuid, @@ -243,15 +253,21 @@ class AutoscalingService: finally: database.db.close() - async def delete_scaling_groups(self, nsr_id: str): + async def delete_scaling_groups(self, nsr_id: str, vnf_member_index=None): log.debug("Deleting scaling groups for network service %s", nsr_id) database.db.connect() try: with database.db.atomic() as tx: try: - for scaling_group in ScalingGroupRepository.list( - ScalingGroup.nsr_id == nsr_id - ): + if vnf_member_index is None: + scale_conditions = ScalingGroup.nsr_id == nsr_id + else: + query_list = [ + ScalingGroup.nsr_id == nsr_id, + ScalingGroup.vnf_member_index == vnf_member_index, + ] + scale_conditions = functools.reduce(operator.and_, query_list) + for scaling_group in ScalingGroupRepository.list(scale_conditions): for scaling_policy in scaling_group.scaling_policies: for scaling_criteria in scaling_policy.scaling_criterias: for alarm in scaling_criteria.scaling_alarms: