
                             d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ dd	lmZ  G d
 dej                        ZdZddZd Zd Zd Zy)zEAPI library for waiting for managed instance groups state transition.    )absolute_import)division)unicode_literalsN)utils)	wait_info)log)retryc                       e Zd ZdZdZdZdZy)IgmStatez!Represents IGM state to wait for.r         N)__name__
__module____qualname____doc__STABLEVERSION_TARGET_REACHEDALL_INSTANCES_CONFIG_EFFECTIVE     Hlib/googlecloudsdk/api_lib/compute/instance_groups/managed/wait_utils.pyr   r      s    )&#$ r   r   i'  c                    	 |r|dz  nd}t        j                  |      j                  t        | ||gdt               |t
        j                  k(  r t        j                  j                  d       y|t
        j                  k(  r t        j                  j                  d       y|t
        j                  k(  r t        j                  j                  d       yy# t         j                  $ r{ |t
        j                  k(  rt        j                  d	      |t
        j                  k(  rt        j                  d
      |t
        j                  k(  rt        j                  d      Y yw xY w)zCWaits until the desired state of managed instance group is reached.i  N)max_wait_msF)should_retry_ifsleep_mszGroup is stablezVersion target is reachedz!All-instances config is effectivez1Timeout while waiting for group to become stable.z8Timeout while waiting for group to reach version target.zHTimeout while waiting for group to reach effective all-instances config.)r	   RetryerRetryOnResult_IsStateReached_TIME_BETWEEN_POLLS_MSr   r   r   outPrintr   r   WaitExceptionr   TimeoutError)client	group_refdesired_igm_statetimeout_secr   s        r   WaitForIgmStater(   %   s;   B&1+d"tK	MMk*88	-.'	 9 )
 HOO+	ggmm%&	h==	=	ggmm/0	hEE	E	ggmm78 
F 
		 	BHOO+  0 1 1H;;;  1 2 2HCCC  A B B D	Bs   A/C 22C %2C BE'&E'c                    t        | |      \  }}|rt        j                  |       |t        j                  k(  rR|d   j
                  j                  }|s5t        j                  j                  t        j                  |d                |S |t        j                  k(  rF|d   j
                  j                  j                  }|st        j                  j                  d       |S |t        j                  k(  rF|d   j
                  j                   j"                  }|st        j                  j                  d       |S t%        d      )z'Checks if the desired state is reached.r   z)Waiting for group to reach version targetz9Waiting for group to reach all-instances config effectivezIncorrect desired_igm_state)_GetResourcesr   RaiseToolExceptionr   r   statusisStabler   r    r!   r   CreateWaitTextr   versionTarget	isReachedr   allInstancesConfig	effective	Exception)r$   r%   r&   	responseserrors	is_stableis_version_target_reachedall_instances_config_effectives           r   r   r   A   s   #FI6)V	V$(//)!##,,I	ggmmI,,Yq\:;H;;; )! 3 3 A A K K$	ggmm?@$$HCCC%.	&6$$YY #)	ggmmOP))
1
22r   c                 Z    t        | |      \  }}g }| j                  |d|fg|      }||fS )z%Retrieves group and potential errors.Get)requestserrors_to_collect)_GetRequestForGroupMakeRequests)r$   r%   servicerequestr5   resultss         r   r*   r*   Z   sI    (;'7&%)*    ' 
&r   c                    |j                         dk(  rV| j                  j                  } |j                  d      |j	                         |j
                  |j                        }||fS |j                         dk(  rV| j                  j                  } |j                  d      |j	                         |j                  |j                        }||fS t        dj                  |j                                     )z>Executes a request for a group - either zonal or regional one.zcompute.instanceGroupManagersr:   )instanceGroupManagerzoneprojectz#compute.regionInstanceGroupManagers)rC   regionrE   zUnknown reference type {0})
Collectionapitools_clientinstanceGroupManagersGetRequestTypeNamerD   rE   regionInstanceGroupManagersrF   
ValueErrorformat)r$   r%   r?   r@   s       r   r=   r=   e   s    >>$$::G+g$$U+&^^-^^!!#G 7	 !FF$$@@G+g$$U+&^^-!!#G 7	 188  ! !r   )N)r   
__future__r   r   r   enumgooglecloudsdk.api_lib.computer   :googlecloudsdk.command_lib.compute.instance_groups.managedr   googlecloudsdk.corer   googlecloudsdk.core.utilr	   Enumr   r   r(   r   r*   r=   r   r   r   <module>rV      sP    L &  '  0 P # *%tyy %  B832r   