text: # Copyright 2017 Google Inc. All Rights Reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  """Command for stopping the update process of managed instance group."""
  
  from googlecloudsdk.api_lib.compute import base_classes
  from googlecloudsdk.calliope import base
  from googlecloudsdk.command_lib.compute import flags
  from googlecloudsdk.command_lib.compute import scope as compute_scope
  from googlecloudsdk.command_lib.compute.instance_groups import flags as instance_groups_flags
  
  
  @base.ReleaseTracks(base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA)
  class StopProactiveUpdate(base.Command):
    """Stop the proactive update process of managed instance group.
  
    This command changes the update type of the managed instance group to
    opportunistic.
    """
  
    @staticmethod
    def Args(parser):
      instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG.AddArgument(
          parser)
  
    def Run(self, args):
      holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
      client = holder.client
      messages = client.messages
  
      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)
      igm_resource = messages.InstanceGroupManager(
          updatePolicy=messages.InstanceGroupManagerUpdatePolicy(
              type=(messages.InstanceGroupManagerUpdatePolicy.
                    TypeValueValuesEnum.OPPORTUNISTIC)))
      if igm_ref.Collection() == 'compute.instanceGroupManagers':
        service = client.apitools_client.instanceGroupManagers
        request_type = messages.ComputeInstanceGroupManagersPatchRequest
      elif igm_ref.Collection() == 'compute.regionInstanceGroupManagers':
        service = client.apitools_client.regionInstanceGroupManagers
        request_type = messages.ComputeRegionInstanceGroupManagersPatchRequest
      request = request_type(**igm_ref.AsDict())
      request.instanceGroupManagerResource = igm_resource
  
      return client.MakeRequests([(service, 'Patch', request)])
  