
    ZiD                     h    d dl Z d dlZd dlmZ ddlmZ dZdZdZdZ	d	 Z
 G d
 de          ZddZdS )    N)Configuration   )ConfigExceptionKUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORTz3/var/run/secrets/kubernetes.io/serviceaccount/tokenz4/var/run/secrets/kubernetes.io/serviceaccount/ca.crtc                 ,    d}d| v pd| v }|rd}|| |fz  S )z!Adapted golang's net.JoinHostPortz%s:%s:%z[%s]:%s )hostporttemplatehost_requires_bracketings       ]/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/config/incluster_config.py_join_host_portr      s6    H"d{9cTk tTl""    c                   >    e Zd Zdej        fdZddZd Zd Zd Z	dS )	InClusterConfigLoaderTc                 r    || _         || _        || _        || _        t	          j        d          | _        d S )Nr   )minutes)_token_filename_cert_filename_environ_try_refresh_tokendatetime	timedelta_token_refresh_period)selftoken_filenamecert_filenametry_refresh_tokenenvirons        r   __init__zInClusterConfigLoader.__init__&   s?    
  .+"3%-%7%B%B%B"""r   Nc                     d}|!t                               t                    }d}|                                  |                     |           |rt          j        |           d S d S )NFT)type__call__r   _load_config_set_configset_default)r   client_configurationtry_set_defaults      r   load_and_setz"InClusterConfigLoader.load_and_set1   su    '#'==#?#? "O-... 	<%&:;;;;;	< 	<r   c                    t           | j        vst          | j        vrt          d          | j        t                    r| j        t                   st          d          dt	          | j        t                    | j        t                             z   | _        t          j                            | j	                  st          d          | 
                                 t          j                            | j                  st          d          t          | j                  5 }|                                st          d          	 d d d            n# 1 swxY w Y   | j        | _        d S )NzService host/port is not set.z#Service host/port is set but empty.zhttps://z"Service token file does not exist.z*Service certification file does not exist.zCert file exists but empty.)SERVICE_HOST_ENV_NAMEr   SERVICE_PORT_ENV_NAMEr   r   r   ospathisfiler   _read_token_filer   openreadssl_ca_cert)r   fs     r   r'   z"InClusterConfigLoader._load_config;   s   !66(==!"ABBB34 	I}%:;	I!"GHHH$T]3H%I%)]3H%IK KK	 w~~d233 	H!"FGGGw~~d122 	>!<> > > $%&& 	E!6688 E%&CDDDE	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E  .s   %$EEEc                       j         |_          j        |_         j         j        |j        d<    j        sd S  fd}||_        d S )Nauthorizationc                     j         t          j                                        k    r                                                     |            d S N)token_expires_atr   nowr3   r(   )r*   r   s    r   _refresh_api_keyz;InClusterConfigLoader._set_config.<locals>._refresh_api_key_   sM    $(9(=(=(?(???%%'''122222r   )r   r6   tokenapi_keyr   refresh_api_key_hook)r   r*   r>   s   `  r   r(   z!InClusterConfigLoader._set_configW   sm    $(I!+/+;(:!<@J (9& 	F	3 	3 	3 	3 	3
 5E111r   c                    t          | j                  5 }|                                }|st          d          d|z   | _        t
          j                                        | j        z   | _        d d d            d S # 1 swxY w Y   d S )NzToken file exists but empty.zbearer )	r4   r   r5   r   r?   r   r=   r   r<   )r   r7   contents      r   r3   z&InClusterConfigLoader._read_token_filef   s    $&'' 	+1ffhhG F%&DEEE"W,DJ$,$5$9$9 % %*%+D!	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   AA==BBr;   )
__name__
__module____qualname__r0   r"   r#   r,   r'   r(   r3   r   r   r   r   r   %   sz         $(		C 	C 	C 	C< < < </ / /8E E E+ + + + +r   r   Tc                 d    t          t          t          |                              |            dS )a  
    Use the service account kubernetes gives to pods to connect to kubernetes
    cluster. It's intended for clients that expect to be running inside a pod
    running on kubernetes. It will raise an exception if called from a process
    not running in a kubernetes environment.)r   r    r!   N)r   SERVICE_TOKEN_FILENAMESERVICE_CERT_FILENAMEr,   )r*   r!   s     r   load_incluster_configrJ   p   s8     -++- - - .:\:N-O-O-O-O-Or   )NT)r   r0   kubernetes.clientr   config_exceptionr   r.   r/   rH   rI   r   objectr   rJ   r   r   r   <module>rN      s     				 + + + + + + - - - - - -1 1 N N # # #H+ H+ H+ H+ H+F H+ H+ H+V	P 	P 	P 	P 	P 	Pr   