
    o                     f   S r SSKrSSKrSSK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rSrSrSrSrSrSrSS/rSr\S-   rSrSr SSSS.r! " S S\RD                  5      r#\#RH                  r%S r& " S S \RN                  5      r' " S! S"\'5      r( " S# S$\'5      r)S% r*S& r+S' r, " S( S)\'5      r-S* r.S+ r/S, r0S- r1S. r2S/ r3S0 r4S1 r5S2 r6 SAS3 jr7  SBS4 jr8S5 r9  SBS6 jr:  SBS7 jr;  SBS8 jr<S9 r=S: r>S; r?S< r@  SBS= jrAS> rB SCS? jrCS@ rDg)Dz:Functions for creating GCE container (Docker) deployments.    N)
exceptions)metadata_utils)poller)waiter)
properties)yaml)universe_descriptor)files)timesa  #cloud-config
runcmd:
- ['/usr/bin/kubelet',
   '--allow-privileged=%s',
   '--manifest-url=http://metadata.google.internal/computeMetadata/v1/instance/attributes/google-container-manifest',
   '--manifest-url-header=Metadata-Flavor:Google',
   '--config=/etc/kubernetes/manifests']
a  # DISCLAIMER:
# The 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.

zgoogle-container-manifestzgce-container-declarationzgoogle-logging-enabledzgci-ensure-gke-dockerTCPUDPzcos-stable-55z	cos-cloud?   Never	OnFailureAlways)neverz
on-failurealwaysc                   "    \ rS rSrSrSrS rSrg)MountVolumeModeO   )   )   c                 (    U [         R                  :H  $ N)r   	READ_ONLY)selfs    6lib/googlecloudsdk/api_lib/compute/containers_utils.py
isReadOnlyMountVolumeMode.isReadOnlyS   s    ?,,,,     N)__name__
__module____qualname____firstlineno__r   
READ_WRITEr   __static_attributes__r"   r!   r   r   r   O   s    )*-r!   r   c                 *    U (       a  SOSn[         U-  $ )z,Gets user-init metadata value for COS image.truefalse)USER_INIT_TEMPLATE)allow_privilegedallow_privileged_vals     r   _GetUserInitr/   Z   s    #3	3	44r!   c                       \ rS rSrSrSrg)Error`   zBase exception for containers.r"   N)r#   r$   r%   r&   __doc__r(   r"   r!   r   r1   r1   `   s    &r!   r1   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )InvalidMetadataKeyExceptiond   z=InvalidMetadataKeyException is for not allowed metadata keys.c                 J   > [         [        U ]  SR                  U5      5        g )Nz@Metadata key "{0}" is not allowed when running containerized VM.)superr5   __init__format)r   metadata_key	__class__s     r   r9   $InvalidMetadataKeyException.__init__g   s     	
%t5J		r!   r"   r#   r$   r%   r&   r3   r9   r(   __classcell__r<   s   @r   r5   r5   d   s    E r!   r5   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )$NoGceContainerDeclarationMetadataKeyn   zERaised on attempt to update-container on instance without containers.c                 R   > [         [        U ]  SR                  [        5      5        g )Nz>Instance doesn't have {} metadata key - it is not a container.)r8   rB   r9   r:   GCE_CONTAINER_DECLARATIONr   r<   s    r   r9   -NoGceContainerDeclarationMetadataKey.__init__q   s$    	
.>HOO%	
r!   r"   r>   r@   s   @r   rB   rB   n   s    M r!   rB   c                     U R                    H2  nUR                  [        [        4;   d  M  [	        UR                  5      e   g)zValidates if user-specified metadata.

Checks if it contains values which may conflict with container deployment.
Args:
  metadata: user-specified VM metadata.

Raises:
  InvalidMetadataKeyException: if there is conflict with user-provided
  metadata
