
    *                     P   S 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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rSr " S S\5      rS r " S S\5      r " S S\5      rS r " S S\R4                  5      rSrSrSrSrSSS.r \!" S/5      r"\RF                  RI                  5       \RF                  RJ                  :w  a  \ S ==   S!-  ss'   S2S" jr&S# r'S$ r(S% r)S2S& jr*S' r+ " S( S)\5      r, " S* S+\5      r-S, r.S3S- jr/S3S. jr0S3S/ jr1 " S0 S1\5      r2g)4zCLibrary for generating the files for local development environment.    )absolute_import)division)print_function)unicode_literalsN)run_subprocess)
exceptions)
properties)
console_io)	platforms)timeszgcloud-local-devc                   .    \ rS rSrSrS r\S 5       rSrg)_KubeCluster#   zA kubernetes cluster.

Attributes:
  context_name: Kubernetes context name.
  env_vars: Docker env vars.
  shared_docker: Whether the kubernetes cluster shares a docker instance with
    the developer's machine.
c                     Xl         X l        g)zInitializes KubeCluster with cluster name.

Args:
  context_name: Kubernetes context.
  shared_docker: Whether the kubernetes cluster shares a docker instance
    with the developer's machine.
Ncontext_nameshared_docker)selfr   r   s      1lib/googlecloudsdk/command_lib/code/kubernetes.py__init___KubeCluster.__init__-   s     %&    c                     0 $ N r   s    r   env_vars_KubeCluster.env_vars8   s    Ir   r   N)	__name__
__module____qualname____firstlineno____doc__r   propertyr   __static_attributes__r   r   r   r   r   #   s     	'  r   r   c                  j    [         R                  " [        R                  " [	        5       S/5      5      $ )z(Returns the current version of minikube.version)sixensure_text
subprocesscheck_output_FindMinikuber   r   r   GetMinikubeVersionr-   =   s#    	00-/91MN	OOr   c                   (    \ rS rSrSr\S 5       rSrg)MinikubeClusterB   zA cluster on minikube.

Attributes:
  context_name: Kubernetes context name.
  env_vars: Docker environment variables.
  shared_docker: Whether the kubernetes cluster shares a docker instance with
    the developer's machine.
