
    i9                        d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 ddlm
Z ddlmZ ddlmZ dd	lmZ dd
lmZ ddlm
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl"m$Z$  G d dejJ                        Z&e	jN                  jP                  fdZ)e	jT                   e	jV                  e	jN                  jX                         G d de	jZ                                      Z.e	jN                  jP                  fdZ/ e	jV                  e	jN                  j`                         G d d e.             Z1e.j                   e1_         y)!zVDeploy a container to Cloud Run that will handle workloads that are not ingress based.    N)api_enabler)apis)base)
exceptions)docker_util)artifact_registry)connection_context)container_parser)flags)messages_util)pretty_print)resource_args)resource_name_conversion)stages)config_changes)flags_parser)worker_pools_operations)concept_parsers)presentation_specs)
properties)
console_io)progress_trackerc                       e Zd ZdZdZy)	BuildType
Dockerfile
BuildpacksN)__name__
__module____qualname__
DOCKERFILE
BUILDPACKS     &lib/surface/run/worker_pools/deploy.pyr   r   -   s    **r#   r   c                    d}t        j                  |      }|j                  t        j                                |j                  t        j
                  |              |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                | t         j                   j"                  k(  s| t         j                   j$                  k(  r#|j                  t        j&                                |S )z9Returns an argument group with all container deploy args.z@
Container Flags

  The following flags apply to the container.
)help)release_track)r   ArgumentGroupAddArgumentr   SourceAndImageFlagsMutexEnvVarsFlags
MemoryFlagCpuFlagArgsFlagr   SecretsFlagsDependsOnFlagCommandFlagAddVolumeMountFlagRemoveVolumeMountFlagClearVolumeMountsFlagReleaseTrackALPHABETAGpuFlag)r'   	help_textgroups      r$   ContainerArgGroupr;   2   sX   )
 

)
,%E--/0E++-HIE$$&'EMMO$ENN$%L--/0E'')*E%%'(E,,./E//12E//12 t((...	$++00	0	emmo&	,r#   c                   ^    e Zd ZdZdddZed        Zed        Zd Zd Z	d	 Z
d
 Zd Zd Zy)Deploy)Create or update a Cloud Run worker-pool.z@          Creates or updates a Cloud Run worker-pool.
          af            To deploy a container to the worker-pool `my-backend` on Cloud Run:

              $ {command} my-backend --image=us-docker.pkg.dev/project/image

          You may also omit the worker-pool name. Then a prompt will be displayed
          with a suggested default value:

              $ {command} --image=us-docker.pkg.dev/project/image
          )DESCRIPTIONEXAMPLESc                    t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  || j                                t        j                  || j                         d       t        j                  |d       t        j                          j#                  |       t        j$                  |       t        j&                  |       t        j(                  |       t        j*                  |       t        j,                  |       t        j.                  |       t        j0                  |       t        j2                  |       t5        j6                  dt9        j:                  d      ddd	      }t=        j>                  |g      j#                  |       |j@                  jC                  d
       y )Nworker)r'   resource_kind)rC   WORKER_POOLT)promptzWorkerPool to deploy to.F)requiredprefixesnone)"r   AddBinAuthzPolicyFlagsAddBinAuthzBreakglassFlagr   AddCloudSQLFlagsAddCmekKeyFlag"AddCmekKeyRevocationActionTypeFlagAddDescriptionFlagAddEgressSettingsFlag!AddEncryptionKeyShutdownHoursFlagAddRevisionSuffixArgAddRuntimeFlagAddVolumesFlagsr5   AddScalingFlag AddVpcNetworkGroupFlagsForUpdateRemoveContainersFlagAddToParserAddAsyncFlagAddLabelsFlagsAddGeneralAnnotationFlagsAddServiceAccountFlagAddClientNameAndVersionFlagsAddNoPromoteFlagAddGpuTypeFlagGpuZonalRedundancyFlagr   ResourcePresentationSpecr   GetV2WorkerPoolResourceSpecr   ConceptParserdisplay_info	AddFormat)clsparserworker_pool_presentations      r$   
