o
    x[hü  ã                
   @   sÄ   U d 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d	lmZ e e¡Zd
egeg dœZeed< ddd„Zdd„ Zdedede	deddf
dd„ZdS )z%Seed Random: Provide random seed dataé    N)ÚBytesIO)ÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROS)ÚPER_INSTANCEÚcc_seed_random)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetac                 C   s`   | sdS |r|  ¡ dv rt | ¡S |  ¡ dv rt | ¡S |  ¡ dv r*tj| dd d�S td| ƒ‚)Nó    )Úraw)Úbase64Úb64)ÚgzipÚgzF)ÚquietÚdecodez Unknown random_seed encoding: %s)Úlowerr   Úencode_textr   Ú	b64decodeÚdecomp_gzipÚIOError)ÚdataÚencoding© r   úA/usr/lib/python3/dist-packages/cloudinit/config/cc_seed_random.pyÚ_decode    s   

r!   c                 C   sl   | s|rt dƒ‚| st d¡ d S | d }t |¡s,|r$t dj|d�ƒ‚t d|¡ d S tj| |dd� d S )	Nz"no command found but required=truezno command providedr   z+command '{cmd}' not found but required=true)Úcmdz'command '%s' not found for seed_commandF)Ú
update_envÚcapture)Ú
ValueErrorÚLOGÚdebugr   ÚwhichÚformat)ÚcommandÚrequiredr#   r"   r   r   r    Úhandle_random_seed_command-   s   


ÿr,   ÚnameÚcfgÚcloudÚargsÚreturnc              
   C   sú   |  di ¡}|  dd¡}|  dd¡}tƒ }|r#| t||  d¡d�¡ |jj}|r7d|v r7| t |d ¡¡ | ¡ }t	|ƒrOt
 d| t	|ƒ|¡ t ||¡ |  d	d ¡}	|  d
d¡}
zt|	|
d|id� W d S  ty| } z	t
 d|	|¡ |‚d }~ww )NÚrandom_seedÚfilez/dev/urandomr   r   r   )r   z0%s: adding %s bytes of random seed entropy to %sr*   Úcommand_requiredFÚRANDOM_SEED_FILE)r*   r+   r#   z'handling random command [%s] failed: %s)Úgetr   Úwriter!   Ú
datasourceÚmetadatar   r   ÚgetvalueÚlenr&   r'   Úappend_filer,   r%   Úwarning)r-   r.   r/   r0   ÚmycfgÚ	seed_pathÚ	seed_dataÚseed_bufr9   r*   ÚreqÚer   r   r    Úhandle@   s>   üý€þrD   )N)Ú__doc__r   ÚloggingÚior   Ú	cloudinitr   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.distrosr   Úcloudinit.settingsr	   Ú	getLoggerÚ__name__r&   r   Ú__annotations__r!   r,   ÚstrÚlistrD   r   r   r   r    Ú<module>   s&   
ü
"