o
    f                  
   @   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&   

"