N)itemskeyCONTAINER_MANIFEST_KEY
GKE_DOCKERr5   )metadataentrys     r   ValidateUserMetadatarO   y   s3     ~~eyy+Z88'		22 r!   c                 0    U(       a  U R                  US9$ g)zECreate tags message with parameters for container VM or VM templates.)rI   N)Tags)messagestagss     r   CreateTagsMessagerT      s    	==t=$$ 
r!   c           	      .   UR                  USS9R                  5       R                  SS5      nU c  0 n X@S'   [        [        R
                  " U 5      5       VVs/ s H  u  pVUR                  R                  XVS9PM      nnnUR                  US9$ s  snnf )a  Returns message with labels for instance / instance template.

Args:
  labels: dict, labels to assign to the resource.
  image_uri: URI of image used as a base for the resource. The function
    extracts COS version from the URI and uses it as a value of `container-vm`
    label.
  resources: object that can parse image_uri.
  resource_class: class of the resource to which labels will be assigned. Must
    contain LabelsValue class and resource_class.LabelsValue must contain
    AdditionalProperty class.
zcompute.images
collection/-zcontainer-vm)rJ   value)additionalProperties)ParseNamereplacesortedsix	iteritemsLabelsValueAdditionalProperty)labels	image_uri	resourcesresource_classcos_versionkvadditional_propertiess           r   GetLabelsMessageWithCosVersionrl      s      ooi,<o=tvwsC 
 ^F& v.//$!   333C/   
	#	#9N	#	OO	s   %Bc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )NoCosImageException   z)Raised when COS image could not be found.c                 R   > [         [        U ]  SR                  [        5      5        g )Nz6Could not find COS (Cloud OS) for release family '{0}')r8   rn   r9   r:   COS_MAJOR_RELEASErF   s    r   r9   NoCosImageException.__init__   s$    	
