
    pI                     &   S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSS.r\R0                  \R2                  " \R4                  R6                  5       " S S\R8                  5      5       5       r\R2                  " \R4                  R<                  5       " S S\5      5       r\R2                  " \R4                  R@                  5       " S S\5      5       r!\\l"        g)z'Command for labels update to instances.    )absolute_import)division)unicode_literals)base_classes)instance_utils)partner_metadata_utils)poller)waiter)base)flags)util)labels_utilzy
        *{command}* updates labels and requested CPU Platform for a
        Compute
        Engine virtual machine.
    a}  
    To modify the instance 'example-instance' in 'us-central1-a' by adding
    labels 'k0', with value 'value1' and label 'k1' with value 'value2' and
    removing labels with key 'k3', run:

      $ {command} example-instance --zone=us-central1-a --update-labels=k0=value1,k1=value2 --remove-labels=k3

    Labels can be used to identify the instance. To list instances with the 'k1:value2' label, run:

      $ {parent_command} list --filter='labels.k1:value2'

    To list only the labels when describing a resource, use --format to filter the result:

      $ {parent_command} describe example-instance --format="default(labels)"
  )DESCRIPTIONEXAMPLESc                   p    \ rS rSrSr\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rSrg)Update9   (Update a Compute Engine virtual machine.c                    [         R                  R                  U SS9  [        R                  " U 5        [         R
                  " U [        R                  5       5        [         R                  " U SS9  [         R                  " U SSS9  [         R                  " U 5        [         R                  " U SS9  [        R                  " U SS9  g Nupdate)operation_typeF)use_default_valueT)r   
for_update)	is_update)r   INSTANCE_ARGAddArgumentr   AddUpdateLabelsFlagsAddMinCpuPlatformArgsr   ReleaseTrackAddDeletionProtectionFlagAddShieldedInstanceConfigArgs&AddShieldedInstanceIntegrityPolicyArgsAddDisplayDeviceArgsole_tenancy_flagsAddNodeAffinityFlagToParserparsers    'lib/surface/compute/instances/update.pyArgsUpdate.Args>   s     
""6("C$$V,	(;(;(=>	##FeD	''%D:	008	f5226TJ    c                 $    U R                  U5      $ N_Runselfargss     r)   Run
Update.RunK       99T?r,   c                 |	   [         R                  " U R                  5       5      nUR                  R                  nUR                  R
                  n[        R                  R                  XR                  [        R                  " UR                  5      S9nS nS nS nS n	S n
S nS nS n[        R                  R                  U5      nUR                  5       (       aM  UR                  R!                  UR"                  " S0 UR%                  5       D65      nUnU R'                  XXR5      n[)        US5      (       a)  UR*                  b  U R-                  UR*                  XR5      nUR.                  b  U R1                  UR.                  XR5      n	[)        US5      (       a4  UR2                  (       d  UR4                  (       a  U R7                  XU5      n[)        US5      (       a  UR9                  S5      (       d'  [)        US5      (       a(  UR9                  S5      (       a  U R;                  XU5      n[<        R>                  " UR                  5      nU RA                  UUSURC                  5       5      =(       d    UnU RA                  UUSURC                  5       5      =(       d    UnU RA                  UU	SURC                  5       UR.                  5      =(       d    UnU RA                  UUS	URC                  5       5      =(       d    UnU RA                  UUS
URC                  5       5      =(       d    UnUR9                  S5      (       d,  UR9                  S5      (       d  UR9                  S5      (       a=  U RE                  XQU5      n
U RA                  UU
SURC                  5       5      =(       d    UnUR9                  S5      (       a<  U RG                  XR5      nU RA                  UUSURC                  5       5      =(       d    UnUR9                  S5      (       aG  U RI                  URJ                  XR5      nU RA                  UUSURC                  5       5      =(       d    Un[L        RN                  " USSSS5      (       a=  U RQ                  XQU5      nU RA                  UUSURC                  5       5      =(       d    UnU$ )N)scope_listermin_cpu_platformpartner_metadatagraceful_shutdowngraceful_shutdown_max_durationz!Updating labels of instance [{0}]z/Changing minimum CPU platform of instance [{0}]z6Setting deletion protection of instance [{0}] to [{1}]z+Updating partner metadata of instance [{0}]z:Updating graceful shutdown configuration of instance [{0}]shielded_vm_secure_bootshielded_vm_vtpm shielded_vm_integrity_monitoringz1Setting shieldedInstanceConfig  of instance [{0}]"shielded_vm_learn_integrity_policyz9Setting shieldedInstanceIntegrityPolicy of instance [{0}]enable_display_devicez)Updating display device of instance [{0}]nodenode_affinity_file
node_groupclear_node_affinitiesz)Updating the scheduling of instance [{0}] ))r   ComputeApiHolderr    clientapitools_clientmessagesr   r   ResolveAsResource	resourcesGetInstanceZoneScopeListerr   DiffFromUpdateArgsMayHaveUpdates	instancesGetComputeInstancesGetRequestAsDict_GetLabelsOperationRefhasattrr9   _GetMinCpuPlatformOperationRefdeletion_protection"_GetDeletionProtectionOperationRefr:   partner_metadata_from_file_GetPartnerMetadataOperationRefIsSpecified _GetGracefulShutdownOperationRefr	   Poller_WaitForResultName_GetShieldedInstanceConfigRef&_GetShieldedInstanceIntegrityPolicyRef_GetDisplayDeviceOperationRefrA   r   IsAnySpecified_GetUpdateInstanceSchedulingRef)r2   r3   holderrH   rJ   instance_refresultlabels_operation_refmin_cpu_platform_operation_ref!deletion_protection_operation_refshielded_instance_config_refdisplay_device_refpartner_metadata_operation_refgraceful_shutdown_operation_reflabels_diffinstanceoperation_poller&shielded_instance_integrity_policy_refupdate_scheduling_refs                      r)   r0   Update._RunN   s   **4+<+<+>?F]]**F}}%%H%%7755fmmD 8 FL F%)"(,%#' %)"&*#""11$7K!!##!!%%

-
-
F0C0C0E
FHhf!88
7t'((T-B-B-N'+'J'J


(7$+

1
1&&> ( t'((!@!@'+'K'K
f($ 	)**011677=>>(,(M(M
f)% }}V%5%56  .+\->->-@B LEK    89 ' !'    ;@T557 A ;A    85 ' !' 
 	+H		
 	   	233+,,;<<%)%G%G
f&&"""
8
=



 ) #) 
 <==

5
5l
K -""
B
E



 ) #) 
 /00==

$
$l<""#35G#N#/#4#4#68 B;A  $$T63G%13JL L"BB
f&""

!L



 ) #) 
 Mr,   c           	         UR                   R                  nUR                   R                  n[        R                  " USSS5      (       a  [
        R                  " X%5      nOUR                  S5      (       a  / nOg UR                  R                  UR                  " S0 UR                  5       D65      nXgR                  l        UR                  UR                  5       UR                   UR"                  UUR                  R$                  R&                  UR                  R(                  R*                  S9nUR                  R-                  U5      n	UR.                  R1                  U	R2                  SS9$ )	NrB   rC   rD   rE   rq   projectzoneinstanceResourceminimalActionmostDisruptiveAllowedActioncompute.zoneOperations
collectionrF   )rH   rI   rJ   r   rd   sole_tenancy_util%GetSchedulingNodeAffinityListFromArgsr\   rQ   rR   rS   rT   
schedulingnodeAffinitiesComputeInstancesUpdateRequestr`   rx   ry   MinimalActionValueValuesEnum	NO_EFFECT*MostDisruptiveAllowedActionValueValuesEnumREFRESHr   rL   ParseselfLink)
r2   rg   r3   rf   rH   rJ   
affinitiesrq   request	operations
             r)   re   &Update._GetUpdateInstanceSchedulingRef   sI   ]]**F}}%%H$$T63G%13 3$JJ
j			1	2	2j ##++Dl.A.A.CDFH)3&44""$$$!<<	%	%ii$,$J$J	3	3GG 5 =G   ''0I!!'? " A Ar,   c                    UR                   R                  nUR                   R                  nUR                  c  UR                  c  UR
                  c  g [        R                  " UUR                  UR                  UR
                  5      nUR                  UR                  5       UR                  UUR                  S9nUR                  R                  U5      nUR                  R                  UR                   SS9$ )N)rq   rx   shieldedInstanceConfigry   r}   r~   )rH   rI   rJ   r=   r>   r?   r   #CreateShieldedInstanceConfigMessage3ComputeInstancesUpdateShieldedInstanceConfigRequestr`   rx   ry   rQ   UpdateShieldedInstanceConfigrL   r   r   )	r2   rg   r3   rf   rH   rJ   shieldedinstance_config_messager   r   s	            r)   ra   $Update._GetShieldedInstanceConfigRef   s    ]]**F}}%%H$$,%--5::((!!11		3 $ JJ""$$$>	 K  G   ==gFI!!'? " A Ar,   c                 l   UR                   R                  nUR                   R                  n[        R                  " U5      nUR                  UR                  5       UR                  UUR                  S9nUR                  R                  U5      nUR                  R                  UR                  SS9$ )N)rq   rx   shieldedInstanceIntegrityPolicyry   r}   r~   )rH   rI   rJ   r   ,CreateShieldedInstanceIntegrityPolicyMessage9ComputeInstancesSetShieldedInstanceIntegrityPolicyRequestr`   rx   ry   rQ   "SetShieldedInstanceIntegrityPolicyrL   r   r   )r2   rg   rf   rH   rJ   )shieldedinstance_integrity_policy_messager   r   s           r)   rb   -Update._GetShieldedInstanceIntegrityPolicyRef   s    ]]**F}}%%H 	CCHM . PP""$$$(Q	 Q  G   CCGLI!!'? " A Ar,   c           
          UR                   R                  nUR                   R                  nUR                  UR                  R
                  UR                  5      nUR                  (       a  UR                  UR                  UR                  UR                  UR	                  UR                  UR                  S9S9nUR                  R                  U5      n	UR                  R!                  U	R"                  SS9$ g )N)labelFingerprintlabels)rx   rq   ry   instancesSetLabelsRequestr}   r~   )rH   rI   rJ   ApplyInstancesSetLabelsRequestLabelsValuer   needs_update ComputeInstancesSetLabelsRequestrx   rq   ry   r   rQ   	SetLabelsrL   r   r   )
r2   rp   rq   rg   rf   rH   rJ   labels_updater   r   s
             r)   rU   Update._GetLabelsOperationRef  s    ]]**F}}%%H%%**66M !!99&&((  

,
,'88")) - + : ,g "",,W5i##


)A $ C C "r,   c                 h   UR                   R                  nUR                   R                  nUR                  U=(       d    S S9nUR	                  UR
                  UR                  UUR                  S9nUR                  R                  U5      nUR                  R                  UR                  SS9$ )N)minCpuPlatform)rq   rx   !instancesSetMinCpuPlatformRequestry   r}   r~   )rH   rI   rJ   !InstancesSetMinCpuPlatformRequest(ComputeInstancesSetMinCpuPlatformRequestrq   rx   ry   rQ   SetMinCpuPlatformrL   r   r   )	r2   r9   rg   rf   rH   rJ   embedded_requestr   r   s	            r)   rW   %Update._GetMinCpuPlatformOperationRef  s    ]]**F}}%%HAA'/4 B 1??&&$$*:	 @  G   227;I!!'? " A Ar,   c                 8   UR                   R                  nUR                   R                  nUR                  UUR                  UR
                  UR                  S9nUR                  R                  U5      nUR                  R                  UR                  SS9$ )N)deletionProtectionrx   resourcery   r}   r~   )rH   rI   rJ   ,ComputeInstancesSetDeletionProtectionRequestrx   rq   ry   rQ   SetDeletionProtectionrL   r   r   )r2   rX   rg   rf   rH   rJ   r   r   s           r)   rY   )Update._GetDeletionProtectionOperationRef-  s    ]]**F}}%%HCC.$$&&	 D  G   66w?I!!'? " A Ar,   c                 R   UR                   R                  nUR                   R                  nUR                  UR	                  US9UR
                  UR                  UR                  S9nUR                  R                  U5      nUR                  R                  UR                  SS9$ )N)enableDisplay)displayDevicerx   rq   ry   r}   r~   )rH   rI   rJ   *ComputeInstancesUpdateDisplayDeviceRequestDisplayDevicerx   rq   ry   rQ   UpdateDisplayDevicerL   r   r   )r2   display_devicerg   rf   rH   rJ   r   r   s           r)   rc   $Update._GetDisplayDeviceOperationRef;  s    ]]**F}}%%HAA,,( - *$$&& B  G   44W=I!!'? " A Ar,   c           	         UR                   R                  nUR                   R                  nUR                  R	                  UR
                  " S0 UR                  5       D65      nUR                  R                  n[        US5      (       a:  UR                  S5      (       a$  Uc  UR                  5       nUR                  Ul        [        US5      (       aG  UR                  S5      (       a1  Uc  UR                  5       nUR                  UR                  S9Ul        XvR                  l        UR#                  UR%                  5       UR&                  UR(                  UUR"                  R*                  R,                  UR"                  R.                  R0                  S9nUR                  R3                  U5      n	UR4                  R7                  U	R8                  SS9$ )Nr;   r<   )secondsrw   r}   r~   rF   )rH   rJ   rI   rQ   rR   rS   rT   r   gracefulShutdownrV   r\   SchedulingGracefulShutdownr;   enabledDurationr<   maxDurationr   r`   rx   ry   r   r   r   r   r   rL   r   r   )
r2   r3   rg   rf   rJ   rH   rq   !updated_graceful_shutdown_messager   r   s
             r)   r]   'Update._GetGracefulShutdownOperationRefI  s   }}%%H]]**F##++Dl.A.A.CDH )1(;(;(L(L%t())d.>.>/ / 
+	2//1 	* 372H2H'/t5664;K;K(< < 
+	2//1 	* 7?6G6G55 7H 7'3 ,M(44""$$$!<<YYcc$,$J$J$u$u$}$} 5 G   ''0I!!'? "  r,   c           
         UR                   R                  nUR                   R                  n[        R                  " U5      n[        R
                  " U5        UR                  R                  5       nUR                  5        HV  u  pUR                  R                  UR                  R                  R                  U[        R                  " X5      S95        MX     UR                  R                  UR                  " S0 UR!                  5       D65      n
Xzl        UR%                  UR'                  5       UR(                  UR*                  U
UR$                  R,                  R.                  UR$                  R0                  R2                  S9nUR                  R5                  U5      nUR6                  R9                  UR:                  SS9$ )N)keyvaluerw   r}   r~   rF   )rH   rJ   rI   r   CreatePartnerMetadataDictValidatePartnerMetadataInstancePartnerMetadataValueitemsadditionalPropertiesappendAdditionalPropertyConvertStructuredEntriesrQ   rR   rS   rT   partnerMetadatar   r`   rx   ry   r   r   r   r   r   rL   r   r   )r2   r3   rg   rf   rJ   rH   partner_metadata_dictpartner_metadata_message	namespacestructured_entriesrq   r   r   s                r)   r[   &Update._GetPartnerMetadataOperationReft  s   }}%%H]]**F88>  223HI'00EEG)>)D)D)F%	33::



0
0
C
C*CC$ D  *G ##++Dl.A.A.CDFH744""$$$!<<	%	%ii$,$J$J	3	3GG 5 =G   ''0I!!'? " A Ar,   c                 Z    U(       a$  [         R                  " XUR                  " U6 5      $ g r.   )r
   WaitForformat)r2   rr   operation_refmessager3   s        r)   r_   Update._WaitForResult  s)    ^^
7>>4+@B Br,   rF   N)__name__
__module____qualname____firstlineno____doc__staticmethodr*   r4   r0   re   ra   rb   rU   rW   rY   rc   r]   r[   r_   __static_attributes__rF   r,   r)   r   r   9   sc     1
K 
Kn`A<A4A"C,A AA)V ADr,   r   c                   .    \ rS rSrSr\S 5       rS rSrg)
UpdateBetai  r   c                    [         R                  R                  U SS9  [        R                  " U 5        [         R
                  " U [        R                  5       5        [         R                  " U SS9  [         R                  " U SSS9  [         R                  " U 5        [         R                  " U SS9  [        R                  " U SS9  [        R                  " U 5        [         R                   " U 5        g r   )r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r   AddPartnerMetadataArgsAddGracefulShutdownArgsr'   s    r)   r*   UpdateBeta.Args  s    	""6("C$$V,	
(?(?(AB	##FeD	''%D:	008	f5226TJ11&9	!!&)r,   c                 $    U R                  U5      $ r.   r/   r1   s     r)   r4   UpdateBeta.Run  r6   r,   rF   N)	r   r   r   r   r   r   r*   r4   r   rF   r,   r)   r   r     s    0* *r,   r   c                   (    \ rS rSrSr\S 5       rSrg)UpdateAlphai  r   c                    [         R                  R                  U SS9  [        R                  " U 5        [         R
                  " U [        R                  5       5        [         R                  " U SS9  [         R                  " U SSS9  [         R                  " U 5        [         R                  " U SS9  [        R                  " U SS9  [        R                  " U 5        [         R                   " U 5        g r   )r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r   r   r   r'   s    r)   r*   UpdateAlpha.Args  s    	""6("C$$V,	(@(@(BC	##FeD	''%D:	008	f5226TJ11&9	!!&)r,   rF   N)r   r   r   r   r   r   r*   r   rF   r,   r)   r   r     s    0* *r,   r   N)#r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   )googlecloudsdk.api_lib.compute.operationsr	   googlecloudsdk.api_lib.utilr
   googlecloudsdk.callioper   ,googlecloudsdk.command_lib.compute.instancesr   /googlecloudsdk.command_lib.compute.sole_tenancyr%   r   r   $googlecloudsdk.command_lib.util.argsr   DETAILED_HELPUniverseCompatibleReleaseTracksr    GAUpdateCommandr   BETAr   ALPHAr   detailed_helprF   r,   r)   <module>r     s    . &  ' 7 9 A < . ( > W U <
0 D%%(()_T _ * _D D%%**+  ,* D%%++,** * -*$ % r,   