
    t                        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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 jr\R@                  " SSSS9\RB                  \RD                  " \RF                  RH                  5       " S S\RJ                  5      5       5       5       r&\RD                  " \RF                  RN                  5       " S S\&5      5       r(\RD                  " \RF                  RR                  5       " S S\(5      5       r*SSSS.\&l+        g )"z>Command for creating instance templates running Docker images.    )absolute_import)division)unicode_literals)base_classes)containers_utils)image_utils)instance_template_utils)instance_utils)metadata_utils)utils)base)
exceptions)
completers)flags)labels_util)logFc                    U R                   R                  [        R                  5        [        R
                  " U 5        [        R                  " XS9  [        R                  " U UUUS9  U[        R                  R                  :X  a  [        R                  " U 5        O4U[        R                  R                  :X  a  [        R                  " U 5        [        R                  " U 5        [        R                   " U 5        [        R"                  " U SSUS9  [        R$                  " U 5        U[        R                  R                  4;   n[        R&                  " X5        [        R(                  " U 5        [        R*                  " U 5        [        R,                  " U S5        [        R.                  " U 5        [        R0                  " U 5        [        R2                  " U 5        [        R4                  " U 5        [        R6                  " U 5        [        R8                  " X5        [        R:                  " U SS9  [        R<                  " U 5        [        R>                  " U 5        [        R@                  " U 5        [        RB                  " U 5        [D        RF                  " U 5        [        RH                  " U 5        [        RJ                  " X5        [        RL                  " U 5        [        RN                  " U 5        [        RP                  " U 5        [R        RT                  " U SS5        [        RV                  " U S	S
US9  [        RX                  " X	S9  U(       a  [        RZ                  " U 5        [\        R^                  " U SSS9  U(       a  U Ra                  SSS9  U Ra                  SSS9  [        Rb                  " 5       [d        l3        [d        Rf                  Ri                  U SS9  U R                   Rk                  [l        Rn                  5        U
(       a  [        Rp                  " U 5        U(       a  [        Rr                  " U 5        gg)z'Add flags shared by all release tracks.)container_mount_enabled)r   support_multi_writersupport_disk_labelsFT)	instances
containerssupport_ipv6_only)instancezadded tozinstance-templatezCSpecifies the reservation for instances created from this template.zAThe type of reservation for instances created from this template.)
group_textaffinity_text support_specific_then_x_affinity)support_flex_startzinstance templatecreate)resource_typeoperation_typez--subnet-regionz'Specifies the region of the subnetwork.)helpz--descriptionz:Specifies a textual description for the instance template.)r!   N):display_info	AddFormatinstance_templates_flagsDEFAULT_LIST_FORMATr   AddMetadataArgsinstances_flagsAddDiskArgsAddCreateDiskArgsr   ReleaseTrackALPHAAddLocalSsdArgsWithSizeBETAAddLocalSsdArgsAddCanIpForwardArgsAddContainerMountDiskFlagAddAddressArgsAddMachineTypeArgsAddMaintenancePolicyArgsAddNoRestartOnFailureArgsAddPreemptibleVmArgsAddServiceAccountAndScopeArgsAddTagsArgsAddCustomMachineTypeArgsAddNetworkArgsAddKonletArgsAddImageArgsAddMinCpuPlatformArgsAddNetworkTierArgsAddConfidentialComputeArgsAddShieldedInstanceConfigArgsAddIPv6AddressArgsAddIPv6PrefixLengthArgsr   AddCreateLabelsFlagsAddPrivateNetworkIpArgsAddStackTypeArgsAddIpv6NetworkTierArgsAddInternalIPv6AddressArgsAddInternalIPv6PrefixLengthArgsmaintenance_flagsAddResourcePoliciesArgsAddReservationAffinityGroupAddProvisioningModelVmArgsAddAcceleratorArgsr   AddRegionFlagadd_argumentMakeInstanceTemplateArgCreateWithContainerInstanceTemplateArgAddArgumentAddCacheUpdaterr   InstanceTemplatesCompleterAddSkipGuestOsShutdownArgsAddWorkloadIdentityConfigArgs)parserrelease_trackr   enable_guest_acceleratorsr    support_region_instance_templater   r   r   r   support_skip_guest_os_shutdown support_workload_identity_configdeprecate_maintenance_policys                ?lib/surface/compute/instance_templates/create_with_container.py_Argsr`   (   sJ    	 8 L LM  ( ##5/-	 d''---++F3))...##F+%%f-++F3  )	 $$V,!.43D3D3J3J2K!K**6P++F3&&v.//>f%**62  ('v&''>$$Vd;,,V4//7$$V,))&1""6*))&1""6=((0,,V411&9++j- --Z['G	 ,, &&v./ &
 I   	G   668 ) ))55X 6  	%%j&K&KL#..v6%11&9 &    zThe option to deploy a container during VM creation using the container startup agent is deprecated. Use alternative services to run containers on your VMs. Learn more at https://cloud.google.com/compute/docs/containers/migrate-containers.)
is_removedwarningerrorc                       \ rS rSrSrSrSrSrSr\	S 5       r
S rS rS r  SS
 jrS rS rS rS rS r SS jrS rSrg	)rQ      ACommand for creating VM instance templates hosting Docker images.FTc                     [        U [        R                  R                  SSSSSSSSS9
  [        R
                  " U [        R                  5        g )NTF)r   r   r[   r   r   r   r\   r]   )r`   r   r+   GAr(   (AddPrivateIpv6GoogleAccessArgForTemplater   COMPUTE_GA_API_VERSIONrX   s    r_   ArgsCreateWithContainer.Args   sO    	 $").).!'+). <<,,ra   c                 j   [         R                  " U5        [         R                  " U5        [         R                  " U5        [         R                  " U5        [         R
                  " U5        [        R                  " UR                  =(       d    / 5      (       a  [        R                  " SS5      eg )Nz--diskz)Boot disk specified for containerized VM.)r(   ValidateKonletArgsValidateDiskCommonFlags"ValidateServiceAccountAndScopeArgsValidateNicFlags ValidateReservationAffinityGroupr
   UseExistingBootDiskdiskr   InvalidArgumentExceptionselfargss     r_   _ValidateArgs!CreateWithContainer._ValidateArgs   s    &&t,++D166t<$$T*44T:))$))/r:://
?  ;ra   c                     [         R                  " UR                  5      n[         R                  " X!R                  5        U$ N)r   	BytesToGbboot_disk_sizeWarnIfDiskSizeIsTooSmallboot_disk_type)ry   rz   boot_disk_size_gbs      r_   _GetBootDiskSize$CreateWithContainer._GetBootDiskSize   s2    (;(;<	""#46I6IJra   c                 T    [         R                  R                  XR                  5      $ r~   )rQ   rR   ResolveAsResource	resources)ry   rz   holders      r_   _GetInstanceTemplateRef+CreateWithContainer._GetInstanceTemplateRef   s$    22DD ra   Nc                     [         R                  " X5      n[        R                  " UR                  UUR                  5       UUU5      $ r~   )r
   GetValidatedMetadatar   CreateKonletMetadataMessagemessagesName)ry   rz   clientinstance_template_refcontainer_mount_disk_enabledcontainer_mount_diskuser_metadatas          r_   _GetUserMetadata$CreateWithContainer._GetUserMetadata   sF     #77EM77""$$ ra   c           
      Z   UR                   (       aT  [        R                  " UR                  [        R
                  " U5      UR                  UR                   UR                  S9$ [        USS 5      n[        USS 5      n[        USS 5      n[        USS 5      n[        USS 5      n[        USS 5      n	[        USS 5      n
[        US	S 5      n[        R                  " S0 S
UR                  _S[        R
                  " U5      _SUR                  _SUR                  _SUR                  _SUR                  _SUR                  _SUR                  (       d!  UR                  (       d  [        R                  OUR                  _S[        USS 5      _SU_SU_SU_SU_SU_SU	_SU
_S	U_6/$ )N)r   scope_listerr   network_interface_argsubnet_region
stack_typeipv6_network_tieripv6_addressipv6_prefix_lengthexternal_ipv6_addressexternal_ipv6_prefix_lengthinternal_ipv6_addressinternal_ipv6_prefix_lengthr   r   r   network
private_ipr   subnetaddressnetwork_tier )network_interfacer	   CreateNetworkInterfaceMessagesr   r   GetDefaultScopeListerr   regiongetattrCreateNetworkInterfaceMessager   private_network_ipr   
no_addressr   EPHEMERAL_ADDRESS)ry   rz   r   r   r   r   r   r   r   r   r   r   s               r_   _GetNetworkInterfaces)CreateWithContainer._GetNetworkInterfaces   s   $CC$$226:?? $ 6 6  |T2J&94@46L ';TB#D*A4H")+T# $D*A4H")+T# 	 == 	
&&	
44V<	
 __	
 LL		

 ..	
 ++	
 ;;	
 t|| (99\\	
 !~t<	
 "	
 0	
  &!	
"  2#	
$ #8%	
& )D'	
( #8)	
* )D+	
 ra   c           	         S nU R                   (       a"  UR                  S5      (       a  UR                  n[        R                  " UR
                  UR                  UR                  UR                  UR                  US9$ )Nskip_guest_os_shutdown)r   maintenance_policypreemptibleprovisioning_modelrestart_on_failurer   )
_support_skip_guest_os_shutdownIsKnownAndSpecifiedr   r
   CreateSchedulingMessager   r   r   r   r   )ry   rz   r   r   s       r_   _GetScheduling"CreateWithContainer._GetScheduling  su    !++0H0H 1 1  $::1122$$22225 ra   c                     UR                   (       a  S nOUR                  n[        R                  " UR                  UR
                  (       a  / US9$ UR                  US9$ )N)r   scopesservice_account)no_service_accountr   r
   CreateServiceAccountMessagesr   	no_scopesr   )ry   rz   r   r   s       r_   _GetServiceAccounts'CreateWithContainer._GetServiceAccounts$  sU    o,,o66^^r' )-' ra   c                    UR                  S5      (       d,  UR                  S5      (       d  UR                  S5      (       a  [        R                  " X#R                  5      nUR	                  UR
                  UR                  UR                  UR                  S9u  pgUR                  R                  U5      R
                  S:w  a  [        R                  " S5        U$ [        R                  " U5      nU$ )Nimageimage_familyimage_project)user_projectr   r   r   z	cos-cloudzThis container deployment mechanism requires a Container-Optimized OS image in order to work. Select an image from a cos-cloud project (cos-stable, cos-beta, cos-dev image families).)IsSpecifiedr   ImageExpanderr   ExpandImageFlagprojectr   r   r   Parser   rc   r   ExpandKonletCosImageFlag)ry   rz   r   r   r   image_expander	image_uri_s           r_   _GetImageUri CreateWithContainer._GetImageUri/  s    !!N++O,,"009I9IJn#33,44

((**	 4 li 
						*	2	2k	A'	
  #;;FCira   c                     [         R                  " UR                  UR                  UR                  [        USS 5      [        USS 5      S9$ )Ncustom_extensionscustom_vm_type)machine_type
custom_cpucustom_memoryextvm_type)r
   InterpretMachineTyper   r   r   r   rx   s     r_   _GetMachineType#CreateWithContainer._GetMachineTypeG  sH    ..&&??((D-t4.5 ra   c                     U R                  U5      n[        R                  " UR                  =(       d    / UR                  =(       d    / -   5      (       + n[
        R                  " UUUR                  UR                  UUUUU R                  S9	$ )N)create_boot_diskmatch_container_mount_disksr   )
r   r
   ru   rv   create_diskr	   CreateDiskMessagesr   r   _support_disk_labels)	ry   rz   r   r   r   r   r   r   r   s	            r_   	_GetDisksCreateWithContainer._GetDisksP  s     --d3 	**YY_"!1!1!7R8	

 #55%%)$? 55
 
ra   c                 v   U R                  U5        [        R                  " U5        [        R                  " U R                  5       5      n[        R                  " X!R                  UR                  UR                  5      nUR                  nU R                  X5      nU R                  XX%5      n[        R                  " SXbR                  UR                   R"                  5      n[$        R&                  " XR                   R"                  R(                  5      nU(       a%  UR*                  R-                  UR*                  5        U R/                  UUUSUS9n	U R1                  XU5      n
U R3                  X5      nU R5                  X5      nU R7                  U5      nU R9                  UUUUUSS9n[:        R<                  " UR                   USSS9n[>        R@                  " XR                   U RB                  5      nUR                   R#                  UUURD                  UUU	URF                  U
UU[        RH                  " UR                   URJ                  5      S9nU RB                  (       a  U(       a  UUl&        URN                  (       a  URN                  Ul(        URR                  b>  [        RT                  " UR                   5      RW                  URR                  5      Ul,        [:        RZ                  " UR                   US9nU(       a  UUl.        [>        R^                  " UUU R`                  S9Ul1        UR                   Re                  UR                   Rg                  UURh                  URk                  5       S	9URl                  S
9nURo                  URp                  Rr                  SU4/5      $ )Issues an InstanceTemplates.Insert request.

Args:
  args: the argparse arguments that this command was invoked with.

Returns:
  an InstanceTemplate message object
NTr   r   r   r   rz   !support_confidential_compute_type%support_confidential_compute_type_tdx)machineTypediskscanIpForwardconfidentialInstanceConfiglabelsmetadataminCpuPlatformnetworkInterfacesserviceAccounts
schedulingtagsr   rz   r   
propertiesdescriptionnameinstanceTemplater   Insert):r{   r(   ValidateNetworkTierArgsr   ComputeApiHolderr+   GetValidatedContainerMountDiskr   rv   r   r   r   r   r   GetLabelsMessageWithCosVersionr   r   InstancePropertiesr   ParseCreateArgsLabelsValueadditionalPropertiesextendr   r   r   r   r   r   create_utils&BuildConfidentialInstanceConfigMessager
   #CreateWorkloadIdentityConfigMessage!_support_workload_identity_configcan_ip_forwardmin_cpu_platformCreateTagsMessager   workloadIdentityConfigresource_policiesresourcePoliciesprivate_ipv6_google_access_type3GetPrivateIpv6GoogleAccessTypeFlagMapperForTemplateGetEnumForChoiceprivateIpv6GoogleAccess"BuildShieldedInstanceConfigMessageshieldedInstanceConfigGetReservationAffinity!_support_specific_then_x_affinityreservationAffinity%ComputeInstanceTemplatesInsertRequestInstanceTemplater  r   r   MakeRequestsapitools_clientinstanceTemplates)ry   rz   r   r   r   r   r   r   argument_labelsr   network_interfacesr   service_accountsr   r   confidential_instance_configworkload_identity_configr    shielded_instance_config_messagerequests                       r_   RunCreateWithContainer.Runl  sg    	t++D1**4+<+<+>?F*II))499d6F6F ]]F 88F!!$NI<<i))6??+M+MF "11oo00<<O !!(()M)MN$$%)1 % H 33D&I$$T2J//=''-LNN$(  E 	;;__.226		
 ! 	:://4#I#I	
  33 ((#?,,,(//K 4 J --2J*Bj'$($:$:j!++7

M
MooTAAB ( 	77__4	
 %
 (*Jj'%3%J%J)-)O)O&J" ooCC99!((&++- : 

 &-- D G 

 
 
2
2Hg	FG ra   r   )FN)F)__name__
__module____qualname____firstlineno____doc__r   r   r   r  staticmethodrm   r{   r   r   r   r   r   r   r   r   r   r.  __static_attributes__r   ra   r_   rQ   rQ      sx    * J&+#$(!&+# "	
 $)$-^	0  #(8qra   rQ   c                   R   ^  \ rS rSrSrSrSrSrSr\	S 5       r
U 4S jrS rSrU =r$ )	CreateWithContainerBetai  rg   TFc                     [        U [        R                  R                  SSSSSSSSSS9  [        R
                  " U [        R                  5        g )NTF	r   rZ   r[   r   r   r   r   r\   r]   )r`   r   r+   r.   r(   rj   r   COMPUTE_BETA_API_VERSIONrl   s    r_   rm   CreateWithContainerBeta.Args  sR    	 $"&).)- '+). <<..ra   c                 X   > [         [        U ]  U5        [        R                  " U5        g r~   )superr8  r{   r(   ValidateLocalSsdFlags)ry   rz   	__class__s     r_   r{   %CreateWithContainerBeta._ValidateArgs  s!    	
!46t<))$/ra   c                    U R                  U5        [        R                  " U5        [        R                  " U R                  5       5      n[        R                  " X!R                  UR                  UR                  5      nUR                  nU R                  X5      nU R                  XX%5      n[        R                  " SXbR                  UR                   R"                  5      n[$        R&                  " XR                   R"                  R(                  5      nU(       a%  UR*                  R-                  UR*                  5        U R/                  UUUSUS9n	U R1                  XU5      n
U R3                  X5      nU R5                  X5      nU R7                  U5      nU R9                  UUUUUSS9n[:        R<                  " UR                   USSS9n[>        R@                  " UR                   [C        USS5      5      n[D        RF                  " XR                   U RH                  5      nUR                   R#                  UUURJ                  UUU	URL                  U
UU[        RN                  " UR                   URP                  5      US9nU RH                  (       a  U(       a  UUl)        URT                  (       a  URT                  Ul+        URX                  b>  [        RZ                  " UR                   5      R]                  URX                  5      Ul/        [:        R`                  " UR                   US9nU(       a  UUl1        [D        Rd                  " UUU Rf                  S	9Ul4        UR                   Rk                  UR                   Rm                  UURn                  URq                  5       S
9URr                  S9nURu                  URv                  Rx                  SU4/5      $ r   NTr   r   r   accelerator)r   r   r   r   r   r   r   r   r   r   r   guestAcceleratorsr   r   r   r  r  =r{   r(   r  r   r  r+   r  r   rv   r   r   r   r   r   r	  r   r   r
  r   r  r  r  r  r   r   r   r   r   r   r  r  r	   CreateAcceleratorConfigMessagesr   r
   r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r  r   r   r$  r%  r&  ry   rz   r   r   r   r   r   r   r'  r   r(  r   r)  r   r   r*  guest_acceleratorsr+  r   r,  r-  s                        r_   r.  CreateWithContainerBeta.Run   s    	t++D1**4+<+<+>?F*II))499d6F6F ]]F 88F!!$NI<<i))6??+M+MF "11oo00<<O !!(()M)MN$$%)1 % H 33D&I$$T2J//=''-LNN$(  E 	;;__.226		
 ! 	 ??OOWT=$?	
  	:://4#I#I	
  33 ((#?,,,(//K, 4 J --2J*Bj'$($:$:j!++7

M
MooTAAB ( 	77__4	
 %
 (*Jj'%3%J%J)-)O)O&J" ooCC99!((&++- : 

 &-- D G 

 
 
2
2Hg	FG ra   r   )r0  r1  r2  r3  r4  r   r   r   r  r5  rm   r{   r.  r6  __classcell__)r@  s   @r_   r8  r8    sA    I&*#$(!&+# $0w wra   r8  c                   B    \ rS rSrSrSrSrSrSrSr	\
S 5       rS rSrg)CreateWithContainerAlphaiz  rg   Tc                 (   [        U [        R                  R                  SSSSSSSSSS9  [        R
                  " U 5        [        R                  " U [        R                  5        [        R                  " U 5        [        R                  " U 5        g )NTr:  )r`   r   r+   r,   r(   AddLocalNvdimmArgsrj   r   COMPUTE_ALPHA_API_VERSIONAddIPv6AddressAlphaArgsAddIPv6PrefixLengthAlphaArgsrl   s    r_   rm   CreateWithContainerAlpha.Args  s~    	 $"&)-)- '+)- &&v.<<// ++F3008ra   c                    U R                  U5        [        R                  " U5        [        R                  " U R                  5       5      n[        R                  " X!R                  UR                  UR                  5      nUR                  nU R                  X5      nU R                  XX%5      n[        R                  " SXbR                  UR                   R"                  5      n[$        R&                  " XR                   R"                  R(                  5      nU(       a%  UR*                  R-                  UR*                  5        U R/                  UUUSUS9n	U R1                  XU5      n
U R3                  X5      nU R5                  X5      nU R7                  U5      nU R9                  UUUUUSS9n[:        R<                  " UR                   USSS9n[>        R@                  " UR                   [C        USS5      5      n[D        RF                  " XR                   U RH                  5      nUR                   R#                  UUURJ                  UUU	URL                  U
UU[        RN                  " UR                   URP                  5      US9nU RH                  (       a  U(       a  UUl)        URT                  b  URT                  Ul+        URX                  b>  [        RZ                  " UR                   5      R]                  URX                  5      Ul/        [:        R`                  " UR                   US9nU(       a  UUl1        [D        Rd                  " UUU Rf                  S	9Ul4        UR                   Rk                  UR                   Rm                  UURn                  URq                  5       S
9URr                  S9nURu                  URv                  Rx                  SU4/5      $ rC  rF  rH  s                        r_   r.  CreateWithContainerAlpha.Run  s    	t++D1**4+<+<+>?F*II))499d6F6F ]]F 88F!!$NI<<i))6??+M+MF "11oo00<<O !!(()M)MN$$%)1 % H 33D&I$$T2J//=''-LNN$(  E 	;;__.226		
 ! 	 ??OOWT=$?	
  	:://4#I#I	
  33 ((#?,,,(//K, 4 J --2J*Bj')$($:$:j!++7

M
MooTAAB ( 	77__4	
 %
 (*Jj'%3%J%J)-)O)O&J" ooCC99!((&++- : 

 &-- D G 

 
 
2
2Hg	FG ra   r   N)r0  r1  r2  r3  r4  r   r   _support_ipv6_onlyr   r  r5  rm   r.  r6  r   ra   r_   rM  rM  z  s;    I&*#$(!&*#9 9*xra   rM  zg    Creates a Compute Engine a virtual machine instance template that runs
    a Docker container.
    a          *{command}* creates a Compute Engine virtual
        machine instance template that runs a container image. To create
        an instance template named 'instance-template-1' that runs the
        'busybox' image, run:

          $ {command} instance-template-1              --container-image=gcr.io/google-containers/busybox

        For more examples, refer to the *EXAMPLES* section below.
        aO          To create a template named 'instance-template-1' that runs the
        gcr.io/google-containers/busybox image and executes 'echo "Hello world"'
        as a command, run:

          $ {command} instance-template-1             --container-image=gcr.io/google-containers/busybox             --container-command='echo "Hello world"'

        To create a template running gcr.io/google-containers/busybox in
        privileged mode, run:

          $ {command} instance-template-1             --container-image=gcr.io/google-containers/busybox             --container-privileged
        )briefDESCRIPTIONEXAMPLESN)
FFTFFFFFFF),r4  
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   r	   r
   r   r   /googlecloudsdk.api_lib.compute.instances.creater  googlecloudsdk.callioper   r   "googlecloudsdk.command_lib.computer   r   5googlecloudsdk.command_lib.compute.instance_templatesr%   ,googlecloudsdk.command_lib.compute.instancesr(   4googlecloudsdk.command_lib.compute.resource_policiesrI   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer   r`   	DeprecateDefaultUniverseOnlyReleaseTracksr+   ri   CreateCommandrQ   r.   r8  r,   rM  detailed_helpr   ra   r_   <module>ri     sb   E &  ' 7 ; 6 B 9 9 0 Q ( . 9 4 c Q [ < # "#%*%*#(%*f:R 	P	P$ D%%(()x$,, x * %(xv	 D%%**+V1 V ,Vr D%%++,W6 W -Wv
! %  !ra   