
    \*                         S 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\R*                  5      rSrSrSrSrSSS.r\" S/5      r\R<                  R?                  5       \R<                  R@                  :w  a  \S==   S-  ss'   S.S jr!S r"S  r#S! r$S.S" jr%S# r& " S$ S%\5      r' " S& S'\5      r(S( r)S/S) jr*S/S* jr+S/S+ jr, " S, S-\5      r-g)0zCLibrary for generating the files for local development environment.    N)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_vars4   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)   9   s#    	00-/91MN	OOr   c                   (    \ rS rSrSr\S 5       rSrg)MinikubeCluster>   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_varsH   s    !$"3"344r   r   N)r   r   r   r   r   r    r   r!   r   r   r   r+   r+   >   s     5 5r   r+   c                   4    \ rS rSrSr   SS jrS rS rSrg)	MinikubeM   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__P   s    
 &%OKr   c                     [        U R                  U R                  U R                  5        [	        U R                  U R                  S:H  5      $ )Ndocker)_StartMinikubeClusterr4   r6   r7   r+   r   s    r   	__enter__Minikube.__enter__Z   s8    $,,doot{{K4--t(/JKKr   c                 h    U R                   (       a!  [        U R                  U R                  5        g g r   )r5   _StopMinikuber4   r7   r   exc_type	exc_valuetbs       r   __exit__Minikube.__exit__^   s$    D&&4 r   )r4   r7   r5   r6   )TNF	r   r   r   r   r   r   r@   rH   r!   r   r   r   r1   r1   M   s     , !	L5r   r1   c                      [         R                  R                  R                  R	                  5       =(       d    [
        R                  " S5      $ )Nminikube)r   VALUEScodeminikube_path_overrideGetr   GetGcloudPreferredExecutabler   r   r   r(   r(   c   s:    



 
 
7
7
;
;
= B

5
5j
ACr   c                       \ rS rSrSrSrg)MinikubeStartErrorh   z!Error if minikube fails to start.r   N)r   r   r   r   r   r!   r   r   r   rS   rS   h   s    )r   rS   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_PERMISSIONrU   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=r>   z--container-runtime=dockerz--alsologtostderrz-v8z)Starting development environment '%s' ...T)required)event_timeout_secshow_stderrrL   N   )_IsMinikubeClusterUpr(   appendextendr   ParseDurationr   rM   rN   minikube_event_timeoutrP   total_secondsr   ProgressBarr   StreamOutputJsonprint_HandleMinikubeStatusEvent	Exceptionr$   reraiserS   sysexc_info)	r8   r:   r;   cmd	start_msgevent_timeoutprogress_barjson_objes	            r   r?   r?      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_IDSrS   _MINIKUBE_ERROR_MESSAGES)	rp   rq   ru   current_steptotal_stepscompletion_fractiondownload_progress	exit_codemsgs	            r   rh   rh      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-envrZ   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)r8   rm   liness      r   r.   r.      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.statusrZ   -ojsonr   Fr   r]   HostRunning)r(   r   GetOutputJsonstrip
ValueErrorr&   CalledProcessError)r8   rm   r   s      r   r_   r_      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.stoprZ   z)Stopping development environment '%s' ...   r   show_output Development environment stopped.Nr(   rg   r   Run)r8   r;   rm   s      r   rC   rC      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.deleterZ   z)Deleting development environment '%s' ...r   Fr   r   Nr   )r8   rm   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   r8   	__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   r@    ExternalClusterContext.__enter__  s    4--..r   c                     g r   r   rD   s       r   rH   ExternalClusterContext.__exit__  s    r   r   NrJ   r   r   r   r   r     s    9&/	r   r   c                  .    [         R                  " S5      $ )Nkubectl)r   rQ   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   rm   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   rm   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   2  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__=  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   r@   KubeNamespace.__enter__H  s;    DOOT-?-?@@t(:(:;#d Ar   c                 h    U R                   (       a!  [        U R                  U R                  5        g g r   )r   r   r   r   rD   s       r   rH   KubeNamespace.__exit__M  s$    t(:(:; r   )r   r   r   r   rJ   r   r   r   r   r   :  s    =	#$
<r   r   )Fr   ).r   r&   rk   googlecloudsdk.command_lib.coder   googlecloudsdk.corer   r   googlecloudsdk.core.consoler   googlecloudsdk.core.utilr   r   r$   DEFAULT_CLUSTER_NAMEobjectr
   r)   r+   r1   r(   ErrorrS   r}   r   r   !_MINIKUBE_NOT_ENOUGH_CPU_FRAGMENTr   	frozensetr   OperatingSystemCurrentLINUXr?   rh   r.   r_   rC   r   r   r   r   r   r   r   r   r   r   r   <module>r      s6   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   