def CreateAutoscalerResource(self, igm_ref, args): if _IsZonalGroup(igm_ref): scope_type = 'zone' location = managed_instance_groups_utils.CreateZoneRef( self.resources, igm_ref) zones, regions = [location], None else: scope_type = 'region' location = managed_instance_groups_utils.CreateRegionRef( self.resources, igm_ref) zones, regions = None, [location] autoscaler = managed_instance_groups_utils.AutoscalerForMig( mig_name=igm_ref.Name(), autoscalers=managed_instance_groups_utils.AutoscalersForLocations( regions=regions, zones=zones, compute=self.compute, http=self.http, batch_url=self.batch_url), location=location, scope_type=scope_type) autoscaler_name = getattr(autoscaler, 'name', None) new_one = autoscaler_name is None autoscaler_name = autoscaler_name or args.name if _IsZonalGroup(igm_ref): autoscaler_resource = managed_instance_groups_utils.BuildAutoscaler( args, self.messages, igm_ref, autoscaler_name) else: autoscaler_resource = managed_instance_groups_utils.BuildAutoscaler( args, self.messages, igm_ref, autoscaler_name) return autoscaler_resource, new_one
def GetAutoscalerResource(self, igm_ref, args): if _IsZonalGroup(igm_ref): scope_name = igm_ref.zone scope_type = 'zone' zones, regions = [scope_name], None else: scope_name = igm_ref.region scope_type = 'region' zones, regions = None, [scope_name] autoscaler = managed_instance_groups_utils.AutoscalerForMig( mig_name=args.name, autoscalers=managed_instance_groups_utils.AutoscalersForLocations( regions=regions, zones=zones, project=self.project, compute=self.compute, http=self.http, batch_url=self.batch_url), project=self.project, scope_name=scope_name, scope_type=scope_type) if autoscaler is None: raise managed_instance_groups_utils.ResourceNotFoundException( 'The managed instance group is not autoscaled.') return autoscaler
def _GenerateAutoscalerDeleteRequests(self, holder, project, mig_requests): """Generates Delete requestes for autoscalers attached to instance groups. Args: holder: ComputeApiHolder, object encapsulating compute api. project: str, project this request should apply to. mig_requests: Messages which will be sent to delete instance group managers. Returns: Messages, which will be sent to delete autoscalers. """ mig_requests = zip(*mig_requests)[2] if mig_requests else [] zone_migs = [(request.instanceGroupManager, 'zone', managed_instance_groups_utils.CreateZoneRef( holder.resources, request)) for request in mig_requests if hasattr(request, 'zone') and request.zone is not None] region_migs = [ (request.instanceGroupManager, 'region', managed_instance_groups_utils.CreateRegionRef( holder.resources, request)) for request in mig_requests if hasattr(request, 'region') and request.region is not None ] zones = zip(*zone_migs)[2] if zone_migs else [] regions = zip(*region_migs)[2] if region_migs else [] client = holder.client.apitools_client messages = client.MESSAGES_MODULE autoscalers_to_delete = managed_instance_groups_utils.AutoscalersForMigs( migs=zone_migs + region_migs, autoscalers=managed_instance_groups_utils.AutoscalersForLocations( zones=zones, regions=regions, compute=client, http=client.http, batch_url=holder.client.batch_url)) requests = [] for autoscaler in autoscalers_to_delete: if autoscaler.zone: service = client.autoscalers request = messages.ComputeAutoscalersDeleteRequest( zone=path_simplifier.Name(autoscaler.zone)) else: service = client.regionAutoscalers request = messages.ComputeRegionAutoscalersDeleteRequest( region=path_simplifier.Name(autoscaler.region)) request.autoscaler = autoscaler.name request.project = project requests.append((service, 'Delete', request)) return requests
def _GenerateAutoscalerDeleteRequests(self, mig_requests): """Generates Delete requestes for autoscalers attached to instance groups. Args: mig_requests: Messages which will be sent to delete instance group managers. Returns: Messages, which will be sent to delete autoscalers. """ mig_requests = zip(*mig_requests)[2] if mig_requests else [] zone_migs = [(request.instanceGroupManager, 'zone', request.zone) for request in mig_requests if hasattr(request, 'zone') and request.zone is not None] region_migs = [ (request.instanceGroupManager, 'region', request.region) for request in mig_requests if hasattr(request, 'region') and request.region is not None ] zones = sorted(set(zip(*zone_migs)[2])) if zone_migs else [] regions = sorted(set(zip(*region_migs)[2])) if region_migs else [] autoscalers_to_delete = managed_instance_groups_utils.AutoscalersForMigs( migs=zone_migs + region_migs, autoscalers=managed_instance_groups_utils.AutoscalersForLocations( zones=zones, regions=regions, project=self.project, compute=self.compute, http=self.http, batch_url=self.batch_url), project=self.project) requests = [] for autoscaler in autoscalers_to_delete: if autoscaler.zone: service = self.compute.autoscalers request = service.GetRequestType('Delete')( zone=path_simplifier.Name(autoscaler.zone)) else: service = self.compute.regionAutoscalers request = service.GetRequestType('Delete')( region=path_simplifier.Name(autoscaler.region)) request.autoscaler = autoscaler.name request.project = self.project requests.append((service, 'Delete', request)) return requests
def CreateAutoscalerResource(self, igm_ref, args): zone = args.zone or igm_ref.zone autoscaler = managed_instance_groups_utils.AutoscalerForMig( mig_name=igm_ref.Name(), autoscalers=managed_instance_groups_utils.AutoscalersForLocations( regions=None, zones=[zone], project=self.project, compute=self.compute, http=self.http, batch_url=self.batch_url), scope_name=zone, scope_type='zone', project=self.project) autoscaler_name = getattr(autoscaler, 'name', None) as_ref = self.CreateZonalReference(autoscaler_name or args.name, zone) return managed_instance_groups_utils.BuildAutoscaler( args, self.messages, as_ref, igm_ref), autoscaler_name is None
def CreateAutoscalerResource(self, igm_ref, args): if _IsZonalGroup(igm_ref): scope_name = igm_ref.zone scope_type = 'zone' zones, regions = [scope_name], None else: scope_name = igm_ref.region scope_type = 'region' zones, regions = None, [scope_name] autoscaler = managed_instance_groups_utils.AutoscalerForMig( mig_name=igm_ref.Name(), autoscalers=managed_instance_groups_utils.AutoscalersForLocations( regions=regions, zones=zones, project=self.project, compute=self.compute, http=self.http, batch_url=self.batch_url), scope_name=scope_name, scope_type=scope_type, project=self.project) autoscaler_name = getattr(autoscaler, 'name', None) if _IsZonalGroup(igm_ref): as_ref = self.CreateZonalReference(autoscaler_name or args.name, scope_name, resource_type='autoscalers') else: as_ref = self.CreateRegionalReference( autoscaler_name or args.name, scope_name, resource_type='regionAutoscalers') autoscaler_resource = managed_instance_groups_utils.BuildAutoscaler( args, self.messages, as_ref, igm_ref) if not _IsZonalGroup(igm_ref): region_link = self.CreateRegionalReference(as_ref.region, as_ref.region, resource_type='regions') autoscaler_resource.region = region_link.SelfLink() return autoscaler_resource, autoscaler_name is None
def GetAutoscalerResource(self, client, resources, igm_ref, args): if _IsZonalGroup(igm_ref): scope_type = 'zone' location = managed_instance_groups_utils.CreateZoneRef( resources, igm_ref) zones, regions = [location], None else: scope_type = 'region' location = managed_instance_groups_utils.CreateRegionRef( resources, igm_ref) zones, regions = None, [location] autoscaler = managed_instance_groups_utils.AutoscalerForMig( mig_name=args.name, autoscalers=managed_instance_groups_utils.AutoscalersForLocations( regions=regions, zones=zones, client=client), location=location, scope_type=scope_type) if autoscaler is None: raise managed_instance_groups_utils.ResourceNotFoundException( 'The managed instance group is not autoscaled.') return autoscaler