CommonArgszDeploy.CommonArgse   s   	  (	##F+!!&)	 	,,V4	V$	'	++F3	v&	 	&#"2"2"45	c..0 
**6J	 ,,V4	v	 	##F+	'	&&v.	6"	 	  (1JJ11>"  !!#;"<=II !!&)r#   c                     | j                  |       t        | j                               }t        j                  ||       y N)rh   r;   r5   r
   AddContainerFlagsre   rf   container_argss      r$   ArgszDeploy.Args   s1    NN6&s'7'7'9:N&&v~>r#   c                     t        j                  || j                               }|j                  dt	        j
                  d             |j                  t	        j                  | j                                      |S )zBReturns the worker pool config changes with some default settings.r   N)breakglass_justification)r   !GetWorkerPoolConfigurationChangesr5   insertconfig_changes_modBinaryAuthorizationChangeappendSetLaunchStageChange)selfargschangess      r$   _GetBaseChangeszDeploy._GetBaseChanges   sj    <<d!G NN	44%)	
 NN%::4;L;L;NOPNr#   c                     t        j                  |d      r|j                  }nd|i}t        |      dkD  rt	        j
                  dd      |S )N
containers 
   --containerz.Worker pools may include at most 10 containers)r   FlagIsExplicitlySetr|   lenc_exceptionsInvalidArgumentException)rw   rx   r|   s      r$   _ValidateAndGetContainersz Deploy._ValidateAndGetContainers   sQ      |4??j:j
:11
I  r#   c                    |j                         D ci c]/  \  }}|j                  d      rt        j                  |d      r||1 }}}t	        |      dkD  re|j                         D cg c]  \  }}t        j                  |d      s| }}}|rt        j                  |      t        j                  dd      |j                         D ]v  \  }}t        j                  |d      rt        j                         rt        j                  |      |_        L|rdj                  |      }nd}t        j                  d|       |S c c}}w c c}}w )	Nimagesource   r   z2At most one container can be deployed from source.zwContainer {} requires a container image to deploy (e.g. `gcr.io/cloudrun/hello:latest`) if no build source is provided.zjRequires a container image to deploy (e.g. `gcr.io/cloudrun/hello:latest`) if no build source is provided.z--image)itemsIsSpecifiedr   r   r   r   RequiredImageArgumentExceptionr   r   r   	CanPromptPromptForDefaultSourcer   formatRequiredArgumentException)rw   r|   name	containerbuild_from_sourceneeds_imagemessages          r$   _ValidateAndGetBuildFromSourcez%Deploy._ValidateAndGetBuildFromSource   sg     *//11OD)%%g.((H=	 	i1   ! "3!8!8!:!:odI**9h? !:  
 
77DD11
M  -224i&&y(;!"99$?)
#VD\  
 66 # 5* Qs   4E	,"Ec                 ,    t        j                         gS rj   )r   get_run_api)rw   s    r$   _GetRequiredApiszDeploy._GetRequiredApis   s    ##%&&r#   c                    t        t        |j                                     \  }}d }d }d }	|j                  }
t	        j
                  t        j                  j                  j                  j                  d      t        j                  |      d      }t        j                  ||      r|}	dj                  |j                         |j                         |_        |
dz   }t$        j&                  j)                  |      rt*        j,                  }n*t/        || j1                               }t*        j2                  }|rd n|j"                  }d	j                  |j4                  
      }|||
||	|fS )NT)rF   zcloud-run-source-deploy)
project_idlocation_idrepo_id)skip_activation_promptz{repo}/{worker_pool})repoworker_poolz/Dockerfilez6Building using {build_type} and deploying container to)
build_type)nextiterr   r   r   
DockerRepor   VALUEScoreprojectGetr   
RepoRegionShouldCreateRepositoryr   GetDockerStringworkerPoolsIdr   ospathexistsr   r    _CreateBuildPackr5   r!   value)rw   rx   r   already_activated_servicesworker_pool_refr   rm   packr   repo_to_creater   ar_repodocker_filer   operation_messages                  r$   _BuildFromSourcezDeploy._BuildFromSource   s]     %6%<%<%> ?@D.DJN""F$$$$))1155t5D%006)G
 //(B n 288$$&#11 9 N =(K	ww~~k"''jnd.?.?.ABd''jDn22E 	Af
((f) 
 	 r#   c                    | j                        }| j                  |      }j                  j                  j	                         }t        j                  |       | j                         }|r"|j                  d       |j                  d       t        j                  t        j                  j                  j                  j                         |      }t!        j"                  t
        j$                  j&                  | j)                               }fd}t+        j,                  dd|      }	t/        j0                  |	      }
|
j3                  |      }t5        j6                  |       d}d}d}d}d}d}|r| j9                  |||      \  }}}}}}t;        j<                  t5        j>                  |||d	
             | jA                        }d}||dz  }|dz  }tC        jD                  |tG        jH                  tK        |      |du      djL                        5 }|
