
    n                         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Zd
Z G d de      Zd Zy)zCLibrary for generating the files for local development environment.    )absolute_import)division)unicode_literalsN)builders)local)yaml_helper)yamlzg
apiVersion: skaffold/v2beta5
kind: Config
build:
  artifacts: []
deploy:
  kubectl:
    manifests: []
c                   "    e Zd ZdZd Zd Zd Zy)LocalRuntimeFilesz;Generates the developement environment files for a project.c                     || _         y)zYInitialize LocalRuntimeFiles.

    Args:
      settings: Local development settings.
    N)	_settings)selfsettingss     2lib/googlecloudsdk/command_lib/code/local_files.py__init__zLocalRuntimeFiles.__init__+   s     DN    c           
         | j                   j                  rt        | j                   j                  t        j                        rV| j                   j                  j                  d      st        d      t        | j                   j                  dd       dz  }n| j                   j                  }t        d|      }nd}t        j                  | j                   j                  | j                   j                  | j                   j                  | j                   j                  | j                   j                  | j                   j                  || j                   j                         t        j"                  | j                   j                  | j                   j                  | j                   j$                  | j                   j&                  | j                   j(                        g}d}t        | j                   j*                  t        j,                        rgt        j.                  t1        j2                  t        j4                  | j                   j*                  j6                              }|j9                  |       nbt        | j                   j*                  t        j:                        r4t        j.                  t        j<                        }|j9                  |       | j                   j>                  rV|st        d      t        j@                  | j                   j>                  |jC                               }|j9                  |       tE        |      S )z[Create a kubernetes config file.

    Returns:
      Text of a kubernetes config file.
    mz7cpu limit must be defined as an integer or as millicpusNg     @@g?zKA credential generator must be defined when cloudsql instances are defined.)#r   cpu
isinstancesix	text_typeendswith
ValueErrorintminr   AppContainerGeneratorservice_nameimageenv_varsenv_vars_secretsmemoryreadiness_probeSecretsGeneratorvolumes_secrets	namespaceallow_secret_manager
credentialServiceAccountSettingCredentialGenerator	functoolspartialGetServiceAccountSecretnameappend#ApplicationDefaultCredentialSettingGetUserCredentialcloudsql_instancesCloudSqlProxyGeneratorGetInfo_GenerateKubeConfigs)r   user_cpucpu_requestcode_generatorscredential_generatorcloudsql_proxys         r   KubernetesConfigz"LocalRuntimeFiles.KubernetesConfig3   sj    ~~	DNN&&	6~~!!**3/ ' ( (t~~))#2./&8>>%%X&kk 	##NN'')=)=NN##T^^%D%DNN!!4>>#5#5{NN**		,
 	t~~::#~~>>#~~==#~~77#~~BB		DO  $..++U-H-HI"66


E99 NN55::<= 12	DNN--==
?"66u7N7NO12~~((! 2 3 	333
..
+
+-A-I-I-KMn^,00r   c                    t        j                  t              }t        j                  |dt
              }|j                  |       d| j                  j                  i}t        j                  | j                  j                  j                  d            |d<   t        | j                  j                  t        j                         r~d| j                  j                  j                  i|d<   | j                  j                  j"                  rdg|d   d	<   d
i i|d<   | j                  j                  j$                  rkd|d   d<   nb| j                  j                  j'                  | j                  j                        }dt        j                  |j                  d            i|d<   t        j                  |dt
              }|j                  |       | j                  j(                  rdd| j                  j*                  d| j                  j(                  d}| j                  j,                  r| j                  j,                  |d<   |g|d<   t        j.                  |      S )zCreate a skaffold yaml file.

    Args:
      kubernetes_file_path: Path to the kubernetes config file.

    Returns:
      Text of the skaffold yaml file.
    )deploykubectl	manifests)constructorr    unicode_escapecontextbuilder
buildpackszGOOGLE_DEVMODE=1envautosyncTtrustBuilder
dockerfiledocker)build	artifactsservicei  )resourceTyperesourceNameport	localPortr'   portForward)r	   load_SKAFFOLD_TEMPLATEr   GetOrCreatelistr0   r   r    r   ensure_textrC   encoder   rD   r   BuildpackBuilderdevmodetrustDockerfileRelPath
local_portr   r'   dump)r   kubernetes_file_pathskaffold_yamlr@   artifactdockerfile_rel_pathrM   port_forward_configs           r   SkaffoldConfigz LocalRuntimeFiles.SkaffoldConfigg   s    II01M''9tMI)*--.H //%%&679HY $..(((*C*CD
T^^++33 h| 
			'	');(<u%"B<				%	%15~. !NN22DD
..
 
 " oo1889IJKhx
 ''-4AIX~~  #..55~~00	 
	!	!+/>>+C+CK(&9%:mM"99]##r   N)__name__
__module____qualname____doc__r   r<   re    r   r   r   r   (   s    C21h6$r   r   c                    g }| D ]!  }|j                  |j                                # |D cg c]  }|d   dk(  s| }}t        j                  ||       D ]  \  }}|j	                  |        |D ]G  }t        j                  |d      }t        j                  ||       D ]  \  }}|j                  |        I t        j                  |      S c c}w )zGenerate Kubernetes yaml configs.

  Args:
    code_generators: Iterable of KubeConfigGenerator.

  Returns:
    Iterable of dictionaries representing kubernetes yaml configs.
  kind
Deployment)spectemplatern   
containers)
extendCreateConfigs	itertoolsproductModifyDeploymentr   GetAllModifyContainerr	   dump_all)r9   kube_configscode_generatorconfigdeployments
deploymentrp   	containers           r   r6   r6      s     ,'n4467 ( ('6&>\+If<   %.$5$5k6E%G j.##J/%G  j##J$NPJ &/%6%6z7F&H!	>$$Y/&H	   
|	$$s
   CC)ri   
__future__r   r   r   r,   rs   googlecloudsdk.command_lib.coder   r   r   googlecloudsdk.corer	   r   rU   objectr   r6   rj   r   r   <module>r      sE    J &  '   4 1 7 $ 
 u$ u$p%r   