t-@GG	
r!   r"   r>   r@   s   @r   rn   rn      s    1 r!   rn   c                     [         R                  " 5       (       a  U $ [        R                  " 5       R	                  [         R
                  " 5       5      R                  nUS-   U -   $ )N:)r   IsDefaultUniverser	   UniverseDescriptorGetGetUniverseDomainproject_prefix)project_nameprefixs     r   _AddUniversePrefixr|      sS    !!## 	..0	Z))+	,	 
 C<,&&r!   c           	          U R                   nU R                  UR                  SU R                  R	                  [        [        5      S94/5      n[        U5      $ )z!Select a COS image to run Docker.Listproject)apitools_clientMakeRequestsimagesrR   ComputeImagesListRequestr|   COS_PROJECT_SelectNewestCosImage)compute_clientcomputer   s      r   ExpandCosImageFlagr      s_    **'&&nn66$[1 7 ) ( & 
v	&&r!   c                     [        U  Vs/ s H*  oR                  R                  [        5      (       d  M(  UPM,     snS S9nU(       d
  [	        5       eUS   R
                  $ s  snf )z'Selects newest COS image from the list.c                 B    [         R                  " U R                  5      $ r   )r   ParseDateTimecreationTimestamp)xs    r   <lambda>'_SelectNewestCosImage.<locals>.<lambda>   s    E''(;(;<r!   rJ   )r_   name
startswithrq   rn   selfLink)r   image
cos_imagess      r   r   r      sU     M&JJ$9$9:K$Lu&M
<* 


	B	 	   Ns
   'A"A"c           	         / nU  H  n[         R                  " SU5      nU(       d  [        R                  " SS5      eUR	                  5       u  pEnU[
        ;  a9  [        R                  " SSR                  SR                  [
        5      5      5      eUR                  [        U5      [        U5      US.5        M     U$ )z"Parses and validates port mapping.z^(\d+):(\d+):(\S+)$z--port-mappingsz=Port mappings should follow PORT:TARGET_PORT:PROTOCOL format.zProtocol should be one of [{0}]z, )containerPorthostPortprotocol)
rematchcalliope_exceptionsInvalidArgumentExceptiongroupsALLOWED_PROTOCOLSr:   joinappendint)port_mappingsports_configport_mappingmapping_matchporttarget_portr   s          r   _ValidateAndParsePortMappingr      s    ,#lHH3\BM88

I  #0"6"6"8Dx((88

+
2
2ii)*  [)I  $( 
r!   c           
          U R                   nU R                  UR                  SU R                  R	                  [        [        5      S94/5      nSn/ SQnU H  nUR                  U5      nS n[        U Vs/ s H,  n[        R                  " XhR                  5      (       d  M*  UPM.     snU" U5      S9n	U	(       d  Mh  U" U5      " U	S   5      S   [        :  d  M  U	S   R                  s  $    [        5       es  snf )	a  Select a COS image to run Konlet.

This function scans three families in order:
- stable
- beta
- dev
looking for the first image with version at least _MIN_PREFERRED_COS_VERSION.

Args:
  compute_client: ClientAdapter, The Compute API client adapter

Returns:
  COS image at version _MIN_PREFERRED_COS_VERSION or later.

Raises:
  NoCosImageException: No COS image at version at least
  _MIN_PREFERRED_COS_VERSION was found. This should not happen if backend is
  healthy.
r~   r   zcos-{}-(\d+)-.*)stablebetadevc                    ^  U 4S jnU$ )Nc                    > [        [        R                  " TU R                  5      R	                  S5      5      n[
        R                  " U R                  5      nX4$ )Nr   )r   r   r   r   groupr   r   r   )r   version	timestampname_res      r   CreateComparisonKeyVExpandKonletCosImageFlag.<locals>.MakeCreateComparisonKey.<locals>.CreateComparisonKey  sF    bhhw

399!<=''(?(?@	!!r!   r"   )r   r   s   ` r   MakeCreateComparisonKey9ExpandKonletCosImageFlag.<locals>.MakeCreateComparisonKey  s    "
 ! r!   r   r   r   )r   r   r   rR   r   r|   r   r:   r_   r   r   r   _MIN_PREFERRED_COS_VERSIONr   rn   )
r   r   r   name_re_templateimage_familiesfamilyr   r   r   r   s
             r   ExpandKonletCosImageFlagr      s    ( **'&&nn66$[1 7 ) ( & (,.f%%f-G! "DF5bhhw

&CFD#G,J
 	
#G,Z^<Q?%& ^$$$) , 	 	Es   8)C;
%C;
c           	         0 nU (       d  U$ [         R                  " U 5       n[        U5       H  u  p4UR                  5       n[	        U5      S::  d	  US   S:X  a  M/  UR                  S5      nUS:X  a&  [        R                  " SR                  XU5      5      eUSU nXES-   S nSU;   d  S	U;   a&  [        R                  " S
R                  XU5      5      eXqU'   M     SSS5        U$ ! , (       d  f       U$ = f)a  Read environment variable from file.

File format:

It is intended (but not guaranteed) to follow standard docker format
[](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file)
but without capturing environment variables from host machine.
Lines starting by "#" character are comments.
Empty lines are ignored.
Below grammar production follow in EBNF format.

file = (whitespace* statement '\n')*
statement = comment
          | definition
whitespace = ' '
           | '\t'
comment = '#' [^\n]*
definition = [^#=\n] [^= \t\n]* '=' [^\n]*

Args:
  filename: str, name of the file to read

Returns:
  A dictionary mapping environment variable names to their values.
r   r   #=r   z/Syntax error in {}:{}: Expected VAR=VAL, got {}N 	zHSyntax error in {}:{} Variable name cannot contain whitespaces, got "{}")	r
   
FileReader	enumeratestriplenfindr   BadFileExceptionr:   )filenameenv_varsfilineassignment_op_locenvvals           r   _ReadDictionaryr   .  s   6 (	O!QQ<ZZ\d	Ta47c>))C.	b	 !22=DDT
 	

 ##$cQ&()c	ts{!22xC0
 	
 sm+   ". 
// "!. 
/s   B>C**
C9c                 $    SR                  U 5      $ )Nzhost-path-{}r:   idxs    r   _GetHostPathDiskNamer   f  s    			s	##r!   c                 $    SR                  U 5      $ )Nztmpfs-{}r   r   s    r   _GetTmpfsDiskNamer   j  s    			3	r!   c                 $    SR                  U 5      $ )Nzpd-{}r   r   s    r   _GetPersistentDiskNamer   n  s    		r!   c           	      j  ^ U=(       d    / nU=(       d    / nSnU  GH  n[        U5      U;   a  US-  n[        U5      U;   a  M  UR                  S5      nUR                  S5      nU4S jn	U	" Xx5      n
U
(       a  U
S   nO[        U5      nUR                  U5        U(       d  [        U5      S:w  a  [        R
                  " SS5      eUS   R                  S5      nUS   R                  SU5      U:w  a8  [        R
                  " SS	R                  US   R                  S5      5      5      eUR                  UUS
   UR                  S[        5      R                  5       S.5        U
(       a  GMX  UUSS.S.nU(       a  US   R                  SU05        TR                  U5        US-  nGM     g)z-Add volume specs from --container-mount-disk.r   r   r   	partitionc                    > T HE  nUR                  S0 5      nUR                  S5      U :X  d  M,  UR                  S5      U:X  d  MC  Us  $    g )NgcePersistentDiskpdNamer   )get)device_namer   volume_specpdvolumess       r   _GetMatchingVolume6_AddMountedDisksToManifest.<locals>._GetMatchingVolume  sE     +__0"566({*rvvk/Bi/O
 !r!   z--container-mount-diskzdMust specify the name of the disk to be mounted unless exactly one disk is attached to the instance.device-namezMust not have a device-name that is different from disk name if disk is being attached to the instance and mounted to a container: [{}]
mount-pathmoder   	mountPathreadOnlyext4)r   fsType)r   r   r   N)r   r   r   r   r   r   r   r:   _DEFAULT_MODEr   update)container_mount_diskr   volume_mounts
used_namesdisksr   
mount_diskr   r   r   repeatedr   r   s    `           r   _AddMountedDisksToManifestr   r  s    R*
+2%	#(j
 
%
3	Qhc !
%
3 ..(K{+I "+9Hfd#C(d 
Uq!::$4
 	

 !HLL(k	qm[	1[	@11$F58<<67	
 	
 -NN6=9DDF  (3vFK %&--{I.FGNN;1HCm )r!   c           	         U R                   US.nU R                  b  U R                  /US'   U R                  b  U R                  US'   U R                  US'   U R                  US'   SU R
                  0US'   [        U R                  5      nU R                  =(       d    /  H&  n[        R                  " U5       H	  u  pxXU'   M     M(     U(       a0  [        R                  " U5       VVs/ s H	  u  pxXxS.PM     snnUS	'   / n	/ n
[        U R                  =(       d    / 5       Hj  u  pU	R                  [        U5      S
US   0S.5        U
R                  [        U5      US   UR                  S[         5      R#                  5       S.5        Ml     [        U R$                  =(       d    / 5       HD  u  pU	R                  ['        U5      SS0S.5        U
R                  ['        U5      US   S.5        MF     U(       a@  U=(       d    / nU R(                  =(       d    / U R*                  =(       d    / -   n[-        X9XS9  XS'   SU/U	[.        U R0                     S.0nU$ s  snnf )zDCreate container manifest from argument namespace and instance name.)r   r   commandargsstdintty
privilegedsecurityContextr   rZ   r   path	host-pathr   hostPathr   r   r   mediumMemoryr   emptyDirr   r   )r   volumeMountsspec)
containersr   restartPolicy)container_imagecontainer_commandcontainer_argcontainer_stdincontainer_ttycontainer_privilegedr   container_env_filecontainer_envr`   ra   r   container_mount_host_pathr   r   r   r   r   container_mount_tmpfsr   diskcreate_diskr   RESTART_POLICY_APIcontainer_restart_policy)r   instance_namecontainer_mount_disk_enabledr   	containerr   env_var_dictr   r   r   r   r   volumetmpfsr   manifests                   r   _CreateContainerManifestr#    s]    ,,mD)	' 223Ii	#**If++)G'')E".0I0I!J)T445(((.B.lMM,/sm 0 / 47MM(4K4K#4KIe '-t==CDkcNN$S)VK01  $S)L)JJv}5@@B  E d88>B?jcNN"3'h5IJ "3'eL6IJ	 @ "/52YY_"!1!1!7R8E} ,N "-d.K.KL( 
/Ws   ,I c                 <    [         [        R                  " U 5      -   $ )z5Dumps data dict to YAML in format expected by Konlet.)MANIFEST_DISCLAIMERr   dump)datas    r   DumpYamlr(    s    	tyy	..r!   c           	      ,    [        [        U UUUS95      $ )z(Helper to create the container manifest.r  r   )r(  r#  )r   r  r  r   s       r   _CreateYamlContainerManifestr+    s%     


'C3	
 r!   c                 \    [         [        UUUUS9[        S0n[        R                  " XUS9$ )z)Helper to create the metadata for konlet.r*  r*   )rM   existing_metadata)rE   r+  'STACKDRIVER_LOGGING_AGENT_CONFIGURATIONr   ConstructMetadataMessage)rR   r   r  user_metadatar  r   konlet_metadatas          r   CreateKonletMetadataMessager2    sC      !=

'C3	" .v
/ 
	0	0M
 r!   c           
         [         R                  " UR                  R                  5      n[	        XXrU5      n[        XXrU5      =(       d    UnUR                  R                   GH  n	U	R                  [        :X  d  M  [        U U	UUUUS9  UR                  R                  R                  UR                  R                  " SSUR                  0UR                  5       D65      n
U R                  R!                  U
R"                  SS9n[$        R&                  " UUSR)                  UR+                  5       5      5      nUR,                  UR                  R.                  R0                  R2                  :X  a  U=(       d    Us  $ UR,                  UR                  R.                  R0                  R4                  :X  a  [7        XU5      =(       d    Us  $ [7        XU5        [9        XU5      =(       d    Us  $    [;        5       e)z.Update an instance and its container metadata.r*  rM   compute.zoneOperationsrV   z)Updating specification of container [{0}]r"   )r   Pollerr   	instances_UpdateShieldedInstanceConfig#_SetShieldedInstanceIntegrityPolicyrM   rI   rJ   rE   UpdateMetadataSetMetadatarR   "ComputeInstancesSetMetadataRequestAsDictrf   r\   r   r   WaitForr:   r]   statusInstanceStatusValueValuesEnum
TERMINATED	SUSPENDED_StopVm_StartVmrB   )holderclientinstance_refinstancer   r  r   operation_pollerresultrM   	operationoperation_refset_metadata_waiters                r   UpdateInstancerN  '  s    ]]6#9#9#C#CD(&d&
 *
*$  
	 	 ##))h||00



'C3 ((22>>
//
<
< ((,8,?,?,Ai &&,,


)A - m #NN


5
<
<! //__%%;;FFG #,f,
//__%%;;EEF v|4>>-5??U *X 	-..r!   c                 <   UR                   c  UR                  c  UR                  c  gUR                  R	                  UR                   UR                  UR                  S9nUR                  R                  UR                  5       UR                  UUR                  S9nUR                  R                  R                  U5      nU R                  R                  UR                  SS9n[        R                   " UUSR#                  UR                  5       5      5      $ )z$Update the Shielded Instance Config.N)enableSecureBoot
enableVtpmenableIntegrityMonitoring)rH  r   shieldedInstanceConfigzoner4  rV   z0Setting shieldedInstanceConfig of instance [{0}])shielded_vm_secure_bootshielded_vm_vtpm shielded_vm_integrity_monitoringrR   ShieldedInstanceConfig3ComputeInstancesUpdateShieldedInstanceConfigRequestr]   r   rT  r   r6  UpdateShieldedInstanceConfigrf   r\   r   r   r=  r:   )	rE  rF  rI  rG  r   shielded_config_msgrequestrK  rL  s	            r   r7  r7  n  s   
 ""*



'

/
/
7>>33&& $ E E ? 
 OOOO  """0	 P ' $$..KK) ""((%= ) - 
8??




 r!   c                    UR                   R                  SS9nUR                  S5      (       d  gUR                   R                  UR	                  5       UR
                  UUR                  S9nUR                  R                  R                  U5      nU R                  R                  UR                  SS9n[        R                  " UUSR                  UR	                  5       5      5      $ )	z+Set the Shielded Instance Integrity Policy.T)updateAutoLearnPolicy"shielded_vm_learn_integrity_policyN)rH  r   shieldedInstanceIntegrityPolicyrT  r4  rV   z9Setting shieldedInstanceIntegrityPolicy of instance [{0}])rR   ShieldedInstanceIntegrityPolicyIsSpecified9ComputeInstancesSetShieldedInstanceIntegrityPolicyRequestr]   r   rT  r   r6  "SetShieldedInstanceIntegrityPolicyrf   r\   r   r   r=  r:   )	rE  rF  rI  rG  r   shielded_integrity_policy_msgr\  rK  rL  s	            r   r8  r8    s    
 oo55 $ 6    
		>	?	?ooOO$$&&&*G  	 P  
 &&II
 
 ""((%= ) - 
AHH




 r!   c                    UR                   R                  R                  UR                  R                  " S0 UR                  5       D65      nU R                  R                  UR                  SS9n[        R                  " UR                   R                  5      n[        R                  " UUSR                  UR                  5       5      5      $ )zStop the Virtual Machine.r4  rV   zStopping instance [{0}]r"   )r   r6  StoprR   ComputeInstancesStopRequestr<  rf   r\   r   r   r5  r   r=  r:   r]   rE  rF  rG  rK  rL  rI  s         r   rC  rC    s    $$..33oo11JL4G4G4IJ) ""((%= ) - ]]6#9#9#C#CD	&&|'8'8':;
 r!   c                    UR                   R                  R                  UR                  R                  " S0 UR                  5       D65      nU R                  R                  UR                  SS9n[        R                  " UR                   R                  5      n[        R                  " UUSR                  UR                  5       5      5      $ )zStart the Virtual Machine.r4  rV   zStarting instance [{0}]r"   )r   r6  StartrR   ComputeInstancesStartRequestr<  rf   r\   r   r   r5  r   r=  r:   r]   ri  s         r   rD  rD    s    $$..44oo22K\5H5H5JK) ""((%= ) - ]]6#9#9#C#CD	&&|'8'8':;
 r!   c           	         [         R                  " UR                  5      nUR                  S5      (       a  UR                  US   S   S   S'   UR                  S5      (       a  UR
                  /US   S   S   S'   UR                  S5      (       a  US   S   S   R                  SS	5        UR                  S
5      (       a  UR                  US   S   S   S'   UR                  S5      (       a  US   S   S   R                  SS	5        UR                  SL a  SUS   S   S   S   S'   UR                  SL a  SUS   S   S   S   S'   U(       a  U=(       d    / nUR                  nO/ n/ n[        U UUR                  =(       d    / UR                  =(       d    / UR                  =(       d    / UU5        [        U[        R                   R#                  UR$                  =(       d    / 5      UR&                  UR(                  =(       d    / 5        UR*                  SL a  SUS   S   S   S'   UR*                  SL a  SUS   S   S   S'   UR,                  SL a  SUS   S   S   S'   UR,                  SL a  SUS   S   S   S'   UR                  S5      (       a  [.        UR0                     US   S'   [3        U5      Ul        g	)z6Update konlet metadata entry using user-supplied data.r  r  r  r   r   r  r   clear_container_commandNr  r   clear_container_argsTr   r   Fr   r   r  r  )r   loadrZ   rb  r  r  popr  r  r   _UpdateMountsremove_container_mountsr  r  
_UpdateEnv	itertoolschainfrom_iterableremove_container_envr  r  r  r  r  r  r(  )rE  rM   r   rH  r  r   r"  r   s           r   r9  r9    s    YYx~~&(	'((151E1EHV\"1%g.	)**484J4J3KHV\"1%i0	/00V\"1%)))T:	o&&040B0BHV\"1%f-	,--V\"1%))&$7	$&IMHV\"1%&78F	%'INHV\"1%&78F!/52NNEE
""(b
$$*
  &B oo##D$=$=$CD

B	 
T!15HV\"1%g.	U"16HV\"1%g.	4/3HV\"1%e,	5 /4HV\"1%e,	011(:%%)HV_% H%(.r!   c           	         [        UUUUUS9  US   S    Vs/ s H  owS   PM	     nn/ n	/ n
SnU H  n[        U5      U;   a  US-  n[        U5      U;   a  M  [        U5      nUS-  nU	R                  USUS   0S	.5        U
R                  UUS
   UR                  S[        5      R                  5       S.5        M     U Hd  n[        U5      U;   a  US-  n[        U5      U;   a  M  [        U5      nUS-  nU	R                  USS0S.5        U
R                  XS
   S.5        Mf     U(       a]  U Vs/ s HC  nUR                  U R                  R                  UR                  5      R                  5       S.PME     nn[        UU	U
UUS9  US   S   S   S   R                  U
5        US   S   R                  U	5        gs  snf s  snf )z%Updates mounts in container manifest.)r   r  r   r   r   r   r  r  r  r   r   r   r  r  r  r	  )r   r   )r   r   r  r
  N)_CleanupMountsr   r   r   r   r   r   
deviceNamerf   r\   sourcer]   r   extend)rE  r"  rs  r  r  r   r   r   r   r   r   next_volume_indexr   r!  r  s                  r   rr  rr  ,  s    / .6f-=i-HI-H6v-H*I'-)f
0
1Z
?1 0
1Z
? 12DNNVK01  L)JJv}5@@B  * %e
-
.*
<1 -
.*
<./DNNDx.BCD$<5HIJ %  
 D  ??$$**4;;7<<>	
  
   6< #N3::=I
69$$W-] J<s   G4A
Gc                 X   U=(       d    / nUSS nU H  nUR                  US   5        M     U H  nUR                  US   5        M     U H  nUR                  US   5        M     / n	/ n
/ nU S   S   S   R                  S/ 5       HG  nUS   U;  a'  U	R                  U5        U
R                  US   5        M3  UR                  US   5        MI     XS   S   S   S'   / nU S   R                  S	/ 5       H(  nUS   U
;   d  US   U;  d  M  UR                  U5        M*     XS   S	'   g)
z4Remove all specified mounts from container manifest.Nr   r  r  r   r
  r   r   r   )r   r   )r"  rs  r  r  r   mount_paths_to_remove	host_pathr!  r  used_mountsused_mounts_namesremoved_mount_namesmountused_volumesr   s                  r   rz  rz  p  sa    .3 2!4,i  <!89 -$e  |!45 %"d  l!34 # +-a044^RHe[!66uV}-  v/ I 7B6< #N3 , $$Y3fv++&>!44&! 4 !-69r!   c                    0 nU S   S   S   R                  S/ 5       H  nUR                  S5      XES   '   M     U H  nUR                  US5        M     UR                  [        U5      5        U H&  n[        R
                  " U5       H	  u  phXU'   M     M(     U(       a:  [        R
                  " U5       VVs/ s H	  u  phXhS.PM     snnU S   S   S   S'   ggs  snnf )	z3Update environment variables in container manifest.r  r  r   r   rZ   r   Nr   )r   rq  r   r   r`   ra   )	r"  rx  r  r  current_envenv_valr   r  r   s	            r   rt  rt    s    
 +&!,/266ubAg#*;;w#7K  B "cOOC " _%789#lMM,/# 0 $ 47MM+4N04N#4N0HV\"1%e, 0s   <C)NN)FNr   )Er3   enumru  r   googlecloudsdk.api_lib.computer   r   )googlecloudsdk.api_lib.compute.operationsr   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   googlecloudsdk.corer   r   'googlecloudsdk.core.universe_descriptorr	   googlecloudsdk.core.utilr
   r   r`   r,   r%  rK   rE   r.  rL   r   COS_MAJOR_RELEASE_PREFIXrq   r   r   r  Enumr   r'   r   r/   r1   r5   rB   rO   rT   rl   rn   r|   r   r   r   r   r   r   r   r   r   r#  r(  r+  r2  rN  r7  r8  rC  rD  r9  rr  rz  rt  r"   r!   r   <module>r     s   A   	 5 9 < . E * $ G * * 
   5 7 *B '$
EN  )  -t3    -dii -  **5'J '% 5 3 %P<% 	'
'!45p5p$ 
 JN=F "'	CL/ "'	, "'> "'D/N"J$N$. "'K&\A.R +-\r!   