
    8e                        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 jr \RB                  " SSSS9\RD                  \RF                  " \RH                  RJ                  5       " S S\RL                  5      5       5       5       r'\RF                  " \RH                  RP                  5       " S S\'5      5       r)\RF                  " \RH                  RT                  5       " S S\)5      5       r+SSSS .\'l,        g!)#z8Command for creating VM instances running Docker images.    )absolute_import)division)unicode_literals)base_classes)containers_utils)image_utils)instance_utils)metadata_utils)utils)base)
exceptions)
completers)scope)flags)util)labels_util)logFc                    U R                   R                  [        R                  5        [        R
                  " U 5        [        R                  " U SUS9  [        R                  " U UUUS9  [        R                  " U 5        [        R                  " U 5        [        R                  " U SSU	S9  [        R                  " U 5        [        R                  " U 5        [        R                  " XS9  [        R                  " U 5        [        R                  " U 5        [        R                   " U US9  [        R"                  " U 5        [        R$                  " U S5        [        R&                  " U 5        [        R(                  " U 5        [        R*                  " U 5        [        R,                  " U 5        [        R.                  " U 5        [        R0                  " U SS9  [        R2                  " U 5        [        R4                  " U SS	9  [        R6                  " U 5        [        R8                  " U UUU5        [        R:                  " U 5        [        R<                  " U 5        [        R>                  " U 5        [        R@                  " U 5        [B        RD                  " U 5        [        RF                  " X	5        [        RH                  " U 5        [        RJ                  " U 5        [        RL                  " U 5        [        RN                  " U 5        [        RP                  " U 5        U
(       a  [        RR                  " U SS
9  [        RT                  " U SSUS9  [V        RX                  " U SS5        U R[                  SSS9  [        R\                  R_                  U SS9  [        R`                  " 5       [b        l2        [b        Rd                  R_                  U 5        U R                   Rg                  [h        Rj                  5        U(       a  [        Rl                  " U 5        U(       a  [        Rn                  " U 5        [        Rp                  " U 5        g)z'Add flags shared by all release tracks.T)container_mount_enabled)r   support_multi_writersupport_disk_labels)	instances
containerssupport_ipv6_only)	deprecate)support_flex_startF)parserfor_containerinstance)	is_createz+Specifies the reservation for the instance.z)The type of reservation for the instance.)
group_textaffinity_text support_specific_then_x_affinityzadded tor    z--descriptionz1Specifies a textual description of the instances.)helpcreate)operation_typeN)9display_info	AddFormatinstances_flagsDEFAULT_LIST_FORMATr
   AddMetadataArgsAddDiskArgsAddCreateDiskArgsAddCanIpForwardArgsAddContainerMountDiskFlagAddAddressArgsAddAcceleratorArgsAddMachineTypeArgsAddMaintenancePolicyArgsAddNoRestartOnFailureArgsAddPreemptibleVmArgsAddProvisioningModelVmArgs"AddInstanceTerminationActionVmArgsAddServiceAccountAndScopeArgsAddTagsArgsAddCustomMachineTypeArgsAddNetworkArgsAddPrivateNetworkIpArgs AddNetworkPerformanceConfigsArgsAddShieldedInstanceConfigArgsAddKonletArgsAddPublicPtrArgsAddImageArgsAddConfidentialComputeArgsAddNestedVirtualizationArgsAddThreadsPerCoreArgsAddIPv6AddressArgsAddIPv6PrefixLengthArgsr   AddCreateLabelsFlagsAddStackTypeArgsAddIpv6NetworkTierArgsAddInternalIPv6AddressArgsAddInternalIPv6PrefixLengthArgsAddMaxRunDurationVmArgsAddDiscardLocalSsdVmArgsAddGracefulShutdownArgsAddReservationAffinityGroupmaintenance_flagsAddResourcePoliciesArgsadd_argumentINSTANCES_ARGAddArgumentMakeSourceInstanceTemplateArgCreateWithContainerSOURCE_INSTANCE_TEMPLATEAddCacheUpdaterr   InstancesCompleterAddSkipGuestOsShutdownArgsAddWorkloadIdentityConfigArgsAddRequestValidForDurationArgs)r   deprecate_maintenance_policyr   r   !support_confidential_compute_type%support_confidential_compute_type_tdxsupport_snp_svsmr$   r   r   support_graceful_shutdownr   support_skip_guest_os_shutdown support_workload_identity_configs                 6lib/surface/compute/instances/create_with_container.py_Argsrf   '   s?   " 	 C CD  (d,C ##5/-	 %%f-++F3  )	 $$V,$$V,** ++F3&&v.,,+ 44V<//>f%**62  ())&1226://4 '""6D9v&,,'+	 --f5''/$$V,))&1""6*""6=((0,,V411&9))&1**62++FdC-->?'G	 ++FJ
KO   ++F8+L 335 . ..::6B%%j&C&CD#..v6%11&9008    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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 5       rS rS rS rS	 rS
 rS rS rSrg)rW      ;Command for creating VM instances running container images.TFc                    [        U SSSSSSSSSSS9  [        R                  " U SS9  [        R                  " U [        R
                  R                  5        [        R                  " U [        R                  5        [        R                  " U 5        [        R                  " U 5        [        R                  " U 5        g)Register parser args.TF)
r   r   r_   r`   ra   r$   r   r   rc   rd   r   N)rf   r*   AddNetworkTierArgsAddMinCpuPlatformArgsr   ReleaseTrackGAAddPrivateIpv6GoogleAccessArgr   COMPUTE_GA_API_VERSIONAddVisibleCoreCountArgsAddLocalSsdRecoveryTimeoutArgsAddHostErrorTimeoutSecondsArgsr   s    re   ArgsCreateWithContainer.Args   s     
 $"*..2).!'+). &&v=))&$2C2C2F2FG11,, ++F3226:226:rg   c                    U R                  U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R
                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " XR                  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.)_ValidateTrackSpecificArgsr*   ValidateAcceleratorArgsValidateNicFlagsValidateNetworkTierArgsValidateKonletArgsValidateDiskCommonFlags"ValidateServiceAccountAndScopeArgsValidatePublicPtrFlags%ValidateNetworkPerformanceConfigsArgsValidateInstanceScheduling_support_max_run_duration ValidateReservationAffinityGroupr	   UseExistingBootDiskdiskr   InvalidArgumentExceptionselfargss     re   _ValidateArgs!CreateWithContainer._ValidateArgs   s    ##D)++D1$$T*++D1&&t,++D166t<**4099$?..,, ++D144T:))$))/r:://
?  ;rg   c                     g N r   s     re   r}   .CreateWithContainer._ValidateTrackSpecificArgs   s    rg   c                    UR                  S5      (       d,  UR                  S5      (       d  UR                  S5      (       a  [        R                  " X#5      nUR                  US   R                  UR
                  UR                  UR                  S9u  pgUR                  U5      R                  S:w  a  [        R                  " S5        U$ [        R                  " U5      nU$ )Nimageimage_familyimage_projectr   )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   ImageExpanderExpandImageFlagprojectr   r   r   Parser   ri   r   ExpandKonletCosImageFlag)r   r   compute_clientresource_parserinstance_refsimage_expander	image_uri_s           re   GetImageUriCreateWithContainer.GetImageUri   s    !!N++O,,"00
n $33$Q'//

((**	 4 li 
		y	)	1	1[	@'	
  #;;NKirg   c                 8    [         R                  " UUUUUUUSS9$ )NT)!support_internal_ipv6_reservation)create_utilsGetNetworkInterfacesr   r   clientholderr   locationr   skip_defaultss           re   _GetNetworkInterfaces)CreateWithContainer._GetNetworkInterfaces  s/     ,,*.	 	rg   c	           
          UR                   (       a$  [        R                  " UUUR                   UUUSS9$ U R                  XXEXgU5      $ )NT)	resourcesr   network_interface_argr   r   r   r   )network_interfacer   CreateNetworkInterfaceMessagesr   )	r   r   r   r   r   r   r   r   r   s	            re   r   (CreateWithContainer.GetNetworkInterfaces  sY     88 $ 6 6,0  %%fx rg   c                     / SQn[        US5      (       a  UR                  S5        U(       a3  UR                  S5      (       d  [        R                  " U/UQ76 (       d  gg)z8Creates API messages with disks attached to VM instance.)create_disk	local_ssdboot_disk_typeboot_disk_device_nameboot_disk_auto_deleteboot_disk_provisioned_iopslocal_nvdimmr   FT)hasattrappendr   r	   IsAnySpecified)r   r   r   flags_to_checks       re   CheckDiskMessageArgs(CreateWithContainer.CheckDiskMessageArgs-  sV    N t^$$N+  ((--dD^DDrg   c                    U R                  U5        [        R                  " U R                  5       5      nUR                  nUR
                  n[        R                  " X!R                  UR                  UR                  5      n[        R                  " XU R                  5      n[        R                  " U5      n[        R                  " UUUSU R                   U R"                  U R$                  U R&                  U R(                  S9	n[        R*                  " XU5      n	[        R,                  " X5      n
[        R.                  " U5      n[        R0                  " XU5      nU R3                  UUUUUS   R4                  US   R6                  [8        R:                  R<                  U5      nU R?                  XXL5      n[@        RB                  " URD                  UUURF                  RH                  5      n[        RJ                  " X5      n[@        RL                  " URF                  URN                  5      n[        RP                  " XRR                  5      n[        RT                  " UURF                  U RV                  5      n/ nU GH  n[@        RX                  " URF                  UUR[                  5       U
U R\                  US9n/ nU R_                  X5      (       a  [`        Rb                  " UUR[                  5       UR4                  UR6                  [8        R:                  R<                  UUUUU Rd                  U Rf                  U Rh                  U Rj                  S9nS n[        Rl                  " X5      (       aF  [`        Rn                  " UUUUR4                  UR6                  [8        R:                  R<                  US9n[`        Rp                  " UUUUR4                  UR6                  [8        R:                  R<                  S9nURF                  RI                  UUUURr                  UUUURt                  UR[                  5       UU	UUS9nU RV                  (       a  U(       a  UUl;        URx                  b>  [        Rz                  " URF                  5      R}                  URx                  5      Ul?        UR                  S	5      (       a  [        R                  " X5      UlB        [`        R                  " URF                  UU RR                  U R                  U R                  S
9nU(       a  UUlF        U R                  =(       a    UR                  S LnUR                  c2  UR                  c%  U R                  (       a  UR                  c  U(       ao  U(       a  UR                  OS n[        R                  " URF                  UR                  UR                  U R                  (       a  UR                  OS U5      UlN        [        USS 5      nU(       a\  / nU HM  n [        R                  " UU UR4                  UR6                  S9n!UR                  U!R                  5       5        MO     UUlT        [`        R                  " URF                  US9n"U"(       a  U"UlV        UR                  S5      (       a  [        R                  " X5      UlY        URF                  R                  UUUR4                  UR6                  S9n#[        R                  " XU R                  5      U#R                  l^        UR                  UR                  R                  SU#45        GM     UR                  U5      $ )NF)support_min_node_cpu"support_host_error_timeout_secondssupport_max_run_duration"support_local_ssd_recovery_timeoutrb   rc   r   )container_mount_disk_enabledcontainer_mount_disk)r   instance_namer   r   r   r   r   boot_disk_size_gbr   create_boot_disksupport_nvdimm#support_match_container_mount_disksr   )r   r   r   r   r   r   confidential_vm_type)r   r   r   r   r   r   )canIpForwarddisksguestAcceleratorsdescriptionlabelsmachineTypemetadataminCpuPlatformnamenetworkInterfacesserviceAccounts
schedulingtagsrequest_valid_for_duration)messagesr   r_   r`   ra   resource_policies)r   zone)r   r   network_performance_configs)r    sourceInstanceTemplater   r   Insert)br   r   ComputeApiHolderrr   r   r   r*   GetValidatedContainerMountDiskr   r   r   r	   GetSourceInstanceTemplaterX   GetSkipDefaultsGetScheduling#_support_host_error_timeout_secondsr   #_support_local_ssd_recovery_timeout_support_graceful_shutdown_support_skip_guest_os_shutdownGetServiceAccountsGetValidatedMetadataGetBootDiskSizeGbGetInstanceRefsr   r   r   compute_scopes	ScopeEnumZONEr   r   GetLabelsMessageWithCosVersionr   r   InstanceGetCanIpForwardCreateTagsMessager   GetConfidentialVmType"_support_confidential_compute_type#CreateWorkloadIdentityConfigMessage!_support_workload_identity_configCreateKonletMetadataMessageName_container_mount_disk_enabledr   r   CreateDiskMessages_support_create_boot_disk_support_nvdimm$_support_match_container_mount_disks_support_disk_labelsCheckSpecifiedMachineTypeArgsCreateMachineTypeUriGetAcceleratorsr   min_cpu_platformworkloadIdentityConfigprivate_ipv6_google_access_type(GetPrivateIpv6GoogleAccessTypeFlagMapperGetEnumForChoiceprivateIpv6GoogleAccessIsKnownAndSpecifiedCreateParamsparams&BuildConfidentialInstanceConfigMessage&_support_confidential_compute_type_tdx_support_snp_svsmconfidentialInstanceConfig_support_visible_core_countvisible_core_countenable_nested_virtualizationthreads_per_core_support_numa_node_countnuma_node_count$CreateAdvancedMachineFeaturesMessageadvancedMachineFeaturesgetattrmaintenance_utilParseResourcePolicyWithZoner   SelfLinkresourcePolicies"BuildShieldedInstanceConfigMessageshieldedInstanceConfigr   GetNetworkPerformanceConfignetworkPerformanceConfigComputeInstancesInsertRequestGetReservationAffinity!_support_specific_then_x_affinityr    reservationAffinityapitools_clientr   MakeRequests)$r   r   r   r   r   r   source_instance_templater   r   service_accountsuser_metadatar   r   network_interfacesr   r   can_ip_forwardr   r   workload_identity_configrequestsinstance_refr   r   machine_type_uriguest_acceleratorsr    confidential_instance_confighas_visible_core_countr  r   parsed_resource_policiespolicyresource_policy_refshielded_instance_configrequests$                                       re   RunCreateWithContainer.RunA  s   t**4+<+<+>?F]]N&&O*II))499d6F6F  .GGt<<  #223KLM--"+/+S+S!%!?!?+/+S+S"&"A"A'+'K'K
J &88m #77MM&88>"224PM22a  a  %%	   oI <<((	F $33DHN--D *??55 	::##22	
  H%!==

!
!





'+'I'I3h e		"	"4	7	7//&++- ((!&& **//)+/!;;//040Y0Y $ 9 9
  		5	5d	J	J'<<)+ ((!&& **//!5
 (77')&&$$((--  ((11%.&&&..  ".* 2 h  
	/	/4L*B'		-	-	9DD''tCCD 	( 
	!	!">	?	?(55dK%1%X%X!**,0,S,S040[0[11&" 
&.J+ 
*
* 2%%T1 
 
+
+
7"".++0D0D0P# (>D##4 	 ??''11%%(,(E(E$$4" 	( "$(;TB	#% 'F 0 L L"**$$	!
 #
)
)*=*F*F*H
I ( %=! 
9
9%..T 
 
"*B'			7	8	866tL 	) ''EE!9&&  	 F g 
/
/D$J$J *
 oo))33Xw
Go &v &&x00rg   r   N) __name__
__module____qualname____firstlineno____doc__r  r  r  r  r   r  r  r   r  r  r   r+  r  r   r   r   r   staticmethodrz   r   r}   r   r   r   r   r@  __static_attributes__r   rg   re   rW   rW      s    * D"&")-&/(,%" $'+$+/((,%&+#"#$(!&+#; ;0*42(]1rg   rW   c                   j    \ 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SrSrSrSrSr\S 5       rS rSrg)	CreateWithContainerBetai!  rm   TFc                    [        U SSSSSSSSSSSS9  [        R                  " U SS9  [        R                  " U 5        [        R                  " U [
        R                  R                  5        [        R                  " U [        R                  5        [        R                  " U 5        [        R                  " U 5        [        R                  " U 5        g)ro   TF)r   r_   r`   ra   r$   r   rb   r   r   rc   rd   r   N)rf   r*   rp   AddLocalSsdArgsrq   r   rr   BETArt   r   COMPUTE_BETA_API_VERSIONrx   rv   rw   ry   s    re   rz   CreateWithContainerBeta.Args5  s     
 $*..2)- "&'+). &&v=##F+))&$2C2C2H2HI11.. 226:++F3226:rg   c                 0    [         R                  " U5        g r   )r*   ValidateLocalSsdFlagsr   s     re   r}   2CreateWithContainerBeta._ValidateTrackSpecificArgsP  s    ))$/rg   r   N)rB  rC  rD  rE  rF  r  r  r  r  r  r   r  r  r   r  r   r+  r  r   r   rG  rz   r}   rH  r   rg   re   rJ  rJ  !  su    C"&")-&/ $'+$+/((,%"(,%&*#$(!&+#; ;40rg   rJ  c                   t    \ 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SrSrSrSrSrSr\S 5       rS rS rSrg)	CreateWithContainerAlphaiT  zAAlpha version of compute instances create-with-container command.Tc                    [        U SSSSSSSSSSSSS9  [        R                  " U SS9  [        R                  " U 5        [        R                  " U 5        [        R
                  " U [        R                  R                  5        [        R                  " U SS9  [        R                  " U [        R                  5        [        R                  " U 5        [        R                  " U 5        [        R                  " U 5        [        R                   " U 5        [        R"                  " U 5        [        R$                  " U 5        g )NT)r^   r   r_   r`   ra   r$   r   r   rb   r   rc   rd   r   )rf   r*   rp   AddLocalSsdArgsWithSizeAddLocalNvdimmArgsrq   r   rr   ALPHAAddPublicDnsArgsrt   r   COMPUTE_ALPHA_API_VERSIONrx   rw   AddNumaNodeCountArgsrv   AddIPv6AddressAlphaArgsAddIPv6PrefixLengthAlphaArgsry   s    re   rz   CreateWithContainerAlpha.Argsi  s    	%) $*..2)- "&'+)-  &&v=++F3&&v.))&$2C2C2I2IJ$$Vd;11// 226:226:((0++F3++F3008rg   c                     [         R                  " U5        [         R                  " U5        [         R                  " U5        g r   )r*   rQ  ValidatePublicDnsFlagsr   r   s     re   r}   3CreateWithContainerAlpha._ValidateTrackSpecificArgs  s,    ))$/**40**40rg   c           	      4    [         R                  " XX4XVU5      $ r   )r   GetNetworkInterfacesAlphar   s           re   r   .CreateWithContainerAlpha._GetNetworkInterfaces  s      11fx rg   r   N)rB  rC  rD  rE  rF  r  r  r  r  r   r  r  r   r  r  r   r+  r  _support_ipv6_onlyr   r   rG  rz   r}   r   rH  r   rg   re   rT  rT  T  s    I"&")-&/(,%! $'+$+/((,%&*#$(!&*#9 9@1
rg   rT  zW    Creates Compute Engine virtual machine instances running
    container images.
    a          *{command}* creates Compute Engine virtual
        machines that runs a Docker image. For example:

          $ {command} instance-1 --zone us-central1-a             --container-image=gcr.io/google-containers/busybox

        creates an instance called instance-1, in the us-central1-a zone,
        running the 'busybox' image.

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

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

        To run the gcr.io/google-containers/busybox image in privileged mode,
        run:

          $ {command} instance-1             --container-image=gcr.io/google-containers/busybox
            --container-privileged
        )briefDESCRIPTIONEXAMPLESN)FFTFFFFFFFTFF)-rF  
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   r	   r
   r   /googlecloudsdk.api_lib.compute.instances.creater   googlecloudsdk.callioper   r   "googlecloudsdk.command_lib.computer   r   r   ,googlecloudsdk.command_lib.compute.instancesr   r*   4googlecloudsdk.command_lib.compute.resource_policiesrQ   r   r!  $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer   rf   	DeprecateDefaultUniverseOnlyReleaseTracksrr   rs   CreateCommandrW   rM  rJ  rX  rT  detailed_helpr   rg   re   <module>rw     sa   ? &  ' 7 ; 6 9 9 0 Q ( . 9 F Q [ Y < #
 "'!&+*/%*##(%*h9V 	P	P$ D%%(()x1$,, x1 * %(x1v D%%**+/01 /0 ,/0d D%%++,?6 ? -?F# %  !rg   