c                 ,    [        U R                  5      $ r   )_GetMinikubeDockerEnvsr   r   s    r   r   MinikubeCluster.env_varsL   s    !$"3"344r   r   N)r   r    r!   r"   r#   r$   r   r%   r   r   r   r/   r/   B   s     5 5r   r/   c                   4    \ rS rSrSr   SS jrS rS rSrg)	MinikubeQ   z$Starts and stops a minikube cluster.Nc                 4    Xl         X l        X0l        X@l        g r   )_cluster_name_stop_cluster
_vm_driver_debug)r   cluster_namestop_cluster	vm_driverdebugs        r   r   Minikube.__init__T   s    
 &%OKr   c                     [        U R                  U R                  U R                  5        [	        U R                  U R                  S:H  5      $ )Ndocker)_StartMinikubeClusterr8   r:   r;   r/   r   s    r   	__enter__Minikube.__enter__^   s8    $,,doot{{K4--t(/JKKr   c                 h    U R                   (       a!  [        U R                  U R                  5        g g r   )r9   _StopMinikuber8   r;   r   exc_type	exc_valuetbs       r   __exit__Minikube.__exit__b   s$    D&&4 r   )r8   r;   r9   r:   )TNF	r   r    r!   r"   r#   r   rD   rL   r%   r   r   r   r5   r5   Q   s     , !	L5r   r5   c                      [         R                  R                  R                  R	                  5       =(       d    [
        R                  " S5      $ )Nminikube)r	   VALUEScodeminikube_path_overrideGetr   GetGcloudPreferredExecutabler   r   r   r,   r,   g   s:    



 
 
7
7
;
;
= B

5
5j
ACr   c                       \ rS rSrSrSrg)MinikubeStartErrorl   z!Error if minikube fails to start.r   N)r   r    r!   r"   r#   r%   r   r   r   rW   rW   l   s    )r   rW   zio.k8s.sigs.minikube.stepz&io.k8s.sigs.minikube.download.progresszio.k8s.sigs.minikube.errorzThe minimum allowed is 2 CPUs.z4Not enough CPUs. Cloud Run Emulator requires 2 CPUs.zCannot reach docker daemon.)2969HOST_HOME_PERMISSIONrY   z Increase Docker VM CPUs to 2.c           	          [        U 5      (       Gd  [        5       SSU SSSSS/	nU(       a+  UR                  SU-   5        US	:X  a  UR                  S
5        U(       a  UR                  SS/5        SU -  n[        R
                  " [        R                  R                  R                  R                  SS95      R                  n[        R                  " U5       n[        R                  " X5US9 H!  nU(       a  [!        SU5        [#        Xg5        M#     SSS5        gg! , (       d  f       g= f! [$         a<  n[&        R(                  " [*        U[,        R.                  " 5       S   5         SnAgSnAff = f)zStarts a minikube cluster.start-pz--keep-contextz--interactive=falsez--delete-on-failurez--install-addons=falsez--output=jsonz--vm-driver=rB   z--container-runtime=dockerz--alsologtostderrz-v8z)Starting development environment '%s' ...T)required)event_timeout_secshow_stderrrP   N   )_IsMinikubeClusterUpr,   appendextendr   ParseDurationr	   rQ   rR   minikube_event_timeoutrT   total_secondsr
   ProgressBarr   StreamOutputJsonprint_HandleMinikubeStatusEvent	Exceptionr(   reraiserW   sysexc_info)	r<   r>   r?   cmd	start_msgevent_timeoutprogress_barjson_objes	            r   rC   rC      sI   ":--
/






"

c 


>I-. 
**1
2	

'/0=Li))



 
 
7
7
;
; < +m  !!),&77eEH*h'
$\
<E -,3 .2 -, 
 :KK"As||~a'899:s6   CD2 ;D!D2 !
D/+D2 /D2 2
E8<2E33E8c                    US   [         :X  ao  US   nUR                  SS5      S:w  aS  UR                  SS5      S:w  a<  [        US   5      n[        US   5      nU[        U5      -  nU R	                  U5        gggUS   [
        :X  a}  US   nUR                  SS5      S:w  aa  UR                  SS5      S:w  aJ  SU;   aC  [        US   5      n[        US   5      n[        US   5      nX6-   U-  nU R	                  U5        ggggUS   [        :X  a\  SUS   ;   aR  US   nSU;   a!  S	U;   a  US   [        ;   a  [        US	   5      eUS   n[        R                  US
5      n[        U5      egg)zHandle a minikube json event.typedatacurrentstep 
totalstepsprogressexitcodeidadvicez#Unable to start Cloud Run Emulator.N)
_MINIKUBE_STEPgetintfloatSetProgress_MINIKUBE_DOWNLOAD_PROGRESS_MINIKUBE_ERROR _MINIKUBE_PASSTHROUGH_ADVICE_IDSrW   _MINIKUBE_ERROR_MESSAGES)	rt   ru   ry   current_steptotal_stepscompletion_fractiondownload_progress	exit_codemsgs	            r   rl   rl      s   f'FD xxr"b(TXXlB-G2-Mm,-l\*+k(5+==23	 .N(
 66FD 	#r)r"b(Z4-?m,-l\*+kZ 01)=L23 .@( 	* 	O+
hv>N0NFDT)T
66tH~..z"i$(()NPcs## 1O+r   c                 n    [        5       SSU S/n[        R                  " USS9n[        S U 5       5      $ )z8Get the docker environment settings for a given cluster.z
docker-envr^   z--shell=none   )timeout_secc              3      #    U  H7  o(       d  M  UR                  S 5      (       a  M#  UR                  SS5      v   M9     g7f)#=   N)
startswithsplit).0lines     r   	<genexpr>)_GetMinikubeDockerEnvs.<locals>.<genexpr>   s5      Q%*Td4??3;OdjjaUs   
AAA)r,   r   GetOutputLinesdict)r<   rq   liness      r   r2   r2      sD    	,lNK#

'
'
<%	 Q%*Q 
Q Qr   c                     [        5       SSU SS/n [        R                  " USSS9nSU;   =(       a    US   R                  5       S	:H  $ ! [        [
        R                  4 a     gf = f)
z(Checks if a minikube cluster is running.statusr^   -ojsonr   Fr   ra   HostRunning)r,   r   GetOutputJsonstrip
ValueErrorr*   CalledProcessError)r<   rq   r   s      r   rc   rc      sq    	(D,fE#))0FVCv 4 4 6) CC
j33	4 s   7A
 
A'&A'c                 ~    [        5       SSU /n[        SU -  5        [        R                  " USUS9  [        S5        g)zStop a minikube cluster.stopr^   z)Stopping development environment '%s' ...   r   show_output Development environment stopped.Nr,   rk   r   Run)r<   r?   rq   s      r   rG   rG      s;    	&$5#3lBCScu=*+r   c                 ~    [        5       SSU /n[        SU -  5        [        R                  " USSS9  [        S5        g)	zDelete a minikube cluster.deleter^   z)Deleting development environment '%s' ...r   Fr   r   Nr   )r<   rq   s     r   DeleteMinikuber      s;    	(D,7#3lBCScu=*+r   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ExternalCluster   zA external kubernetes cluster.

Attributes:
  context_name: Kubernetes context name.
  env_vars: Docker environment variables.
  shared_docker: Whether the kubernetes cluster shares a docker instance with
    the developer's machine.
c                 .   > [         [        U ]  US5        g)z[Initializes ExternalCluster with profile name.

Args:
  cluster_name: Name of the cluster.
FN)superr   r   )r   r<   	__class__s     r   r   ExternalCluster.__init__
  s     
/4),>r   r   )r   r    r!   r"   r#   r   r%   __classcell__)r   s   @r   r   r      s    ? ?r   r   c                   *    \ rS rSrSrS rS rS rSrg)ExternalClusterContexti  z1Do nothing context manager for external clusters.c                     Xl         g r   _kube_context)r   kube_contexts     r   r   ExternalClusterContext.__init__  s    %r   c                 ,    [        U R                  5      $ r   )r   r   r   s    r   rD    ExternalClusterContext.__enter__  s    4--..r   c                     g r   r   rH   s       r   rL   ExternalClusterContext.__exit__  s    r   r   NrN   r   r   r   r   r     s    9&/	r   r   c                  .    [         R                  " S5      $ )Nkubectl)r   rU   r   r   r   _FindKubectlr      s    		4	4Y	??r   c                 ~    [        5       /nU(       a  USU/-  nU/ SQ-  n[        R                  " USSS9nSU -   U;   $ )N	--context)r   
namespacesr   namer   Fr   z
namespace/)r   r   r   )	namespacer   rq   r   s       r   _NamespaceExistsr   $  sP    	#K&&C	,,#,,	ru.*			!Z	//r   c                 r    [        5       /nU(       a  USU/-  nUSSU /-  n[        R                  " USSS9  g )Nr   creater   r   Fr   r   r   r   r   r   rq   s      r   _CreateNamespacer   .  A    	#K&&C(K	++#Sbe<r   c                 r    [        5       /nU(       a  USU/-  nUSSU /-  n[        R                  " USSS9  g )Nr   r   r   r   Fr   r   r   s      r   _DeleteNamespacer   6  r   r   c                   .    \ rS rSrSrSS jrS rS rSrg)	KubeNamespacei>  z5Context to create and tear down kubernetes namespace.Nc                 *    Xl         X l        SU l        g)zsInitialize KubeNamespace.

Args:
  namespace: (str) Namespace name.
  context_name: (str) Kubernetes context name.
FN)
_namespace_context_name_delete_namespace)r   r   r   s      r   r   KubeNamespace.__init__A  s      O%"Dr   c                     [        U R                  U R                  5      (       d(  [        U R                  U R                  5        SU l        g g )NT)r   r   r   r   r   r   s    r   rD   KubeNamespace.__enter__L  s;    DOOT-?-?@@t(:(:;#d Ar   c                 h    U R                   (       a!  [        U R                  U R                  5        g g r   )r   r   r   r   rH   s       r   rL   KubeNamespace.__exit__Q  s$    t(:(:; r   )r   r   r   r   rN   r   r   r   r   r   >  s    =	#$
<r   r   )Fr   )3r#   
__future__r   r   r   r   r*   ro   googlecloudsdk.command_lib.coder   googlecloudsdk.corer   r	   googlecloudsdk.core.consoler
   googlecloudsdk.core.utilr   r   r(   DEFAULT_CLUSTER_NAMEobjectr   r-   r/   r5   r,   ErrorrW   r   r   r   !_MINIKUBE_NOT_ENOUGH_CPU_FRAGMENTr   	frozensetr   OperatingSystemCurrentLINUXrC   rl   r2   rc   rG   r   r   r   r   r   r   r   r   r   r   r   <module>r      sB   J &  % '  
 : * * 2 . * 
) 6 4P
5l 55v 5,C
*)) * -F .$D ! A
' 
 $-.D-E#F  $$&)*C*C*I*II4 $DD %:P,$^Q,,?l ?&
	V 
	@0==<F <r   