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)
Ejemplo n.º 2
0
 def _CreateZonalApplyUpdatesRequest(self, igm_ref, instances,
                                     minimal_action,
                                     most_disruptive_allowed_action,
                                     client):
     field_name = 'instanceGroupManagersApplyUpdatesRequest'
     service = client.apitools_client.instanceGroupManagers
     minimal_action = instance_groups_managed_flags.MapInstanceActionEnumValue(
         minimal_action, client.messages,
         client.messages.InstanceGroupManagersApplyUpdatesRequest\
             .MinimalActionValueValuesEnum)
     most_disruptive_allowed_action = (
         instance_groups_managed_flags.MapInstanceActionEnumValue)(
             most_disruptive_allowed_action, client.messages,
             client.messages.InstanceGroupManagersApplyUpdatesRequest \
                 .MostDisruptiveAllowedActionValueValuesEnum)
     requests = instance_groups_utils.SplitInstancesInRequest(
         client.messages\
         .ComputeInstanceGroupManagersApplyUpdatesToInstancesRequest(
             instanceGroupManager=igm_ref.Name(),
             instanceGroupManagersApplyUpdatesRequest=
             client.messages.InstanceGroupManagersApplyUpdatesRequest(
                 instances=instances,
                 minimalAction=minimal_action,
                 mostDisruptiveAllowedAction=most_disruptive_allowed_action),
             project=igm_ref.project,
             zone=igm_ref.zone), field_name)
     return field_name, service, requests
 def testSplitInstancesInRequest(self):
     requests = instance_groups_utils.SplitInstancesInRequest(
         self.messages.ComputeInstanceGroupManagersAbandonInstancesRequest(
             instanceGroupManager='name',
             instanceGroupManagersAbandonInstancesRequest=self.messages.
             InstanceGroupManagersAbandonInstancesRequest(
                 instances=['a', 'b', 'c', 'd', 'e']),
             project='project',
             zone='zone'), 'instanceGroupManagersAbandonInstancesRequest',
         2)
     self.assertEqual(
         requests[0],
         self.messages.ComputeInstanceGroupManagersAbandonInstancesRequest(
             instanceGroupManager='name',
             instanceGroupManagersAbandonInstancesRequest=self.messages.
             InstanceGroupManagersAbandonInstancesRequest(
                 instances=['a', 'b'], ),
             project='project',
             zone='zone',
         ))
     self.assertEqual(
         requests[1],
         self.messages.ComputeInstanceGroupManagersAbandonInstancesRequest(
             instanceGroupManager='name',
             instanceGroupManagersAbandonInstancesRequest=self.messages.
             InstanceGroupManagersAbandonInstancesRequest(
                 instances=['c', 'd'], ),
             project='project',
             zone='zone',
         ))
     self.assertEqual(
         requests[2],
         self.messages.ComputeInstanceGroupManagersAbandonInstancesRequest(
             instanceGroupManager='name',
             instanceGroupManagersAbandonInstancesRequest=self.messages.
             InstanceGroupManagersAbandonInstancesRequest(instances=['e'
                                                                     ], ),
             project='project',
             zone='zone',
         ))