
                             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 dd
lmZ ddlZddiZ G d dej*                        Zy)z'Command to trigger a database failover.    )absolute_import)division)unicode_literals)environments_util)operations_util)util)base)resource_args)logNEXAMPLESz}      To run a manual database failover on the environment named ``environment-1'', run:
      $ {command} environment-1
    c                   F    e Zd ZdZeZed        Zed        Zd Z	d Z
d Zy)DatabaseFailoverz"Run a database failover operation.c                 n    t        j                  | d       t        j                  j	                  |        y )Nz(for which to trigger a database failover)r
   AddEnvironmentResourceArgr	   
ASYNC_FLAGAddToParser)parsers    6lib/surface/composer/environments/database_failover.pyArgszDatabaseFailover.Args+   s*    ++: 	OO'    c                     t        j                  |      }| j                  j                  7| j                  j                  |j                  j
                  j                  k(  rt        j                  d      y )Nrelease_trackzYCannot trigger a database failover for environments without enabled high resilience mode.)	api_utilGetMessagesModuleconfigresilienceModeEnvironmentConfigResilienceModeValueValuesEnumRESILIENCE_MODE_UNSPECIFIEDcommand_utilInvalidUserInputError)env_objr   messagess      r   _ValidateEnvironmentz%DatabaseFailover._ValidateEnvironment2   sk    ))FH%%->>((%%CC__` ..D `r   c                 J   |j                   j                  j                         }| j                         }t	        j
                  ||      }| j                  ||       t	        j                  ||      }|j                  r| j                  ||      S | j                  ||      S )Nr   )CONCEPTSenvironmentParseReleaseTrackenvironments_api_utilGetr%   r   async__AsynchronousExecution_SynchronousExecution)selfargsenv_refr   r#   	operations         r   RunzDatabaseFailover.Run?   s    mm''--/G%%'M#''}MGg}5%66}I {{(()<<'';;r   c                     dj                  |j                        }t        j                  |j	                         dd|       |S )Nzwith operation [{0}]r(   T)kindis_asyncdetails)formatnamer   UpdatedResourceRelativeName)r0   env_resourcer3   r8   s       r   r.   z'DatabaseFailover._AsynchronousExecutionM   sA    $++INN;G!!#	 r   c           	      d   	 t        j                  |dj                  |j                         |j                        | j                                y # t        j                  $ rK}t        j                  dj                  |j                         t        j                  |                  d }~ww xY w)Nz(Waiting for [{}] to be updated with [{}]r   z/Error triggerering a database failover [{}]: {})
operations_api_utilWaitForOperationr9   r<   r:   r*   r!   Errorsix	text_type)r0   r=   r3   es       r   r/   z&DatabaseFailover._SynchronousExecutionW   s    **

4
;
;'')9>> ))+  
;
B
B'')3==+; s   AA B/$AB**B/N)__name__
__module____qualname____doc__DETAILED_HELPdetailed_helpstaticmethodr   r%   r4   r.   r/    r   r   r   r   &   s?    *-( ( 
 
<r   r   )rH   
__future__r   r   r   googlecloudsdk.api_lib.composerr   r+   r   r?   r   r   googlecloudsdk.callioper	   #googlecloudsdk.command_lib.composerr
   r!   googlecloudsdk.corer   rB   rI   Commandr   rL   r   r   <module>rS      sL    . &  ' V R < ( = D # 
  ?t|| ?r   