
    o                        S r SSKJr  SSKJr  SSKJ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 \RL                  5      r'\'RP                  r)S! r* " S" S#\	RV                  5      r+ " S$ S%\+5      r, " S& S'\+5      r-S( r.S) r/S* r0 " S+ S,\+5      r1S- r2S. r3S/ r4S0 r5S1 r6S2 r7S3 r8S4 r9S5 r: SDS6 jr;  SES7 jr<S8 r=  SES9 jr>  SES: jr?  SES; jr@S< rAS= rBS> rCS? rD  SES@ jrESA rF SFSB jrGSC rHg)Gz:Functions for creating GCE container (Docker) deployments.    )absolute_import)division)unicode_literalsN)
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)MountVolumeModeR   )   )   c                 (    U [         R                  :H  $ N)r   	READ_ONLY)selfs    6lib/googlecloudsdk/api_lib/compute/containers_utils.py
isReadOnlyMountVolumeMode.isReadOnlyV   s    ?,,,,     N)__name__
__module____qualname____firstlineno__r   
READ_WRITEr"   __static_attributes__r%   r$   r!   r   r   R   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!   _GetUserInitr2   ]   s    #3	3	44r$   c                       \ rS rSrSrSrg)Errorc   zBase exception for containers.r%   N)r&   r'   r(   r)   __doc__r+   r%   r$   r!   r4   r4   c   s    &r$   r4   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )InvalidMetadataKeyExceptiong   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.)superr8   __init__format)r    metadata_key	__class__s     r!   r<   $InvalidMetadataKeyException.__init__j   s     	
%t5J		r$   r%   r&   r'   r(   r)   r6   r<   r+   __classcell__r?   s   @r!   r8   r8   g   s    E r$   r8   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )$NoGceContainerDeclarationMetadataKeyq   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.)r;   rE   r<   r=   GCE_CONTAINER_DECLARATIONr    r?   s    r!   r<   -NoGceContainerDeclarationMetadataKey.__init__t   s$    	
.>HOO%	
r$   r%   rA   rC   s   @r!   rE   rE   q   s    M r$   rE   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_DOCKERr8   )metadataentrys     r!   ValidateUserMetadatarR   |   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.)rL   N)Tags)messagestagss     r!   CreateTagsMessagerW      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)rM   value)additionalProperties)ParseNamereplacesortedsix	iteritemsLabelsValueAdditionalProperty)labels	image_uri	resourcesresource_classcos_versionkvadditional_propertiess           r!   GetLabelsMessageWithCosVersionro      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}')r;   rq   r<   r=   COS_MAJOR_RELEASErI   s    r!   r<   NoCosImageException.__init__   s$    	
t-@GG	
r$   r%   rA   rC   s   @r!   rq   rq      s    1 r$   rq   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imagesrU   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$   rM   )rb   name
startswithrt   rq   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   rU   r   r   r   r=   rb   r   r   r   _MIN_PREFERRED_COS_VERSIONr   rq   )
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   1  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   i  s    			s	##r$   c                 $    SR                  U 5      $ )Nztmpfs-{}r   r   s    r!   _GetTmpfsDiskNamer   m  s    			3	r$   c                 $    SR                  U 5      $ )Nzpd-{}r   r   s    r!   _GetPersistentDiskNamer   q  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   u  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   r]   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_envrc   rd   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-   )rP   existing_metadata)rH   r.  'STACKDRIVER_LOGGING_AGENT_CONFIGURATIONr   ConstructMetadataMessage)rU   r   r  user_metadatar   r   konlet_metadatas          r!   CreateKonletMetadataMessager5    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-  rP   compute.zoneOperationsrY   z)Updating specification of container [{0}]r%   )r   Pollerr   	instances_UpdateShieldedInstanceConfig#_SetShieldedInstanceIntegrityPolicyrP   rL   rM   rH   UpdateMetadataSetMetadatarU   "ComputeInstancesSetMetadataRequestAsDictri   r_   r   r	   WaitForr=   r`   statusInstanceStatusValueValuesEnum
TERMINATED	SUSPENDED_StopVm_StartVmrE   )holderclientinstance_refinstancer   r   r   operation_pollerresultrP   	operationoperation_refset_metadata_waiters                r!   UpdateInstancerQ  *  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)rK  r   shieldedInstanceConfigzoner7  rY   z0Setting shieldedInstanceConfig of instance [{0}])shielded_vm_secure_bootshielded_vm_vtpm shielded_vm_integrity_monitoringrU   ShieldedInstanceConfig3ComputeInstancesUpdateShieldedInstanceConfigRequestr`   r   rW  r   r9  UpdateShieldedInstanceConfigri   r_   r   r	   r@  r=   )	rH  rI  rL  rJ  r   shielded_config_msgrequestrN  rO  s	            r!   r:  r:  q  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)rK  r   shieldedInstanceIntegrityPolicyrW  r7  rY   z9Setting shieldedInstanceIntegrityPolicy of instance [{0}])rU   ShieldedInstanceIntegrityPolicyIsSpecified9ComputeInstancesSetShieldedInstanceIntegrityPolicyRequestr`   r   rW  r   r9  "SetShieldedInstanceIntegrityPolicyri   r_   r   r	   r@  r=   )	rH  rI  rL  rJ  r   shielded_integrity_policy_msgr_  rN  rO  s	            r!   r;  r;    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.r7  rY   zStopping instance [{0}]r%   )r   r9  StoprU   ComputeInstancesStopRequestr?  ri   r_   r   r   r8  r	   r@  r=   r`   rH  rI  rJ  rN  rO  rL  s         r!   rF  rF    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.r7  rY   zStarting instance [{0}]r%   )r   r9  StartrU   ComputeInstancesStartRequestr?  ri   r_   r   r   r8  r	   r@  r=   r`   rl  s         r!   rG  rG    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   loadr]   re  r  r  popr  r  r   _UpdateMountsremove_container_mountsr  r  
_UpdateEnv	itertoolschainfrom_iterableremove_container_envr  r  r  r  r  r  r+  )rH  rP   r   rK  r   r   r%  r   s           r!   r<  r<    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   
deviceNameri   r_   sourcer`   r   extend)rH  r%  rv  r  r  r   r   r#  r   r   r   next_volume_indexr   r$  r  s                  r!   ru  ru  /  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%  rv  r  r  r   mount_paths_to_remove	host_pathr$  r  used_mountsused_mounts_namesremoved_mount_namesmountused_volumesr#  s                  r!   r}  r}  s  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   r]   r   Nr  )r   rt  r   r   rc   rd   )	r%  r{  r  r  current_envenv_valr   r"  r   s	            r!   rw  rw    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   )Ir6   
__future__r   r   r   enumrx  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   rc   r/   r(  rN   rH   r1  rO   r   COS_MAJOR_RELEASE_PREFIXrt   r   r   r  Enumr   r*   r   r2   r4   r8   rE   rR   rW   ro   rq   r   r   r   r   r   r   r   r   r   r   r&  r+  r.  r5  rQ  r:  r;  rF  rG  r<  ru  r}  rw  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$   