
    2.a                         d dl Z d dlZd dlmZ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  G d	 d
      Zy)    N)copyfilermtree)	TLSConfig)ContextException)get_meta_dir)get_meta_file)get_tls_dir)get_context_hostc                       e Zd ZdZ	 	 ddZ	 	 ddZd Zed        Zed        Z	d Z
d	 Zd
 Zd Zd Zd Zd Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zy)Contextz
A context.Nc                 *   |st        d      || _        d | _        || _        i | _        i | _        d| _        d| _        |s#|r|dk(  rdn|}|t        ||      | di| _        y |j                         D ]  \  }}t        |t              st        dj                  ||            || j                  |<   |dk7  rF|j                  dt        ||            | j                  |   d<   t        |j                  d|             | j                  |   d<    y )	NzName not providedz	IN MEMORYswarmdockerHostSkipTLSVerifyz>Unknown endpoint format for
                    context {}: {}r   r   )	Exceptionnamecontext_typeorchestrator	endpointstls_cfg	meta_pathtls_pathr
   items
isinstancedictr   formatgetbool)	selfr   r   hostr   tlsdefault_endpointkvs	            8/usr/lib/python3/dist-packages/docker/context/context.py__init__zContext.__init__   s9   /00	 ($# !LG$;  (# 
 !,T37),W#DN  OO% 	+DAqa&& (&&,fT1o7 7 !"DNN1H}()f6Fc7 )DNN1f%15aeeS7* 2+DNN1o.	+    c                     t        ||       |d| j                  |<   |r|| j                  |   d<   |r|| j                  |<   y y )Nr   DefaultNamespace)r
   r   r   )r!   r   r"   r   skip_tls_verifydef_namespaces         r'   set_endpointzContext.set_endpoint9   sS     %T+>?, 
t 7DDNN4 !34!(DLL r)   c                 "    | j                         S N)__call__r!   s    r'   inspectzContext.inspectF   s    }}r)   c                    t         j                  |      }|rm | |d   |d   j                  dd       |j                  dd             }|d   j                  dd       |_        |j	                          t        |      |_        |S y )NNameMetadataStackOrchestrator	Endpoints)r   r   Type)r   
_load_metar   r   _load_certsr   r   )clsr   metainstances       r'   load_contextzContext.load_contextI   s    !!$'V!*-112EtL((;57H %)$4$8$8$FH!  "!-d!3HOr)   c                    t        |      }t        j                  j                  |      sy i }	 t	        |      5 }t        j                  |      }d d d        |d   j                         D ]T  \  }}|dk7  r|j                  dt        d d            |d   |   d<   t        |j                  dd            |d   |   d<   V |S # 1 sw Y   uxY w# t        t        t        f$ r }t        dj                  ||            d }~ww xY w)Nz@Detected corrupted meta file for
                context {} : {}r8   r   r   Fr   T)r   ospathisfileopenjsonloadOSErrorKeyError
ValueErrorr   r   r   r   r
   r    )r<   r   	meta_filemetadatafer%   r&   s           r'   r:   zContext._load_metaW   s   !$'	ww~~i(	4i (A99Q<( [)//1 	.DAqH}/0uu(u507H[!!$V,8<ot,9.H[!!$_5	. #( (:. 	4 ##)6$?4 4	4s.   C CC C	C D$C??Dc                 P   i }t        | j                        }| j                  j                         D ]c  }t        j
                  j                  t        j
                  j                  ||            sBd }d }d }t	        j                  t        j
                  j                  ||            D ]  }|j                  d      r"t        j
                  j                  |||      }6|j                  d      r"t        j
                  j                  |||      }i|j                  d      s{t        j
                  j                  |||      } t        |||g      s)d }|dk(  r!| j                  d   j                  dd      sd}t        ||f||      ||<   f || _        || _        y )	Ncacertkeyr   r   FT)client_certca_certverify)r	   r   r   keysrA   rB   isdirjoinlistdir
