
    x[h              
          U d Z ddlZddlZddlZddlm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	Zd
ZdZ ej(                  e      ZddgedgdZeed<   dedede
deddf
dZd Zddedee   fdZd Zd Z d Z!y)z"Write Files: write arbitrary files    N)Optional)
url_helperutil)Cloud)Config)
MetaSchema)PER_INSTANCEi  Fz
text/plaincc_write_filesallwrite_files)iddistros	frequencyactivate_by_schema_keysmetanamecfgcloudargsreturnc                 :   |j                  dg       }|D cg c]  }t        j                  |dt              s|! }}|st        j                  d|        y t        j                  |j                        }t        | ||j                  j                  |       y c c}w )Nr   deferzESkipping module named %s, no/empty 'write_files' key in configuration)getr   get_cfg_option_boolDEFAULT_DEFERLOGdebugfetch_ssl_detailspathsr   distrodefault_owner)r   r   r   r   	file_listffiltered_filesssl_detailss           A/usr/lib/python3/dist-packages/cloudinit/config/cc_write_files.pyhandler'   "   s    r*I ''7MB 	
N 
 		;	

 	((5Knell&@&@+Ns   $Bc                     | sd} | j                         j                         } | dv rdgS | dv rddgS | dv rdgS | t        k(  rt        gS | rt        j	                  d| t               t        gS )N )gzgzipapplication/x-gzip)z	gz+base64zgzip+base64zgz+b64zgzip+b64application/base64)b64base64z%Unknown encoding type %s, assuming %s)lowerstripTEXT_PLAIN_ENCr   warning)encoding_types    r&   canonicalize_extractionr5   4   s    !'')//1M&$%%JJ$&:;;
 ))$%%&3	

     ownerr%   c           
         |sy t        |      D ]A  \  }}|j                  d      }|st        j                  d|dz   |        5t        j
                  j                  |      }t        |j                  dd       ||j                  dd       |j                  dd             }|t        j                  d|dz   |        t        j                  |j                  d|            \  }}	t        |j                  d	      t              }
t        j                  |d
      rdnd}t        j                  ||||
||	       t        j                  |||	       D y )Npathz3No path provided to write for entry %s in module %s   sourcecontentencodingz>No content could be loaded for entry %s in module %s; skippingr7   permissionsappendabwb)omodemodeusergroup)	enumerater   r   r3   osr9   abspathread_url_or_decoder   extract_usergroupdecode_permsDEFAULT_PERMSr   
write_filechownbyname)r   filesr7   r%   if_infor9   contentsugpermsrB   s               r&   r   r   M   s:   u% !%	6zz&!KKEA
 wwt$%JJx&JJy$'JJz4(	
 KKA	  ''

7E(BCAVZZ6F00B(%e!1	
 	q!$C!%r6   c                 X   | |S 	 t        | t        t        f      rt        |       S t        t        |       d      S # t        t
        f$ r^ g }| |fD ]:  }	 |j                  d|z         # t        $ r |j                  d|z         Y 8w xY w t        j                  dg|  |cY S w xY w)N   z%oz%rz0Undecodable permissions %s, returning default %s)	
isinstanceintfloatstr	TypeError
ValueErrorr?   r   r3   )permdefaultrepsrs       r&   rK   rK   u   s    |dS%L)t9 s4y!$$z"  	&A&D1H% &D1H%&	&
 	FNNs7    < < B)A*)B)*B
B)	B

B)(B)c                 R   | d n| j                  dd       }t        |      }||syd }|r5	 t        j                  || j                  dd       dd|      j                  }||st        |      }t        ||      }|S # t
        $ r  t        j                  t        d|       d}Y Ew xY w)Nurir)   headers   )rd   retriessec_betweenr%   zVFailed to retrieve contents from source "%s"; falling back to data from "contents" keyF)r   boolr   read_file_or_urlrR   	Exceptionr   logexcr   r5   extract_contents)r;   r%   r<   r=   urluse_urlresultextractionss           r&   rI   rI      s    .$fjj&=C3iGwF	  00

9d3' h " 7 .h7!';7M  	KK,	 G	s   4A= =&B&%B&c                     | }|D ]E  }|dk(  rt        j                  |dd      }!|dk(  rt        j                  |      }<|t        k(  sFG |S )Nr,   F)quietdecoder-   )r   decomp_gzipr/   	b64decoder2   )rR   extraction_typesro   ts       r&   rl   rl      s^    F $$%%fE%HF&&%%f-F.  Mr6   )N)"__doc__r/   loggingrG   typingr   	cloudinitr   r   cloudinit.cloudr   cloudinit.configr   cloudinit.config.schemar   cloudinit.settingsr	   rL   r   r2   	getLogger__name__r   r   __annotations__r[   listr'   r5   dictr   rK   rI   rl    r6   r&   <module>r      s    )   	  & ! # . +g! w -	j O O6 O% Ot O O$2%%C %%htn %%P*"J	r6   