
    I'                        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mZ ddlmZ ddlmZ dZddZ e
j0                  e
j2                  j4                         G d de
j6                               Zdddde_         e
j0                  e
j2                  j<                  e
j2                  j>                         G d de             Z ej:                  e _        y)z9Command for updating instances of managed instance group.    )absolute_import)division)unicode_literals)base_classes)managed_instance_groups_utils)arg_parsers)base)flags)scope)rolling_action)update_instances_utilstemplatec           	      Z   t        j                  |        t        j                  |        t        j                  |        |rt        j                  |        t        j
                  |        | j                  dt        j                  t        t        d      ddd       | j                  dt        j                  t        t        t        d	      t        j                  d
d       t        j                  |        t        j                  | dd       t        j                  | dd       y)z
Adds args.	--version)r   name)specztemplate=TEMPLATE,[name=NAME]ztOriginal instance template resource to be used. Each version has the following format: template=TEMPLATE,[name=NAME]T)typemetavarhelprequired--canary-version)r   ztarget-sizer   z:template=TEMPLATE,target-size=FIXED_OR_PERCENT,[name=NAME]zNew instance template resource to be used. Each version has the following format: template=TEMPLATE,target-size=FIXED_OR_PERCENT,[name=NAME])r   categoryr   r   FN)instance_groups_managed_flags
AddTypeArgAddMaxSurgeArgAddMaxUnavailableArgAddMinReadyArgAddReplacementMethodFlagadd_argumentr   ArgDictstrr	   COMMONLY_USED_FLAGSAddForceArgAddMinimalActionArgAddMostDisruptiveActionArgparsersupports_min_readys     Jlib/surface/compute/instance_groups/managed/rolling_action/start_update.py_AddArgsr*   #   s   **62..v644V<!00888@-0%2 3-,    	" ''JI  
K  ++F333FE4H::65$O    c                   ,    e Zd ZdZed        Zd Zd Zy)StartUpdateGA1Start update instances of managed instance group.c                 Z    t        |       t        j                  j                  |       y )N)r'   r*   instance_groups_flags%MULTISCOPE_INSTANCE_GROUP_MANAGER_ARGAddArgumentclsr'   s     r)   ArgszStartUpdateGA.ArgsH   s!    F??KKr+   c                     t        j                  d|j                         t        j                  | j                               }|j                  }| j                  |||j                        }|j                  |g      S )Nr   )
r   ValidateCanaryVersionFlagcanary_versionr   ComputeApiHolderReleaseTrackclientCreateRequest	resourcesMakeRequests)selfargsholderr<   requests        r)   RunzStartUpdateGA.RunN   sl    445G595H5HJ**4+<+<+>?F]]F  vv/?/?@Gy))r+   c           	      ^	   t         j                  }t        j                  j                  }t        j                  |      }|j                  ||||      }|j                         dvr(t        dj                  |j                                     t        j                  d|j                  |j                        }t        j                  dd|j                   |j                        }	t        j                  dd|j"                  |j                        }
t%        j&                  ||      }t(        |j*                  v r|j*                  t(           |_        g }|j/                  t        j0                  |d	|j*                  ||j                               |j2                  rft(        |j2                  v r|j2                  t(           |_        |j/                  t        j0                  |d
|j2                  ||j                               t%        j4                  ||||j6                         |j8                  D ci c]  }|j:                  |j<                   }}|D ]/  }|j<                  r|j?                  |j:                        |_        1 |j                  jA                  |	|
|      }|jC                  d      rDt        jD                  d|jF                  |j                  j@                  jH                        |_%        |jC                  d      rDt        jD                  d|jL                  |j                  j@                  jN                        |_(        tS        |d      r|jT                  |_+        tS        |d      r1t        jX                  |jZ                  |j                        }||_.        t_        j`                  ||||       |j                  jc                  d ||      }tS        |d      rX|jd                  jf                  }|j                  ji                  |jk                         ||jl                  |jn                        }nctS        |d      rW|jd                  jp                  }|j                  js                  |jk                         ||jl                  |jt                        }dfS c c}w )N)default_scopescope_lister)zcompute.instanceGroupManagersz#compute.regionInstanceGroupManagerszUnknown reference type {0}z--typez--max-surgez	max-surgez--max-unavailablezmax-unavailabler   r   )maxSurgemaxUnavailabler   minimal_actionz--minimal-actionmost_disruptive_allowed_actionz --most-disruptive-allowed-action	min_readyreplacement_method)instanceTemplateupdatePolicyversionszone)instanceGroupManagerinstanceGroupManagerResourceprojectrQ   region)rR   rS   rT   rU   Patch);r1   r2   compute_scope	ScopeEnumZONEr
   GetDefaultScopeListerResolveAsResource
Collection
ValueErrorformatr   ParseUpdatePolicyTyper   messagesParseFixedOrPercent	max_surgemax_unavailabler   GetInstanceGroupManagerOrThrowTEMPLATE_NAME_KEYversionr   appendParseVersionr9   ValidateVersionsforcerP   rN   r   get InstanceGroupManagerUpdatePolicyIsSpecifiedParseInstanceActionFlagrJ   MinimalActionValueValuesEnumminimalActionrK   *MostDisruptiveAllowedActionValueValuesEnummostDisruptiveAllowedActionhasattrrL   minReadySecParseReplacementMethodrM   replacementMethodr   $ValidateAndFixUpdaterAgainstStatefulInstanceGroupManagerapitools_clientinstanceGroupManagers(ComputeInstanceGroupManagersPatchRequestNamerT   rQ   regionInstanceGroupManagers.ComputeRegionInstanceGroupManagersPatchRequestrU   )r@   rA   r<   r>   resource_argrF   rG   igm_refupdate_policy_typerb   rc   igm_inforP   rf   igm_version_namesupdate_policyrM   igm_resourceservicerC   s                       r)   r=   zStartUpdateGA.CreateRequestW   s&   (NNL!++00M..v6L,,i}< - QG  $  3::



  ! ! 0EE$))V__.&::{DNNFOOEI,@@.0D0DO -KKH DLL(ll#45dmHOO++LLOO	
 	d11	1++,=>oo
 
-
- !!oo "228X3<djjJ  (((G 	  ',,.(   \\(,,W-E-EF  OODD& E !M
 ()
 
8
8 $"5"5oo>>++	%-m!
 89
 
8
8011oo>>993;m/ t[!"&..mt)*1HH

!
!6??4(:m%77x ??77MH 8 NLw&&<<gII&||~'3//||	 J g
 
(	#&&BBgOO&||~'3//	 P !g
 GW$$os   2R*N)__name__
__module____qualname____doc__classmethodr6   rD   r=    r+   r)   r-   r-   D   s"    9 
*p%r+   r-   z-Updates instances in a managed instance groupz        *{command}* updates instances in a managed instance group,
        according to the given versions and the given update policy.

        An instance template version can be either a global or regional resource.
        a  
      Running:

            {command} example-managed-instance-group \
            --version='template=example-global-instance-template'

      Sets the group's instance template version to a global instance template
      resource 'example-global-instance-template'.

      To use a regional instance template, specify the full or partial URL of the template.

      Running:

            {command} example-managed-instance-group \
            --version='template=projects/example-project/regions/us-central1/instanceTemplates/example-regional-instance-template'

      Sets the group's instance template version to a regional instance template
      resource 'example-regional-instance-template'.
      )briefDESCRIPTIONEXAMPLESc                        e Zd ZdZed        Zy)StartUpdater.   c                 \    t        |d       t        j                  j                  |       y )NTr&   r0   r4   s     r)   r6   zStartUpdate.Args   s#    Ft4??KKr+   N)r   r   r   r   r   r6   r   r+   r)   r   r      s    9 r+   r   N)F)!r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper   r	   "googlecloudsdk.command_lib.computer
   r   rW   2googlecloudsdk.command_lib.compute.instance_groupsr1   :googlecloudsdk.command_lib.compute.instance_groups.managedr   r   :googlecloudsdk.command_lib.compute.managed_instance_groupsr   re   r*   ReleaseTracksr;   GACommandr-   detailed_helpALPHABETAr   r   r+   r)   <module>r      s    @ &  ' 7 H / ( 4 E ] m U ] PB D%%(()B%DLL B% *B%J =
 < D%%++T->->-C-CD-  E *77 r+   