示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
 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
示例#6
0
    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