
                         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)z+Command for updating multi-region Services.    )
k8s_object)base)
exceptions)config_changes)connection_context)flags)	platforms)pretty_print)replacec                   T     e Zd ZdZed        Zd Z fdZd Zd Z	d Z
 fdZ xZS )	MultiRegionReplacez0Create or Update multi-region service from YAML.c                     t         j                  j                  |       t        j                  |       t        j
                  |       t        j                  |       y )N)r   ReplaceArgsr   AddRegionsArgAddAddRegionsArgAddRemoveRegionsArg)clsparsers     0lib/surface/run/multi_region_services/replace.pyr   zMultiRegionReplace.Args"   s>    OO 		6"	f%    c                     t        j                  |d      xs t        j                  |d      }t        j                  |d      }|r|rt        j                  dd      ||fS )Nadd_regionsremove_regionsregionsz	--regionsz?Cannot specify --add-regions or --remove-regions with --regions)parameter_namemessage)r   FlagIsExplicitlySetc_exceptionsInvalidArgumentException)selfargsadded_or_removedall_regionss       r   _GetMultiRegionSettingsz*MultiRegionReplace._GetMultiRegionSettings)   sp    00m ;		"	"4)9	:  ++D)<KK11$O  (((r   c                 .   |sy | j                  |      \  }}t        | 	  ||      }|r:|j                  t	        j
                  |j                  |j                               |r.|j                  t	        j                  |j                               |S )N)to_add	to_remove)
r%   super_GetBaseChangesappendr   RegionsChangeAnnotationChanger   r   SetRegionsAnnotationChanger   )r!   new_servicer"   r$   r#   changes	__class__s         r   r*   z"MultiRegionReplace._GetBaseChanges7   s    $($@$@$F!K!g%k48Gnn

6
6%%++ nn^>>t||LMNr   c                     t        j                  |t        j                  j                  | j                         |d      S )NT)region_labelis_multiregion)r   GetConnectionContextr   ProductRUNReleaseTrack)r!   r"   r2   s      r   _ConnectionContextz%MultiRegionReplace._ConnectionContextG   s7    22! r   c                     |sy | j                  |      \  }}|r|j                  j                  d      S |rXt        j                  ||      }|j
                  j                  t        j                        xs d }|r|j                  d      S d S y )N,)	r%   r   splitr   WithChangesannotationsgetr   MULTI_REGION_REGIONS_ANNOTATION)r!   r"   r.   r/   r$   r#   modified
annotations           r   _GetMultiRegionRegionsz)MultiRegionReplace._GetMultiRegionRegionsP   s     %)$@$@$F!K!\\$$++KAh



"
":#M#M
N   '1Zc":d:r   c                    |j                   r0t        j                  dj                  |j                               y |r0t        j                  dj                  |j                               y t        j                  dj                  |j                               |j
                  D ]'  }t        j                  dj                  |             ) y )NzPNew configuration for [{{bold}}{serv}{{reset}}] is being applied asynchronously.)servzXNew configuration has been validated for Multi-region service [{{bold}}{serv}{{reset}}].zdNew configuration has been applied to Multi-region service [{{bold}}{serv}{{reset}}].
Regional URLs:z{{bold}}{url}{{reset}})url)async_r
   Successformatnameurls)r!   service_objdry_runr"   rE   s        r   _PrintSuccessMessagez'MultiRegionReplace._PrintSuccessMessagea   s    {{"F(8(8F9 
''-v;3C3Cv'D
 77=v## 8> 8 !!#5<<<EF "r   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--regionzrMulti-region Services do not support the --region flag. Use --regions, --add-regions, or --remove-regions instead.)	r	   GetPlatformPLATFORM_MANAGEDr   r    r   r   r)   Run)r!   r"   r0   s     r   rR   zMultiRegionReplace.Runv   sr    )"<"<<11

I    x011
D 
 7;tr   )__name__
__module____qualname____doc__classmethodr   r%   r*   r8   rB   rM   rR   __classcell__)r0   s   @r   r   r      s>     9& &) "G* r   r   N)rV   googlecloudsdk.api_lib.runr   googlecloudsdk.callioper   r   r   googlecloudsdk.command_lib.runr   r   r   r	   r
   surface.run.servicesr   ReleaseTracksr7   ALPHABETAGAr   r    r   r   <module>rb      s    2 1 ( > 9 = 0 4 7 ( T..33T5F5F5I5Ic ccr   