def testLiftRequestsList(self):
     a = object()
     b = object()
     c = [object(), object(), object()]
     result = list(instance_groups_utils.GenerateRequestTuples(a, b, c))
     for i in range(3):
         self.assertIs(result[i][0], a)
         self.assertIs(result[i][1], b)
         self.assertIs(result[i][2], c[i])
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client

        resource_arg = instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG
        default_scope = compute_scope.ScopeEnum.ZONE
        scope_lister = flags.GetDefaultScopeLister(client)
        igm_ref = resource_arg.ResolveAsResource(args,
                                                 holder.resources,
                                                 default_scope=default_scope,
                                                 scope_lister=scope_lister)
        instances = instance_groups_utils.CreateInstanceReferences(
            holder.resources, client, igm_ref, args.instances)

        if igm_ref.Collection() == 'compute.instanceGroupManagers':
            field_name = 'instanceGroupManagersAbandonInstancesRequest'
            service = client.apitools_client.instanceGroupManagers
            requests = instance_groups_utils.SplitInstancesInRequest(
                client.messages.
                ComputeInstanceGroupManagersAbandonInstancesRequest(
                    instanceGroupManager=igm_ref.Name(),
                    instanceGroupManagersAbandonInstancesRequest=client.
                    messages.InstanceGroupManagersAbandonInstancesRequest(
                        instances=instances),
                    project=igm_ref.project,
                    zone=igm_ref.zone), field_name)
        elif igm_ref.Collection() == 'compute.regionInstanceGroupManagers':
            field_name = 'regionInstanceGroupManagersAbandonInstancesRequest'
            service = client.apitools_client.regionInstanceGroupManagers
            requests = instance_groups_utils.SplitInstancesInRequest(
                client.messages.
                ComputeRegionInstanceGroupManagersAbandonInstancesRequest(
                    instanceGroupManager=igm_ref.Name(),
                    regionInstanceGroupManagersAbandonInstancesRequest=client.
                    messages.
                    RegionInstanceGroupManagersAbandonInstancesRequest(
                        instances=instances),
                    project=igm_ref.project,
                    region=igm_ref.region,
                ), field_name)
        else:
            raise ValueError('Unknown reference type {0}'.format(
                igm_ref.Collection()))

        requests = instance_groups_utils.GenerateRequestTuples(
            service, 'AbandonInstances', requests)

        return instance_groups_utils.MakeRequestsList(client, requests,
                                                      field_name)
Esempio n. 3
0
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client
        igm_ref = (instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG.
                   ResolveAsResource)(
                       args,
                       holder.resources,
                       default_scope=compute_scope.ScopeEnum.ZONE,
                       scope_lister=flags.GetDefaultScopeLister(client))

        update_instances_utils.ValidateIgmReference(igm_ref)
        minimal_action = update_instances_utils.ParseInstanceActionFlag(
            '--minimal-action', args.minimal_action or 'none', client.messages)
        most_disruptive_allowed_action = (
            update_instances_utils.ParseInstanceActionFlag)(
                '--most-disruptive-allowed-action',
                args.most_disruptive_allowed_action or 'replace',
                client.messages)

        instances = instance_groups_utils.CreateInstanceReferences(
            holder.resources, client, igm_ref, args.instances)
        if igm_ref.Collection() == 'compute.instanceGroupManagers':
            field_name, service, requests = self._CreateZonalApplyUpdatesRequest(
                igm_ref, instances, minimal_action,
                most_disruptive_allowed_action, client)
        elif igm_ref.Collection() == 'compute.regionInstanceGroupManagers':
            field_name, service, requests = self._CreateRegionalApplyUpdatesRequest(
                igm_ref, instances, minimal_action,
                most_disruptive_allowed_action, client)

        requests = instance_groups_utils.GenerateRequestTuples(
            service, 'ApplyUpdatesToInstances', requests)

        operations = instance_groups_utils.MakeRequestsList(
            client, requests, field_name)
        return operations