
                         B   d Z ddlmZ ddlmZ ddlm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 ej.                   ej0                  ej2                  j4                         G d dej6                                      Zy)z5The gcloud app migrate appengine-to-cloudrun command.    )absolute_import)division)unicode_literalsN)appengine_api_client)
k8s_object)base)gae_to_cr_migration_util)list_incompatible_features)	translate)config_changes)flags)deployc                        e Zd ZdZdddZe fd       Zej                   ej                  ej                  j                         fd              Zd Zd Zdd
Zded	ej$                  eef   fdZ xZS )AppEngineToCloudRunz:Migrate the second-generation App Engine app to Cloud Run.zP          Migrates the second-generation App Engine app to Cloud Run.
          aW            To migrate an App Engine app to Cloud Run:

          through app.yaml

          gcloud app migrate appengine-to-cloudrun --appyaml=path/to/app.yaml --entrypoint=main

          OR

          through service and version

          gcloud app migrate appengine-to-cloudrun --service=default --version=v1 --entrypoint=main

          )DESCRIPTIONEXAMPLESc                     t         |   |       |j                  dd       |j                  dd       |j                  dd       |j                  dd	       y )
Nz	--appyamlzFYAML file for the second generation App Engine version to be migrated.)helpz	--servicez+service name that is deployed in App Enginez	--versionz+version name that is deployed in App Enginez--entrypointz%entrypoint required for some runtimes)superArgsadd_argument)clsparser	__class__s     0lib/surface/app/migrate/appengine_to_cloudrun.pyr   zAppEngineToCloudRun.Args7   s{    	GL
   :   :   4      c                 d   t        j                  | j                               }t        j                  ||       | j                         | _        t        j                  }	 | j                  t        _        | j                  |       t        | -  |       |t        _        y# |t        _        w xY w)zYOverrides the Deploy.Run method, applying the wrapper logic for FlagIsExplicitlySet.
    N)r   GetApiClientForTrackReleaseTrackr	   GAEToCRMigrationUtilrelease_trackr   FlagIsExplicitlySet_flag_is_explicitly_set_wrapperStartMigrationr   Run)selfargs
api_clientoriginal_flag_is_explicitly_setr   s       r   r%   zAppEngineToCloudRun.RunN   s    
 &::4;L;L;NOJ11D **,D&+&?&?#B"&"F"Fe
$gk$"Ae"Aes   !5B" "B/c                 :    t        | d      xr || j                  v S )a`  Wrapper function to check if a flag is explicitly set.

    This wrapper checks for flags added during the migration process,
    in addition to the original flags.FlagIsExplicitlySet check.

    Args:
      args: The arguments to check.
      flag: The flag to check.

    Returns:
      bool: True if the flag is explicitly set, False otherwise.
    _migration_flags)hasattrr+   )r&   r'   flags      r   r#   z3AppEngineToCloudRun._flag_is_explicitly_set_wrapper`   s$     	()Kdd6K6K.Kr   c                 ,   t        j                  || j                               }|j                  dt	        j
                  t        j                               |j                  t	        j                  t        j                  j                               |S )z>Returns the service config changes with some default settings.r   )r   GetServiceConfigurationChangesr   insertr   DeleteAnnotationChanger   BINAUTHZ_BREAKGLASS_ANNOTATIONappendSetLaunchStageAnnotationChanger   ALPHA)r&   r'   changess      r   _GetBaseChangesz#AppEngineToCloudRun._GetBaseChangesq   sr    2249J9J9LMGNN	--55	
 NN55d6G6G6M6MN Nr   returnc                 .   t        j                   |j                  |j                  |j                         t	        j                  |j                  |j                  |j                  |j
                        }d}|D ]  }|j                  d      rd}||dz   z  } |j
                  rt        |dd|j
                  i       |dz  }t        d|d	       t        |d
|d          g | _	        |D ]  }|j                  d      s|j                  dd      }|j                  d      }|d   j                  dd      |d<   | j                  j                  |d          |d   dk(  r|j                  |d   ddd       |d   dk(  r%|j                  |d   | j                  |             |d   dk(  r=|d   dk(  r|j                  |d   d       n|d   dk(  r|j                  |d   d       |d   dk(  r-|j                  |d   t        j                   |d                7|d   dk(  r-|j                  |d   t        j                   |d                lt#        |      dkD  r|j                  |d   |d          |j                  |d   d        y) zStarts the migration process. z--labelszO--labels=migrated-from=app-engine,migration-tool=gcloud-app-migrate-standard-v1 zset-build-env-varsGOOGLE_ENTRYPOINTzC --set-build-env-vars GOOGLE_ENTRYPOINT=gunicorn -b :$PORT main:appzCommand to run:
SERVICE   z--=r   -_labelsz
app-enginezgcloud-app-migrate-standard-v1)zmigrated-fromzmigration-toolset_env_varstimeout   600iX  3600i  min_instancesmax_instancesTN)r
   appyamlserviceversionr   
entrypoint
startswithsetattrprintr+   replacesplitr3   __setattr__ParseSetEnvVarsr   
ScaleValuelen)r&   r'   cloud_run_deploy_commandprint_deploy_commandcommand_strcommand_argss         r   r$   z"AppEngineToCloudRun.StartMigration   s    99dllDLL
  )22dllDLL$//  /			
	+gkC// 0 


0
 
O
 

148D)5a89D/				%!))$3 #((-&q/11#s;Q$$\!_5?h&


1o#/$D ?n,


<?D,@,@,M
N
?i'!_%\!_c2A&(\!_d3
?o-


<?E,<,<\!_,M
N
?o-


<?E,<,<\!_,M
N
|q 


<?LO
<


<?D
1G 0H r   	input_strc                    t        j                  d|      }|st        j                         S |j	                  d      }|st        j                         S t        j                  d |j                  d      D              }|S )zParses a 'set-env-vars' string and converts it into an OrderedDict.

    Args:
        input_str: A string in the format of
          'set-env-vars="KEY1=VALUE1,KEY2=VALUE2"'.

    Returns:
        An OrderedDict containing the environment variables.
    z
="([^"]*)"rF   c              3   @   K   | ]  }|j                  d d        yw)r@   rF   N)rS   ).0pairs     r   	<genexpr>z6AppEngineToCloudRun.ParseSetEnvVars.<locals>.<genexpr>   s       ''=t

3'=s   ,)researchcollectionsOrderedDictgrouprS   )r&   r\   matchvars_stringenv_varss        r   rU   z#AppEngineToCloudRun.ParseSetEnvVars   st     IImY/E$$&&++a.K$$&&&& ''2'8'8'=' H Or   )r8   N)__name__
__module____qualname____doc__detailed_helpclassmethodr   r   DefaultUniverseOnlyReleaseTracksr   r5   r%   r#   r7   r$   strre   rf   rU   __classcell__)r   s   @r   r   r   $   s     C	-  , 4d''--.B / B "CJsCx(r   r   )rn   
__future__r   r   r   re   rc   googlecloudsdk.api_lib.appr   googlecloudsdk.api_lib.runr   googlecloudsdk.callioper   googlecloudsdk.command_lib.appr	   7googlecloudsdk.command_lib.app.gae_to_cr_migration_utilr
   r   googlecloudsdk.command_lib.runr   r   surface.runr   rq   rr   r   r5   AlphaDeployr    r   r   <module>r      s     < &  '  	 ; 1 ( C ^ M 9 0  D%%++,v&,, v - vr   