startswithallr   r   r   r   )	r!   certstls_direndpointrS   rP   rQ   filenamerT   s	            r'   r;   zContext._load_certsr   sa   dii(++- 	MH77==gx!@AGDCJJrww||GX'FG D&&t, ggll7HhGG((077<<8DD((/'',,w(CCD GT3'(x'x0H0L0L'10!F"+!%sWV#Mh%	M( r)   c                    t        | j                        }t        j                  j	                  |      st        j
                  |       t        t        | j                        d      5 }|j                  t        j                  | j                               d d d        t        | j                        }| j                  j                         D ]x  \  }}t        j                  j	                  t        j                  j                  ||            s3t        j
                  t        j                  j                  ||             |j                   }|rHt#        |t        j                  j                  ||t        j                  j%                  |                   |j&                  s|j&                  \  }}t#        |t        j                  j                  ||t        j                  j%                  |                   t#        |t        j                  j                  ||t        j                  j%                  |                   { t        | j                        | _        t        | j                        | _        y # 1 sw Y   xY w)Nw)r   r   rA   rB   rV   makedirsrD   r   writerE   dumpsr6   r	   r   r   rW   rS   r   basenamerP   r   r   )	r!   meta_dirrL   r\   r]   r#   ca_file	cert_filekey_files	            r'   savezContext.save   s   		*ww}}X&KK!-		*C0 	/AGGDJJt}}-.	/ dii(!\\//1 	DMHc77==gx!@ABGGLL(;<kkG"'',,Xrww'7'7'@#B C xx&)hh#	8BGGLLXrww'7'7	'B%D E277<<Xrww'7'7'A$C D	D  &dii0#DII.+	/ 	/s   )/J  J
c                     t         j                  j                  | j                        rt	        | j                         t         j                  j                  | j
                        rt	        | j
                         y y r0   )rA   rB   rV   r   r   r   r2   s    r'   removezContext.remove   sG    77==(4>>"77=='4==! (r)   c                 P    d| j                   j                   d| j                   dS )N<z: 'z'>)	__class____name__r   r2   s    r'   __repr__zContext.__repr__   s&    4>>**+3tyyk<<r)   c                 L    t        j                  | j                         d      S )N   )indent)rE   rc   r1   r2   s    r'   __str__zContext.__str__   s    zz$--/!44r)   c                     | j                   }|j                  | j                         |j                  | j                         |S r0   )r6   updateTLSMaterialStorage)r!   results     r'   r1   zContext.__call__   s2    d&&'dll#r)   c                     | j                   d u S r0   )r   r2   s    r'   is_docker_hostzContext.is_docker_host   s      D((r)   c                     | j                   S r0   )r   r2   s    r'   r5   zContext.Name   s    yyr)   c                     | j                   r| j                   dk(  r1| j                  j                  dd       }|r|j                  dd       S y | j                  | j                      j                  dd       S )Nr   r   r   )r   r   r   )r!   r]   s     r'   r   zContext.Host   sg      D$5$5$@~~))(D9H||FD11~~d//044VTBBr)   c                     | j                   S r0   )r   r2   s    r'   OrchestratorzContext.Orchestrator   s       r)   c                 n    i }| j                   rd| j                   i}| j                  || j                  dS )Nr7   )r5   r6   r8   )r   r   r   )r!   r=   s     r'   r6   zContext.Metadata   s;    '):):;DII
 	
r)   c                     | j                   }|r|dk(  rd}|| j                  j                         v r| j                  |   S y )Nr   r   )r   r   rU   )r!   rQ   s     r'   r   zContext.TLSConfig   sB    cWnC$,,##%%<<$$r)   c           	          i }| j                   j                         D ]Q  \  }}|j                  \  }}t        t	        t
        j                  j                  |j                  ||g            ||<   S d|iS )Nrw   )	r   r   rP   listmaprA   rB   rd   rS   )r!   r[   r]   r#   rP   rQ   s         r'   rw   zContext.TLSMaterial   su    !\\//1 	AMHcID#"BGG$$s{{D#&>?AE(O	A
 5
 	
r)   c                 8    d| j                   | j                  diS )Nrx   )MetadataPathTLSPath)r   r   r2   s    r'   rx   zContext.Storage   s$      $== 	r)   )NNNF)r   NNFN)ro   
__module____qualname____doc__r(   r.   r3   classmethodr?   r:   r;   ri   rk   rp   rt   r1   r{   propertyr5   r   r   r6   r   rw   rx    r)   r'   r   r      s    EI(+V 5915)    4 4/6"=5)   C C ! ! 
 
   
 
  r)   r   )rA   rE   shutilr   r   
docker.tlsr   docker.errorsr   docker.context.configr   r   r	   r
   r   r   r)   r'   <module>r      s,    	  #   * . / - 2g gr)   