
    0                     N   S r SSKrSSKJrJr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5      r  S,S\\!\ 4   S\!S\!S\!S\RD                  S\#SS4S jjr$S\!S\ S \RJ                  S!\!S\RD                  S"\!S\#4S# jr&S$ r'S\\!\ 4   S\!S\!S\RD                  SS4
S% jr(S&\!S"\!S\!4S' jr)S(\ S\!S\!S\!S\!S\RD                  S\*\RJ                  \!\!4   4S) jr+S* r,S+ r-g)-zBuild config for Run Compose.    N)AnyDictOptional)encoding)cloudbuild_util)waiter)submit_util)connection_context)	platforms)serverless_operations)tracker)
exceptions)log)
properties)	resources)yaml)progress_tracker)files)parallelc                   z    \ rS rSrSr SS\\   S\\   4S jjr\S\	\\
4   SS 4S	 j5       rS\	\\
4   4S
 jrSrg)BuildConfig&   z1Represents the build configuration for a service.Ncontext
dockerfilec                 *    Xl         X l        S U l        g Nr   r   image_id)selfr   r   s      5lib/googlecloudsdk/command_lib/run/compose/builder.py__init__BuildConfig.__init__)   s     L O#'DM    datareturnc                 L    U " UR                  S5      UR                  S5      S9$ )Nr   r   )r   r   )get)clsr$   s     r    	from_dictBuildConfig.from_dict0   s'    #88L) r#   c                 J    U R                   U R                  U R                  S.$ )z4Serializes the BuildConfig instance to a dictionary.r   r   )r   s    r    to_dictBuildConfig.to_dict7   s#     <<ooMM r#   r   )NN)__name__
__module____qualname____firstlineno____doc__r   strr!   classmethodr   r   r)   r,   __static_attributes__ r#   r    r   r   &   sg    9 HL(c](7?}( 4S> m  tCH~ r#   r   source_buildrepoproject_nameregionr   no_buildr%   c                   ^ U(       a  [        XUT5        g/ nU R                  5        H+  u  px [        XXUT5      u  pnUR                  XxXU45        M-     U(       d  gU4S jnU VVV	V
Vs/ s H  u  pxpnUUU	U
U4PM     nn
n	nnn[        [        U5      S5      n[        R                  " U5       nUR                  X5      nSSS5        [        W5      (       d  [        R                  " S5      eg! [        R
                   a"  n[        R                  " SU SU 35        e SnAf[        R                   a  n[        R                  " SU 35        e SnAff = fs  snn
n	nnf ! , (       d  f       N= f)z6Performs source builds for all containers in parallel.NzBuild failed for container : z+An error occurred during build submission: c                 ,   > U u  pp4n[        XX4TU5      $ r   )_poll_and_handle_build_result)args	containerbuild_configbuild_op_refbuild_log_url	image_tagr   s         r    
_run_buildhandle.<locals>._run_build_   s%    FJCI\)(gy r#   
   z$One or more container builds failed.)_handle_no_builditems_build_from_sourceappendr	   FailedBuildExceptionr   errorr   Errorminlenr   GetPoolMapall)r7   r8   r9   r:   r   r;   	build_opsrA   rB   rC   rD   rE   erF   	task_argsnum_threadspoolresultss       `             r    handler[   @   sy    \A
)!-!3!3!5i/A
4vw0,l9 L
K "6 

 NW	 NW
I)<	 



 NW  	 C	NB'+$hhz-G % 
W


A
BB 
? ++ 	ii-i[1#>? 	ii=aSAB	 %$s5   %C5.E4E(5E	D&&E=EE(
E6rA   rB   rC   rD   rE   c           
      $    [        U5      nU(       aM  US   S:w  aD  UR                  [        R                  R                  R                  U S9SSR                  US9S9  gSnUR                  S	5      (       a  UR                  S	5      R                  S
5      (       au  UR                  S	5      R                  S
5       HQ  nUR                  S5      U:X  d  M  UR                  S5      n	U	(       d  M4  UR                  S5      u  n
  nU
S-   U	-   n  O   U(       a!  Xql	        [        R                  " SU S35        O XQl	        [        R                  " SU S35        UR                  [        R                  R                  R                  U S95        g! [        R                   ai  n[        R                  " SU  SU 35        UR                  [        R                  R                  R                  U S9SSR                  XS9S9   SnAgSnAff = f)z0Polls a build operation and updates the tracker.statusSUCCESSrA   NzCContainer build failed and logs are available at [{build_log_url}].rD   )messageFrZ   imagesnamedigest:@zImage 'z
' created.Tz-An error occurred while waiting for build of r=   zRError waiting for build to complete: {e}. Logs are available at [{build_log_url}].)rV   rD   )_poll_until_build_completes	FailStagetracker_stagesStagedProgressTrackerStageBUILDget_keyformatr'   
rpartitionr   r   debugCompleteStager   rO   rN   )rA   rB   rC   rD   r   rE   response_dictimage_with_digestimgrd   image_name_without_tag_rV   s                r    r?   r?   x   s   3/=Mx0I=

3
3
9
9
A
A! B  $$*FF$G  	 			9	%	%-*;*;I*F*J*J
+ + !$$Y/33H=CWWV_	)WWX&Fv-6-A-A#-F*$a"83">"G > 
 1		G-.j9: )		GI;j12

3
3
9
9
A
A! B 
 			 II=i[1#NO1177?? 	@ 	
 	""(&1&"J  	 s-   AF !A3F F 2BF H&AH

Hc                 r   [         R                  R                  R                  R	                  SS9n[
        R                  " S[        R                  US9n[        R                  R                  U SU0SS9n[        R                  " U5       nUR                  U5      sSSS5        $ ! , (       d  f       g= f)z+Get service if it exists, else return None.TrequiredN)region_labelnamespacesIdrun.namespaces.servicesparams
collection)r   VALUEScoreprojectGetr
   GetConnectionContextr   PLATFORM_MANAGEDr   REGISTRYParser   Connect
GetService)service_namer:   r   conn_contextservice_refclients         r    _get_servicer      s    ""**...='#88
  ,
 ""((g&* ) +
 $$\2f[) 322s   B((
B6c                 R   U (       d  g[         R                  R                  R                  R	                  SS9n[
        R                  R                  USU0SS9n[        R                  " S[        R                  US9n[        R                  " U5       nUR                  U5      nSSS5        W(       d  [        R                   " SU S	35      e0 n	U(       ad  UR"                  R$                  R&                  (       a?  UR"                  R$                  R&                   H  n
U
R(                  XR*                  '   M     U R-                  5        H  u  p[.        R0                  R2                  R5                  US
9n UR7                  U5        U	R9                  U5      nU(       d  [        R                   " SU SU S	35      eXl        UR=                  USU S35        UR?                  U5        M     g! , (       d  f       GNR= f! [@         a  nURC                  XS5        e SnAff = f)zHandles --no-build flag.NTrw   rz   r{   r|   )platformry   z?--no-build cannot be used for the first deployment of service 'z'.r_   z$Could not find image for container 'z' in service 'zUsing image [z] from deployed service.zImage retrieval failed.)"r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   rO   templatespec
containersimagerc   rJ   ri   rj   rk   rl   
StartStager'   r   UpdateStagerp   	Exceptionrh   )r7   r9   r:   r   r   r   r   r   existing_servicecontainer_to_image_mapcrA   rB   	stage_keyr   rV   s                   r    rI   rI      s    

""**...='""((g&* ) +
 $88
)),
 $$\2f((5 3	


	N"	  *3388CC&&++66'(wwVV$ 7 ".!3!3!5i99??GG H I#$((3e29+ >b"
 	
 $
}UG+CD I&! "6 32:  	&?@s%   G2:A3H2
H
H&H!!H&r   c                    SU 3SSSSSUS/S./U/S	.n[         R                  R                  U S
5      n[         R                  R                  US5      n [        R                  " U5        [        R
                  " U5       n[        R                  " X%5        SSS5        [        R                  " SU S35        U$ ! , (       d  f       N*= f! [         a!  n[        R                  " SU SU 35      eSnAff = f)zWrites a cloudbuild.yaml file to the service source directory.

Args:
  context: The build context directory.
  image_tag: The full tag for the image to be built.

Returns:
  The path to the written cloudbuild.yaml file.
zBuild Docker Image: zgcr.io/cloud-builders/dockerbuildxbuildz--loadz-t.)idrc   r@   )stepsrb   outzcloudbuild.yamlNzWrote Cloud Build config to ''z'Failed to write Cloud Build config to 'z': )ospathjoinr   MakeDir
FileWriterr   dumpr   ro   r   r   rO   )r   rE   config_dataout_dir	file_pathfrV   s          r    _write_cloudbuild_configr      s     'yk20WhiE 	
 + GGLL%('ggll7$56)		MM'			)	$
ii 
%II-i[:; 
%	$ 
 



1)CsC s0   ,C B=#C =
CC 
C9C44C9configc                    U R                   nUc  [        S5      eSR                  X#USS9n[        Xg5      n[        R
                  " 5       n	[        R                  " SU SU S35        [        R                  " S!0 S	S_S
S_SU	_SS_SU_SS_SS_SU_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_6n
[        R                  " S 5        [        XXU5      u  pXU4$ )"z?Performs source build for a given container using build config.Nz+Build context is required for source build.z'{repo}/{project_name}_{container}:{tag}latest)r8   r9   rA   tagz!Creating build config for image 'z' from source 'r   r   no_cacheFmessagessubstitutions
arg_configis_specified_sourceT	no_sourcesourcegcs_source_staging_dirignore_filearg_gcs_log_dirarg_machine_typearg_disk_sizearg_worker_poolarg_dirarg_revisionarg_git_source_dirarg_git_source_revisionarg_service_account	buildpack	hide_logsz&Submitting build to Google Cloud Buildr6   )r   
ValueErrorrm   r   r   GetMessagesModuler   ro   r	   CreateBuildConfig_build_using_cloud_build)r   rA   r8   r9   r:   r   source_pathrE   config_pathr   rB   rC   rD   s                r    rK   rK      s    +
B
CC7>>iX ? )
 )@+ ..0( )))) 5-q .. 
  	
     "        !" #$ #%& '( )* +,2 ))45 8(&!, 
i	//r#   c                 |   [         R                  " USUSUS9u  pVSUR                   SU SUR                   3n[        R
                  R                  USS9nUR                  n	[        R                  R                  R                  U S9n
UR                  U
5        UR                  U
S	R                  U	S
95        X4$ )zGBuild an image from source if a user specifies a source when deploying.T)r   build_regionz	projects/z/locations/z/operations/z(cloudbuild.projects.locations.operations)r~   r_   z(Logs are available at [{build_log_url}].r`   )r	   Build	projectIdr   r   r   ParseRelativeNamelogUrlri   rj   rk   rl   r   r   rm   )rA   r   build_messagesrB   r:   r   ru   build_oprC   rD   r   s              r    r   r   ]  s     
(% 	%//"+fX\%((L  ##55E 6 , ,,-77==EE F ) 
Y	077% 8  
	$$r#   c                     [         R                  " 5       n[        R                  " UR                  UR
                  5      n[        R                  " X 5      n[        R                  " UR                  5      $ r   )
r   GetClientInstancer   CloudOperationPollerprojects_builds
operationsPollUntilDoner   MessageToPyValueresponse)rC   r   poller	operations       r    rg   rg   |  sZ    ,,.&&&f//& ""68)		"	"9#5#5	66r#   )F).r2   r   typingr   r   r   apitools.base.pyr   !googlecloudsdk.api_lib.cloudbuildr   googlecloudsdk.api_lib.utilr   !googlecloudsdk.command_lib.buildsr	   googlecloudsdk.command_lib.runr
   r   r   &googlecloudsdk.command_lib.run.composer   ri   googlecloudsdk.corer   r   r   r   r   googlecloudsdk.core.consoler   googlecloudsdk.core.utilr   r   r   r3   StagedProgressTrackerboolr[   Resourcer?   r   rI   r   tuplerK   r   rg   r6   r#   r    <module>r      s   $ 	 & & % = . 9 = 4 @ L * # * ) $ 8 * - @ 5CsK'(5C
5C 5C 	5C
 335C 5C 
5Cp<<< $$< 	<
 33< < 
<~*"4sK'(44 4 33	4
 
4nc c c B:0:0:0 :0 	:0
 :0 33:0 9sC'(:0z%>7r#   