
    q                     D   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd	lmZ  e
j                   e
j"                  j$                  e
j"                  j&                  e
j"                  j(                         G d
 de
j*                               Zy)z6Command for removing a backend from a backend service.    )absolute_import)division)unicode_literals)encoding)base_classes)base)
exceptions)flagsc                   F    e Zd ZdZdZdZed        Zd Zd Z	d Z
d Zd Zy	)
RemoveBackenda4  Remove a backend from a backend service.

  *{command}* is used to remove a backend from a backend
  service.

  Before removing a backend, it is a good idea to "drain" the
  backend first. A backend can be drained by setting its
  capacity scaler to zero through 'gcloud compute
  backend-services edit'.
  Tc                     t         j                  j                  |       t        j                  |d| j                  | j
                         y )Nzremove fromsupport_global_negsupport_region_neg)r
   #GLOBAL_REGIONAL_BACKEND_SERVICE_ARGAddArgument+AddInstanceGroupAndNetworkEndpointGroupArgsr   r   )clsparsers     6lib/surface/compute/backend_services/remove_backend.pyArgszRemoveBackend.Args0   s<    	--99&A	551111	3    c                 n   |j                         dk(  rW|j                  j                  d|j                  j	                  |j                         |j                  |j                        fS |j                  j                  d|j                  j                  |j                         |j                        fS )Ncompute.regionBackendServicesGet)backendServiceregionproject)r   r   )

Collectionapitools_clientregionBackendServicesmessages&ComputeRegionBackendServicesGetRequestNamer   r   backendServices ComputeBackendServicesGetRequest)selfclientbackend_service_refs      r   GetGetRequestzRemoveBackend.GetGetRequest9   s    %%'+JJ$$::ooDD!4!9!9!;,33-55 E 78 8 ""22OO<<2779+33 = 56 6r   c                 r   |j                         dk(  rX|j                  j                  d|j                  j	                  |j                         ||j                  |j                        fS |j                  j                  d|j                  j                  |j                         ||j                        fS )Nr   Update)r   backendServiceResourcer   r   )r   r-   r   )
r   r    r!   r"   )ComputeRegionBackendServicesUpdateRequestr$   r   r   r%   #ComputeBackendServicesUpdateRequest)r'   r(   r)   replacements       r   GetSetRequestzRemoveBackend.GetSetRequestG   s    %%'+JJ$$::ooGG!4!9!9!;)4,33-55	 H 78 8 ""22OO??2779'2+33 @ 56 6r   c                 >   |j                   r5t        j                  j                  ||t	        j
                  |            S |j                  rPt        j                  | j                  | j                        j                  ||t	        j
                  |            S y )Nscope_listerr   )
instance_groupr
   MULTISCOPE_INSTANCE_GROUP_ARGResolveAsResourcecompute_flagsGetDefaultScopeListernetwork_endpoint_groupGetNetworkEndpointGroupArgr   r   )r'   args	resourcesr(   s       r   _GetGroupRefzRemoveBackend._GetGroupRefW   s    00BB

$::6B C D D ""--!44!4466G6G(>>vF 7H 7HH #r   c           	         t        j                  |      }| j                  |||      }|j                         }d }	t	        |j
                        D ]4  \  }
}||j                  |j                        j                         k(  s3|
}	6 |	dt        |dd       }|t        |dd       }d}nd}t        j                  dj                  |j                         |||j                                     |j
                  j                  |	       |S )Nr   zonezEBackend [{0}] in {1} [{2}] is not a backend of backend service [{3}].)r   CopyProtoMessager>   RelativeName	enumeratebackendsParseURLgroupgetattrr	   ArgumentErrorformatr$   pop)r'   r(   r=   r)   r<   existingr0   	group_ref	group_uribackend_idxibackendscope_valuescopes                 r   ModifyzRemoveBackend.Modifye   s   ++H5K!!$	6:I&&(IK 1 12
7	i((7DDF	F 3 Ix6k		i6$$6)..*%-22467 7 {+r   c                    t        j                  | j                               }|j                  }t        j
                  j                  ||j                  t        j                  |            }| j                  ||      }|j                  |g      }| j                  ||j                  |||d         }|j                  | j                  |||      g      S )Nr3   r   )r   ComputeApiHolderReleaseTrackr(   r
   r   r7   r=   r8   r9   r*   MakeRequestsrS   r1   )r'   r<   holderr(   r)   get_requestobjects
new_objects           r   RunzRemoveBackend.Run   s    **4+<+<+>?F]]F 	11CC&<<VD 	D 	F 
 $$V-@AK!!;-0GVV%5%57J!71:/J 			F$7	DEG Gr   N)__name__
__module____qualname____doc__r   r   classmethodr   r*   r1   r>   rS   r\    r   r   r   r      sB    	 3 366 H<Gr   r   N)r`   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   "googlecloudsdk.command_lib.computer	   r
   r8   3googlecloudsdk.command_lib.compute.backend_servicesReleaseTracksrV   ALPHABETAGAUpdateCommandr   rb   r   r   <module>rn      s     = &  ' % 7 ( 9 E E D%%++T->->-C-C%%((*sGD&& sG*sGr   