
    pI                     &   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ddZej0                   ej2                  ej4                  j6                         G d dej8                                      Z ej2                  ej4                  j<                         G d de             Z ej2                  ej4                  j@                         G d de             Z!ee_"        y)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                   h    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zy)Update(Update a Compute Engine virtual machine.c                    t         j                  j                  | d       t        j                  |        t        j
                  | t        j                                t        j                  | d       t        j                  | dd       t        j                  |        t        j                  | d       t        j                  | d       y 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ArgszUpdate.Args>   s     
""6("C$$V,	(;(;(=>	##FeD	''%D:	008	f5226TJ    c                 $    | j                  |      S N_Runselfargss     r(   Runz
Update.RunK       99T?r*   c                    t        j                  | j                               }|j                  j                  }|j                  j
                  }t        j                  j                  ||j                  t        j                  |j                              }d }d }d }d }	d }
d }d }d }t        j                  j                  |      }|j                         rO|j                  j!                   |j"                  di |j%                               }|}| j'                  ||||      }t)        |d      r)|j*                  | j-                  |j*                  ||      }|j.                  | j1                  |j.                  ||      }	t)        |d      r+|j2                  s|j4                  r| j7                  |||      }t)        |d      r|j9                  d      st)        |d      r$|j9                  d      r| j;                  |||      }t=        j>                  |j                        }| jA                  ||d|jC                               xs |}| jA                  ||d|jC                               xs |}| jA                  ||	d|jC                         |j.                        xs |}| jA                  ||d	|jC                               xs |}| jA                  ||d
|jC                               xs |}|j9                  d      s"|j9                  d      s|j9                  d      r9| jE                  |||      }
| jA                  ||
d|jC                               xs |}|j9                  d      r8| jG                  ||      }| jA                  ||d|jC                               xs |}|j9                  d      rC| jI                  |jJ                  ||      }| jA                  ||d|jC                               xs |}tM        jN                  |dddd      r9| jQ                  |||      }| jA                  ||d|jC                               xs |}|S )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hasattrr6   _GetMinCpuPlatformOperationRefdeletion_protection"_GetDeletionProtectionOperationRefr7   partner_metadata_from_file_GetPartnerMetadataOperationRefIsSpecified _GetGracefulShutdownOperationRefr	   Poller_WaitForResultName_GetShieldedInstanceConfigRef&_GetShieldedInstanceIntegrityPolicyRef_GetDisplayDeviceOperationRefr>   r   IsAnySpecified_GetUpdateInstanceSchedulingRef)r0   r1   holderrE   rG   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(   r.   zUpdate._RunN   s   **4+<+<+>?F]]**F}}%%H%%77f55fmmD 8 FL F%)"(,%#' %)"&*#""11$7K!!#!!%%
-(
-
-
F0C0C0E
FHhf!88
xv7t'(T-B-B-N'+'J'J


v(7$+

1
1&&f> ( t'(!@!@'+'K'K
f($ 	)*0167=>(,(M(M
f)% }}V%5%56  .+\->->-@B LEK    89 ' !'    ;@T557 A ;A    85 ' !' 
 	+H		
 	   	23+,;<%)%G%G
f&&"""
8
=



 ) #) 
 <=

5
5lF
K -""
B
E



 ) #) 
 /0==

$
$lF<""#35G#N#/#4#4#68 B;A  $$T63G%13JL"BB
f&""

!L



 ) #) 
 Mr*   c                    |j                   j                  }|j                   j                  }t        j                  |ddd      rt        j                  ||      }n|j                  d      rg }ny |j                  j                   |j                  di |j                               }||j                  _        |j                  |j                         |j                   |j"                  ||j                  j$                  j&                  |j                  j(                  j*                        }|j                  j-                  |      }	|j.                  j1                  |	j2                  d      S )	Nr?   r@   rA   rB   rn   projectzoneinstanceResourceminimalActionmostDisruptiveAllowedActioncompute.zoneOperations
collectionrC   )rE   rF   rG   r   ra   sole_tenancy_util%GetSchedulingNodeAffinityListFromArgsrY   rN   rO   rP   rQ   
schedulingnodeAffinitiesComputeInstancesUpdateRequestr]   rt   ru   MinimalActionValueValuesEnum	NO_EFFECT*MostDisruptiveAllowedActionValueValuesEnumREFRESHr   rI   ParseselfLink)
r0   rd   r1   rc   rE   rG   
affinitiesrn   request	operations
             r(   rb   z&Update._GetUpdateInstanceSchedulingRef   sG   ]]**F}}%%H$$T63G%13$JJ
j			1	2j ##+++Dl.A.A.CDFH)3H&44""$$$!<<	%	%ii$,$J$J	3	3GG 5 =G   ''0I!!'? " A Ar*   c                    |j                   j                  }|j                   j                  }|j                  |j                  |j
                  y t        j                  ||j                  |j                  |j
                        }|j                  |j                         |j                  ||j                        }|j                  j                  |      }|j                  j                  |j                   d      S )N)rn   rt   shieldedInstanceConfigru   ry   rz   )rE   rF   rG   r:   r;   r<   r   #CreateShieldedInstanceConfigMessage3ComputeInstancesUpdateShieldedInstanceConfigRequestr]   rt   ru   rN   UpdateShieldedInstanceConfigrI   r   r   )	r0   rd   r1   rc   rE   rG   shieldedinstance_config_messager   r   s	            r(   r^   z$Update._GetShieldedInstanceConfigRef   s    ]]**F}}%%H$$,%--5::((!!11		3 $ JJ""$$$>	 K  G   ==gFI!!'? " A Ar*   c                 v   |j                   j                  }|j                   j                  }t        j                  |      }|j                  |j                         |j                  ||j                        }|j                  j                  |      }|j                  j                  |j                  d      S )N)rn   rt   shieldedInstanceIntegrityPolicyru   ry   rz   )rE   rF   rG   r   ,CreateShieldedInstanceIntegrityPolicyMessage9ComputeInstancesSetShieldedInstanceIntegrityPolicyRequestr]   rt   ru   rN   "SetShieldedInstanceIntegrityPolicyrI   r   r   )r0   rd   rc   rE   rG   )shieldedinstance_integrity_policy_messager   r   s           r(   r_   z-Update._GetShieldedInstanceIntegrityPolicyRef   s    ]]**F}}%%H 	CCHM . PP""$$$(Q	 Q  G   CCGLI!!'? " A Ar*   c           	         |j                   j                  }|j                   j                  }|j                  |j                  j
                  |j                        }|j                  r|j                  |j                  |j                  |j                  |j	                  |j                  |j                              }|j                  j                  |      }	|j                  j!                  |	j"                  d      S y )N)labelFingerprintlabels)rt   rn   ru   instancesSetLabelsRequestry   rz   )rE   rF   rG   ApplyInstancesSetLabelsRequestLabelsValuer   needs_update ComputeInstancesSetLabelsRequestrt   rn   ru   r   rN   	SetLabelsrI   r   r   )
r0   rm   rn   rd   rc   rE   rG   labels_updater   r   s
             r(   rR   zUpdate._GetLabelsOperationRef  s    ]]**F}}%%H%%**66M !!99&&((  

,
,'88")) - + : ,g "",,W5i##


)A $ C C "r*   c                 p   |j                   j                  }|j                   j                  }|j                  |xs d       }|j	                  |j
                  |j                  ||j                        }|j                  j                  |      }|j                  j                  |j                  d      S )N)minCpuPlatform)rn   rt   !instancesSetMinCpuPlatformRequestru   ry   rz   )rE   rF   rG   !InstancesSetMinCpuPlatformRequest(ComputeInstancesSetMinCpuPlatformRequestrn   rt   ru   rN   SetMinCpuPlatformrI   r   r   )	r0   r6   rd   rc   rE   rG   embedded_requestr   r   s	            r(   rT   z%Update._GetMinCpuPlatformOperationRef  s    ]]**F}}%%HAA'/4 B 1??&&$$*:	 @  G   227;I!!'? " A Ar*   c                 D   |j                   j                  }|j                   j                  }|j                  ||j                  |j
                  |j                        }|j                  j                  |      }|j                  j                  |j                  d      S )N)deletionProtectionrt   resourceru   ry   rz   )rE   rF   rG   ,ComputeInstancesSetDeletionProtectionRequestrt   rn   ru   rN   SetDeletionProtectionrI   r   r   )r0   rU   rd   rc   rE   rG   r   r   s           r(   rV   z)Update._GetDeletionProtectionOperationRef-  s    ]]**F}}%%HCC.$$&&	 D  G   66w?I!!'? " A Ar*   c                 d   |j                   j                  }|j                   j                  }|j                  |j	                  |      |j
                  |j                  |j                        }|j                  j                  |      }|j                  j                  |j                  d      S )N)enableDisplay)displayDevicert   rn   ru   ry   rz   )rE   rF   rG   *ComputeInstancesUpdateDisplayDeviceRequestDisplayDevicert   rn   ru   rN   UpdateDisplayDevicerI   r   r   )r0   display_devicerd   rc   rE   rG   r   r   s           r(   r`   z$Update._GetDisplayDeviceOperationRef;  s    ]]**F}}%%HAA,,( - *$$&& B  G   44W=I!!'? " A Ar*   c                    |j                   j                  }|j                   j                  }|j                  j	                   |j
                  di |j                               }|j                  j                  }t        |d      r4|j                  d      r#||j                         }|j                  |_        t        |d      rD|j                  d      r3||j                         }|j                  |j                        |_        ||j                  _        |j#                  |j%                         |j&                  |j(                  ||j"                  j*                  j,                  |j"                  j.                  j0                        }|j                  j3                  |      }	|j4                  j7                  |	j8                  d      S )Nr8   r9   )secondsrs   ry   rz   rC   )rE   rG   rF   rN   rO   rP   rQ   r~   gracefulShutdownrS   rY   SchedulingGracefulShutdownr8   enabledDurationr9   maxDurationr   r]   rt   ru   r   r   r   r   r   rI   r   r   )
r0   r1   rd   rc   rG   rE   rn   !updated_graceful_shutdown_messager   r   s
             r(   rZ   z'Update._GetGracefulShutdownOperationRefI  s   }}%%H]]**F##+++Dl.A.A.CDH )1(;(;(L(L%t()d.>.>/ 
+	2//1 	* 372H2H'/t564;K;K(< 
+	2//1 	* 7?6G6G55 7H 7'3 ,MH(44""$$$!<<YYcc$,$J$J$u$u$}$} 5 G   ''0I!!'? "  r*   c           
         |j                   j                  }|j                   j                  }t        j                  |      }t        j
                  |       |j                  j                         }|j                         D ]Y  \  }}	|j                  j                  |j                  j                  j                  |t        j                  |	|                   [ |j                  j                   |j                  di |j!                               }
||
_        |j%                  |j'                         |j(                  |j*                  |
|j$                  j,                  j.                  |j$                  j0                  j2                        }|j                  j5                  |      }|j6                  j9                  |j:                  d      S )N)keyvaluers   ry   rz   rC   )rE   rG   rF   r   CreatePartnerMetadataDictValidatePartnerMetadataInstancePartnerMetadataValueitemsadditionalPropertiesappendAdditionalPropertyConvertStructuredEntriesrN   rO   rP   rQ   partnerMetadatar   r]   rt   ru   r   r   r   r   r   rI   r   r   )r0   r1   rd   rc   rG   rE   partner_metadata_dictpartner_metadata_message	namespacestructured_entriesrn   r   r   s                r(   rX   z&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$h D  *G ##+++Dl.A.A.CDFH7H44""$$$!<<	%	%ii$,$J$J	3	3GG 5 =G   ''0I!!'? " A Ar*   c                 P    |r$t        j                  || |j                  |       S y r,   )r
   WaitForformat)r0   ro   operation_refmessager1   s        r(   r\   zUpdate._WaitForResult  s-    ^^
M>7>>4+@B Br*   N)__name__
__module____qualname____doc__staticmethodr)   r2   r.   rb   r^   r_   rR   rT   rV   r`   rZ   rX   r\   rC   r*   r(   r   r   9   sc     1
K 
Kn`A<A4A"C,A AA)V ADr*   r   c                   &    e Zd ZdZed        Zd Zy)
UpdateBetar   c                    t         j                  j                  | d       t        j                  |        t        j
                  | t        j                                t        j                  | d       t        j                  | dd       t        j                  |        t        j                  | d       t        j                  | d       t        j                  |        t        j                   |        y r   )r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r   AddPartnerMetadataArgsAddGracefulShutdownArgsr&   s    r(   r)   zUpdateBeta.Args  s    	""6("C$$V,	
(?(?(AB	##FeD	''%D:	008	f5226TJ11&9	!!&)r*   c                 $    | j                  |      S r,   r-   r/   s     r(   r2   zUpdateBeta.Run  r3   r*   N)r   r   r   r   r   r)   r2   rC   r*   r(   r   r     s    0* *r*   r   c                        e Zd ZdZed        Zy)UpdateAlphar   c                    t         j                  j                  | d       t        j                  |        t        j
                  | t        j                                t        j                  | d       t        j                  | dd       t        j                  |        t        j                  | d       t        j                  | d       t        j                  |        t        j                   |        y r   )r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r   r   r   r&   s    r(   r)   zUpdateAlpha.Args  s    	""6("C$$V,	(@(@(BC	##FeD	''%D:	008	f5226TJ11&9	!!&)r*   N)r   r   r   r   r   r)   rC   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_helprC   r*   r(   <module>r      s    . &  ' 7 9 A < . ( > W U <
0 D%%(()_T _ * _D D%%**+  ,* D%%++,** * -*$ % r*   