
    c                        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  ej                  ej                  j                          G d
 dej"                               Z ej                  ej                  j&                         G d de             Z ej                  ej                  j*                         G d de             Zy)z+Command for updating multi-region Services.    )
k8s_object)base)
exceptions)config_changes)connection_context)flags)	platforms)updatec                   J     e Zd ZdZed        Zd Zd fd	Zd Z fdZ	 xZ
S )MultiRegionUpdatelUpdate environment variables, add/remove regions, and other configuration settings in Multi-Region Services.c                     t         j                  j                  |       t        j                  |       t        j
                  |       y N)r
   UpdateArgsr   AddAddRegionsArgAddRemoveRegionsArgclsparsers     /lib/surface/run/multi_region_services/update.pyr   zMultiRegionUpdate.Args   s0    
MMv	6"	f%    c                     t        j                  |t        j                  j                  | j                         d      S )NT)is_multiregion)r   GetConnectionContextr   ProductRUNReleaseTrack)selfargss     r   _ConnectionContextz$MultiRegionUpdate._ConnectionContext%   s4    22	 r   c                    t        j                  |t        j                        xs g }t        j                  |d      st        j                  |d      rW|j                  t        j                  |j                  |j                               t        | -  |t        | 0  dz   d       t        | 5  ||d      }||z   S )Nadd_regionsremove_regions)to_add	to_removez#, `--add-regions`, `remove-regions`F)ignore_emptyT)r   GetServiceConfigurationChangesr   r   FlagIsExplicitlySetappendr   RegionsChangeAnnotationChanger#   r$   super_AssertChangesinput_flags_GetBaseChanges)r   r    existing_servicechangesch2	__class__s        r   r/   z!MultiRegionUpdate._GetBaseChanges-   s    ,,T43D3DEK    m		"	"4)9	:nn

6
6%%++ g

'
 E
E  
 '
!$(8t
!
LC=r   c                     |sy t        j                  ||      }|j                  j                  t        j
                        xs d }|r|j                  d      S d S )N,)r   WithChangesannotationsgetr   MULTI_REGION_REGIONS_ANNOTATIONsplit)r   r1   servicemodified
annotations        r   _GetMultiRegionRegionsz(MultiRegionUpdate._GetMultiRegionRegionsB   s[    ))'7;H  !K!KL 	  %/:C 8D8r   c                     t        j                         t         j                  k7  rt        j                  dd      t        j                  |d      rt        j                  dd      t        | !  |      S )Nz
--platformz=Multi-region Services are only supported on managed platform.regionz--regionzfMulti-region Services do not support the --region flag. Use --add-regions or --remove-regions instead.)	r	   GetPlatformPLATFORM_MANAGEDc_exceptionsInvalidArgumentExceptionr   r)   r,   Run)r   r    r3   s     r   rE   zMultiRegionUpdate.RunL   sq    )"<"<<11

I    x011
8 
 7;tr   r   )__name__
__module____qualname____doc__classmethodr   r!   r/   r>   rE   __classcell__)r3   s   @r   r   r      s1    t& &
*9 r   r   c                        e Zd ZdZed        Zy)MultiRegionBetaUpdater   c                     t         j                  j                  |       t        j                  |       t        j
                  |       y r   )r
   
BetaUpdater   r   r   r   r   s     r   r   zMultiRegionBetaUpdate.Args_   s2    
6"	6"	f%r   NrF   rG   rH   rI   rJ   r    r   r   rM   rM   [       t& &r   rM   c                        e Zd ZdZed        Zy)MultiRegionAlphaUpdater   c                     t         j                  j                  |       t        j                  |       t        j
                  |       y r   )r
   AlphaUpdater   r   r   r   r   s     r   r   zMultiRegionAlphaUpdate.Argsj   s2    
F#	6"	f%r   NrP   rQ   r   r   rT   rT   f   rR   r   rT   N)rI   googlecloudsdk.api_lib.runr   googlecloudsdk.callioper   r   rC   googlecloudsdk.command_lib.runr   r   r   r	   surface.run.servicesr
   ReleaseTracksr   GAr   r   BETArM   ALPHArT   rQ   r   r   <module>r_      s    2 1 ( > 9 = 0 4 ' D%%(()< < *<~ D%%**+&- & ,& D%%++,&2 & -&r   