a '¡Dgüã@sêUdZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z ddl mZddlmZd Zd Zd Ze e¡Zd d gedgdœZeed<ee e eddœdd„Zdd„Zdeeedœdd„Zdd„Zdd„Z dd„Z!dS)z"Write Files: write arbitrary fileséN)ÚOptional)Ú url_helperÚutil)ÚCloud)ÚConfig)Ú MetaSchema)Ú PER_INSTANCEi¤Fz text/plainZcc_write_filesÚallÚ write_files)ÚidZdistrosZ frequencyZactivate_by_schema_keysÚmeta)ÚnameÚcfgÚcloudÚargsÚreturncCsP| dg¡}dd„|Dƒ}|s.t d|¡dSt |j¡}t|||jj|ƒdS)Nr cSsg|]}t |dt¡s|‘qS)Zdefer)rÚget_cfg_option_boolÚ DEFAULT_DEFER)Ú.0Úf©rúC/usr/lib/python3.9/site-packages/cloudinit/config/cc_write_files.pyÚ $sþzhandle..zESkipping module named %s, no/empty 'write_files' key in configuration) ÚgetÚLOGÚdebugrZfetch_ssl_detailsÚpathsr ZdistroZ default_owner)r rrrZ file_listZfiltered_filesÚ ssl_detailsrrrÚhandle"s þý rcCsf|sd}| ¡ ¡}|dvr"dgS|dvr2ddgS|dvr@dgS|tkrNtgS|r`t d|t¡tgS)NÚ)ÚgzÚgzipúapplication/x-gzip)z gz+base64z gzip+base64zgz+b64zgzip+b64úapplication/base64)Zb64Úbase64z%Unknown encoding type %s, assuming %s)ÚlowerÚstripÚTEXT_PLAIN_ENCrÚwarning)Z encoding_typerrrÚcanonicalize_extraction4s$ ýr))Úownerrc Csì|sdSt|ƒD]Ö\}}| d¡}|s:t d|d|¡qtj |¡}t| dd¡|| dd¡| dd¡ƒ}|durˆt d|d|¡qt  | d|¡¡\}} t | d ¡t ƒ} t  |d ¡r¾d nd } tj ||| | || d �t ||| ¡qdS)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; skippingr*Z permissionsÚappendÚabÚwb)ÚomodeÚmodeÚuserÚgroup)Ú enumeraterrr(Úosr+ÚabspathÚread_url_or_decoderZextract_usergroupÚ decode_permsÚ DEFAULT_PERMSrZ write_fileZ chownbyname) r Úfilesr*rÚiZf_infor+ÚcontentsÚuÚgZpermsr3rrrr Ms@ ý    üü ÿc Cs°|dur |Sz,t|ttfƒr&t|ƒWStt|ƒdƒWSWnrttfyªg}||fD]8}z| d|¡WqVtyŒ| d|¡YqV0qVtjdg|¢RŽ|YS0dS)Néz%oz%rz0Undecodable permissions %s, returning default %s) Ú isinstanceÚintÚfloatÚstrÚ TypeErrorÚ ValueErrorr0rr()ZpermÚdefaultZrepsÚrrrrr;us   r;cCs¢|dur dn | dd¡}t|ƒ}|dur0|s0dSd}|r€z"tj|| dd¡dd|d�j}Wn$ty~t td|¡d}Yn0|durž|sžt |ƒ}t ||ƒ}|S)NZurirÚheadersé)rKZretriesZ sec_betweenrzVFailed to retrieve contents from source "%s"; falling back to data from "contents" keyF) rÚboolrZread_file_or_urlr?Ú ExceptionrZlogexcrr)Úextract_contents)r-rr.r/ÚurlZuse_urlÚresultZ extractionsrrrr:Šs2  û  ü   r:cCsH|}|D]:}|dkr&tj|ddd�}q|dkr:t |¡}q|tkrq|S)Nr"F)ÚquietÚdecoder#)rZ decomp_gzipr$Z b64decoder')r?Zextraction_typesrQÚtrrrrO¯s rO)N)"Ú__doc__r$Zloggingr8ÚtypingrZ cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.settingsrr<rr'Z getLoggerÚ__name__rr Ú__annotations__rFÚlistrr)Údictr r;r:rOrrrrÚs0      ü(%