
    x[h}&                     X   d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
  ej                  e      ZdZdZdZdZeegZdgZd	Zd
ZdddddddddddddZ e eej3                               d       Z G d de j6                        Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$e
fd$Z%d&d%Z&y)'    N)importer
type_utilsutil)FREQUENCIES
PER_ALWAYSPER_INSTANCEztext/x-not-multipartzapplication/octet-stream__end__	__begin__ztext/part-handlerzpart-handler-%03dz	part-%03dztext/x-include-urlztext/x-include-once-urlztext/x-shellscriptztext/cloud-configztext/cloud-boothookztext/cloud-config-archiveztext/cloud-config-jsonpztext/jinja2text/x-shellscript-per-boottext/x-shellscript-per-instancetext/x-shellscript-per-once)z#includez#include-oncez#!z#cloud-configz#part-handlerz#cloud-boothookz#cloud-config-archivez#cloud-config-jsonpz## template: jinjar   r   r   c                     dt        |       z
  S )Nr   )len)es    =/usr/lib/python3/dist-packages/cloudinit/handlers/__init__.py<lambda>r   >   s    QQZ     )keyc                   D    e Zd ZddZd Zd Zej                  d        Zy)Handlerc                      || _         || _        y N)handler_version	frequency)selfr   versions      r   __init__zHandler.__init__C   s    &"r   c                 T    t        j                  |       d| j                         dS )Nz: [])r   obj_name
list_types)r   s    r   __repr__zHandler.__repr__G   s    '0068IJJr   c                 |    t        | d      st        d      t        | d      D cg c]  }t        |    c}S c c}w )Nprefixesz#Missing prefixes subclass attribute)hasattrNotImplementedErrorgetattrINCLUSION_TYPES_MAP)r   prefixs     r   r!   zHandler.list_typesJ   sF    tZ(%&KLL &dJ7 $F+  s   9c                     t               r   )r&   )r   argskwargss      r   handle_partzHandler.handle_partT   s    !##r   N)   )	__name__
__module____qualname__r   r"   r!   abcabstractmethodr-    r   r   r   r   B   s,    #K 	$ $r   r   )	metaclassc           
         | j                   }|t        k(  s|t        k(  r	|t        k(  sy 	 | j                  }t	        |      }|d   }	 t        j                  d| ||||       |dk(  r| j                  ||||||       y |dk(  r| j                  |||||       y |dk(  r| j                  ||||       y t        d|z        # t
        t        t        f$ r d}Y w xY w# t        $ r" t        j                  t        d| ||||       Y y w xY w)N   Content-Typez1Calling handler %s (%s, %s, %s) with frequency %s   r.   zUnknown module version %sz8Failed calling handler %s (%s, %s, %s) with frequency %s)r   r   r   r   int	TypeError
ValueErrorAttributeErrorLOGdebugr-   	Exceptionr   logexc)	moddatafilenamepayloadr   headersmod_freqmod_vercontent_types	            r   run_partrJ   Y   s$   }}HJ%(l*B%%g, >*L
		?	
 a<OOlHgy' \OOD,'9M\OOD,'B8GDEE1 z>2 2  	
F	
	
s5   C  5C =C C 2C  CC(DDc                 4    dt         i}t        | |d d ||       y Nr8   )CONTENT_STARTrJ   rB   rC   r   rF   s       r   
call_beginrO      s$     	G S$dIw7r   c                 4    dt         i}t        | |d d ||       y rL   )CONTENT_ENDrJ   rN   s       r   call_endrR      s$     	G S$dIw7r   c                    | d   }t         |z  }| d   }t        j                  j                  | d   d|z        }|j	                  d      sd|z  }t        j                  ||d       | d   }	 t        t        j                  |            }	t        |	| d	   |       |j                  |	d
       |dz   | d<   y # t        $ r t        j                  t        d||       Y y w xY w)Nhandlercountr   
