U '¡Dgü ã@s¼UdZddlZddlZddlmZddlmZmZddlm Z ddl m Z ddl m Z ddlmZdd lmZe e¡Zd egegd œZe ed <dd d„Zdd„Zee e eddœdd„ZdS)z%Seed Random: Provide random seed dataéN)ÚBytesIO)ÚsubpÚutil)ÚCloud)ÚConfig)Ú MetaSchema)Ú ALL_DISTROS)Ú PER_INSTANCEZcc_seed_random)ÚidZdistrosZ frequencyZactivate_by_schema_keysÚmetacCsd|sdS|r| ¡dkr"t |¡S| ¡dkr8t |¡S| ¡dkrTtj|dddStd|ƒ‚dS)Nó)Úraw)Úbase64Zb64)ZgzipZgzF)ÚquietÚdecodez Unknown random_seed encoding: %s)ÚlowerrÚ encode_textrZ b64decodeZ decomp_gzipÚIOError)ÚdataÚencoding©rúA/usr/lib/python3/dist-packages/cloudinit/config/cc_seed_random.pyÚ_decode s    rcCsp|s|rtdƒ‚n|s$t d¡dS|d}t |¡s\|rLtdj|dƒ‚nt d|¡dStj||dddS) Nz"no command found but required=truezno command providedrz+command '{cmd}' not found but required=true)Úcmdz'command '%s' not found for seed_commandF)Ú update_envZcapture)Ú ValueErrorÚLOGÚdebugrZwhichÚformat)ÚcommandÚrequiredrrrrrÚhandle_random_seed_command-s    ÿ r!)ÚnameÚcfgÚcloudÚargsÚreturnc Cs| di¡}| dd¡}| dd¡}tƒ}|rF| t|| d¡d¡|jj}|rnd|krn| t |d¡¡| ¡}t |ƒržt   d|t |ƒ|¡t  ||¡| d d¡} | d d ¡} zt | | d |id Wn6tk r} zt  d| | ¡| ‚W5d} ~ XYnXdS)NZ random_seedÚfilez /dev/urandomrr r)rz0%s: adding %s bytes of random seed entropy to %srZcommand_requiredFZRANDOM_SEED_FILE)rr rz'handling random command [%s] failed: %s)ÚgetrÚwriterZ datasourceÚmetadatarrÚgetvalueÚlenrrZ append_filer!rZwarning) r"r#r$r%ZmycfgZ seed_pathZ seed_dataZseed_bufr*rZreqÚerrrÚhandle@s:    ü   ý r.)N)Ú__doc__rZloggingÚiorZ cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.distrosrZcloudinit.settingsr Z getLoggerÚ__name__rr Ú__annotations__rr!ÚstrÚlistr.rrrrÚ s$       ü