jO                  ||| j)                         ||||||||d      }|s.tQ        jR                  djU                  |jV                              	 ddd       jL                  r0t;        jX                  djU                  |jV                               yj[                          djU                  |jV                        }|j\                  rT|j\                  j^                  r>ta        jb                  |j\                  j^                        }|djU                  |      z  }t;        jX                  |dz          y# 1 sw Y   xY w)z+Deploy a WorkerPool container to Cloud Run.zartifactregistry.googleapis.comzcloudbuild.googleapis.comc                 p    j                   j                  j                         j                  }|dz   | z   S )N-)CONCEPTSr   ParselocationsId)endpointregionrx   s     r$   DeriveRegionalEndpointz*Deploy.Run.<locals>.DeriveRegionalEndpoint$  s0    }}((..0<<fc\H$$r#   runv2)address_override_funcNzDeploying container tozworker pool)resource_kind_lower	Deployingz new worker poolz...)include_buildinclude_create_repozDeployment failed)failure_messagesuppress_outputT)	trackerprefetchbuild_image
build_packbuild_source build_from_source_container_namer   r   force_new_revisionzCannot deploy worker pool [{}]zNWorker pool [{{bold}}{worker_pool}{{reset}}] is being deployed asynchronously.)r   z,Worker pool [{{bold}}{worker_pool}{{reset}}]z" revision [{{bold}}{rev}{{reset}}])revz has been deployed.)2r   r   r   r   r   r   ValidateResourcer   ru   r   check_and_enable_apisr   r   r   r   r   r	   GetConnectionContextProductRUNr5   r   GetGapicClientInstancer   WorkerPoolsOperationsGetWorkerPoolr   *MaybeLogDefaultGpuTypeMessageForV2Resourcer   r   InfoGetStartDeployMessagerz   r   StagedProgressTrackerr   WorkerPoolStagesboolasync_ReleaseWorkerPoolr   ArgumentErrorr   r   Successresultmetadatalatest_created_revisionr   GetNameFromFullChildName)rw   rx   r|   r   r   required_apisr   conn_contextr   
run_clientworker_pools_clientr   r   r   r   r   r   container_namer   headerr   responsemsgr   s    `                      r$   Runz
Deploy.Run  sf   //5J;;JGmm//557O	?+))+M<=67!,!B!B&&**,m" &::L% ,,t+AJ 2GG &33ODK<<T;OKJL0NN 


!#=





 ++ -		
 ))$/NF""f
eOF		/	/01 .d :	
 ,
 
$66





!#+9'%?! 7 h &&,33--
 	
 1
> {{"F/L/LFM
 oo:AA%33 B c 
		x00HH&??55
 	3::s:CC3!667]
 
s   $AM**M3N)r   r   r   __doc__detailed_helpclassmethodrh   rn   rz   r   r   r   r   r   r"   r#   r$   r=   r=   P   sb     2		-  $* $*L ? ?

)V'0ds8r#   r=   c                     d| j                   ig}|t        j                  j                  k7  rGt	        | dd      }|8dj                  |      }|d   j                  ddj                  |      gi       |S )	z&A helper method to cofigure buildpack.r   commandN r   envszGOOGLE_ENTRYPOINT="{command}")r   )r   r   r5   GAgetattrjoinupdater   )r   r'   r   command_argr   s        r$   r   r     sz    IOO
$	%$d''***)Y5K%g
1gnn3::7:KL
M 
+r#   c                        e Zd ZdZed        Zy)AlphaDeployr>   c                     | j                  |       t        j                  |       t        j                  |       t	        | j                               }t        j                  ||       y rj   )rh   r   AddWorkerPoolMinInstancesFlagAddWorkerPoolMaxInstancesFlagr;   r5   r
   rk   rl   s      r$   rn   zAlphaDeploy.Args  sM    NN6	''/	''/&s'7'7'9:N&&v~>r#   N)r   r   r   r   r   rn   r"   r#   r$   r   r     s    1? ?r#   r   )2r   enumos.pathr   googlecloudsdk.api_lib.runr   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   r   r   $googlecloudsdk.command_lib.artifactsr   googlecloudsdk.command_lib.runr   r	   r
   r   r   r   r   r   r   !googlecloudsdk.command_lib.run.v2r   rs   r   r   (googlecloudsdk.command_lib.util.conceptsr   r   googlecloudsdk.corer   googlecloudsdk.core.consoler   r   Enumr   r5   r   r;   UniverseCompatibleReleaseTracksr7   Commandr=   r   r6   r   r"   r#   r$   <module>r     s   ]   2 , ( > < < = ; 5 0 8 7 8 C 1 R : E D G * 2 8		 
 %)$5$5$8$8 < D%%**+m8T\\ m8 , m8`	 /3.?.?.B.B 
 D%%++,	?& 	? -	? nn r#   