handlerdirz%sz.pyz%s.pyi  handlersrC   T)initializedr7   z7Failed at registering python file: %s (part handler %s))PART_HANDLER_FN_TMPLospathjoinendswithr   
write_filefixup_handlerr   import_modulerO   registerr@   rA   r>   )
pdata_ctype	_filenamerE   curcountmodnamer   modfnamerV   rB   s
             r   walker_handle_handlerrg      s    ^$H"h/Gk"Iww||E,/1ABHU#h'OOHgu-Z H
H227;<3fy1 	#40 (1n 
E		

s   -A	B7 7%CCc                     	 t        | t              r| j                  dd      d   }n+| d d|z   j                  d      j                  dd      d   }t	        |      |k\  r|d | }|S # t
        $ r	 | d| }Y |S w xY w)N
r7   r      ignore)errors)
isinstancestrsplitdecoder   UnicodeDecodeError)blobsizestarts      r   _extract_first_or_bytesru      s    dC JJtQ'*E 1t8$++8+<BB4KANEu:%4LE L  QtLs   A$A( (A:9A:c                     	 | j                  d      S # t        t        f$ r& 	 | j                  d      cY S # t        $ r Y Y | S w xY wt        $ r Y | S w xY w)Nstring_escapeunicode_escape)encodeLookupErrorr;   r=   )texts    r   _escape_stringr|      sl    {{?++# 	;;/00 	 K	   	Ks.    A6A	AAAAAc                    |d   }|| j                  d      v rt        j                  d|       y |t        v rt	        | |||       y | d   }||v rt        ||   | d   ||| d   |       y |rSt        |d      }dt        |      z  }|t        k(  rt        j                  d	||       y t        j                  d
||       y t        j                  d|       y )Nr8   excludedzcontent_type "%s" is excludedrV   rC   r      z'%s...'z)Unhandled non-multipart (%s) userdata: %sz0Unhandled unknown content-type (%s) userdata: %szEmpty payload of type %s)
getr>   r?   PART_CONTENT_TYPESrg   rJ   ru   r|   NOT_MULTIPART_TYPEwarning)rC   rD   rE   rF   rI   rV   rt   detailss           r   walker_callbackr      s    >*Ltxx
++		1<@))dL(GDJHx\"L	
 
'4~e45--KK; KKB 			,l;r   c                 T   d}| j                         D ]  }|j                         dk(  r|j                         }|t        }|j	                         }|s	t
        |z  }t        |      }t        j                  |       ||d<   t        j                  |      } |||||       |dz   } y )Nr   	multipartr8   r7   )walkget_content_maintypeget_content_type
OCTET_TYPEget_filenamePART_FN_TPLdictr>   r?   r   fully_decoded_payload)	msgcallbackrC   partnumpartctyperD   rF   rE   s	            r   r   r      s    G
 $$&+5%%'=E$$&"g.Ht*		'"',,T2x'2A+%r   c                     t        | d      st        | dd       t        | d      st        | d|       | S | j                  }|r|t        vrt        j                  d| |       | S )Nr   r7   r   z&Handler %s has an unknown frequency %s)r%   setattrr   r   r>   r   )rB   def_freqfreqs      r   r^   r^     sb    3)*&*3$[(+
 J }}D+KK@#tLJr   c                     	 t        j                  |       j                         }|j	                         }t
        D ]  }|j                  |      st        |   c S  |S # t        $ r |cY S w xY wr   )r   decode_binarylowerrq   lstripINCLUSION_SRCH
startswithr(   )rE   default
payload_lcr{   s       r   type_from_starts_withr   #  su    ''0668
 ""$J -  &&t,,- N  s   #A A,+A,r   )'r2   loggingrY   	cloudinitr   r   r   cloudinit.settingsr   r   r   	getLoggerr/   r>   r   r   rQ   rM   CONTENT_SIGNALSr   rX   r   r(   sortedlistkeysr   ABCMetar   rJ   rO   rR   rg   ru   r|   r   r   r^   r   r4   r   r   <module>r      s     	 0 0 D Dg! ,  (
  +. ** *   %.
((,84'
 $A'H#@! ( 		!	!	#$+?
$ $.-
`88
4$$$<R. !- 		r   