f'ZdZddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZddlmZdd lmZmZdd lmZdd lmZmZmZmZmZd ZGd de ZeddeddeddgZeddeddeddeddeddedd ed!d"ed#d$ed%d&ed'd(ed)d(ed*d+g Zd,e fd-Z!d,e fd.Z"d;d/Z#d0Z$d1Z%d2Z&d3Z'd4Z(d5Z)dr?)argparseArgumentParser add_argumentr1format)parseruser_data_files r get_parserrH^s ((C        # * )*N    &&,f^&<  Mrcdg}tjdk7r'|jtijd|S)z>Return a list of files to ignore for /run/cloud-init directoryzhook-hotplug-cmdrinstance_data_sensitive)osgetuidappendrlookups)curdirfiles ignored_filess r_copytree_rundir_ignore_filesrRsB M yy{aU2Y../HIJ rc0ttjj| t |j }t ||td|zd||S#t$r/}t |t|td|zd|Yd}~yd}~wwxYw)CHelper which runs a command and writes output or error to filename. collected %s collecting %s failed. N) rrKrdirnamer stdoutr_debugr r)cmdfilenamemsgr;outputes r_write_command_output_to_filer`srwwx()c!! 8V$#%q)4 !>8SV$(3.9==>sA B&%BBc^ttjj| t |d5}t j |||dddtd|zd|y#1swYxYw#t$r/}t|t|td|zd|Yd}~yd}~wwxYw)rTw)rYstderrNrUrVrW) rrKrrXopen subprocesscallrZOSErrorrr)r[r\r]r;fr_s r_stream_command_output_to_filerisrwwx()5 (C  5A OOC! 4 5 #%q)4  5 5 >8SV$(3.9==>s. A4A(A4(A1-A44 B,=%B''B,cN||kr tjj|yyN)sysrcwrite)r]levelr;s rrZrZs!  rctjj|rt||t d|zd|yt d|zd|y)Nzcollected file: %s rVzfile %s did not exist )rKrisfiler rZ)rout_dirr;s r _collect_filerss@ ww~~d T7%,a;(4/I>rctD]h}t||jzj}|j st t |t|jt ||j|rrtD]h}t||jzj}|j st t |t|jt ||jyy)z'Obtain subiquity logs and config files.N) INSTALLER_APPORT_FILESrrparentexistsrrrs INSTALLER_APPORT_SENSITIVE_FILES)log_dirinclude_userdatar;src_filedestination_dirs rcollect_installer_logsr}s*Fw67>>%%' s?+ ,hmmS%99E F 8 JH"7X]]#:;BBO"))+3/0 (--_)=y I  Jrrzc b|r7tjdk7r tjj dyt g}tj j|}tjjjd}td5}tj j||}tdd gtj j|d d | }tgd tj j|dd| }|s|r|nd}td|t!d|zd|t#dgtj j|dd| t#gdtj j|dd| |j%t'|j(D]}t+||||rt-} t+| ||t/|||tj j|d} t1| tj j3t4rT t7j8t4tj j| dt:t!dt4zd|nt!dt4zd|tj j3tj jt4d rWtAtC} | j3r4t7j8t?| tA|t?| ztE|5tGd!d"||jI|d#zd$gddddddtjj d%|zy#t6j<$rU} tjj dtjj t?| dzYd} ~ d} ~ wwxYw#1swYxYw#1swYxYw)&zCollect all cloud-init logs and tar them up into the provided tarfile. @param tarfile: The path of the tar-gzipped file to create. @param include_userdata: Boolean, true means include user-data. rzMTo include userdata, root user is required. Try sudo cloud-init collect-logs rV)ds_depszcloud-init-logs-%Y-%m-%dz/tmp)dir cloud-initz --versionversionzcloud-init --version)r[r\r]r;)z dpkg-queryz--showz-f=${Version} rz dpkg-versionz dpkg versionz not-availablez version: z!collected cloud-init version: %s dmesgz dmesg.txtz dmesg output) journalctlz--boot=0z-oz short-precisez journal.txtzsystemd journal of current bootrun)ignorez(Failed collecting file(s) due to error:  Nzcollected dir %s zdirectory '%s' did not exist disabledtarczvf/z Wrote %s )%rKrLrlrcrmrrabspathrutcnowdatestrftimer joinr`printrZriread_cfgrcfgrsr1r}rrwCLOUDINIT_RUN_DIRshutilcopytreerRErrorrrr5r r replace) tarfilerzr;initrytmp_dirrdpkg_verlogrGrun_dirr_cloud_data_dirs r collect_logsrsK BIIK1,  2   Dggoog&Goo$$&//0JKG V CO'',,w0/{+WW\\'95&   1IWW\\'>:   "*hG k7#3g=q)L& WW\\';7  'AWW\\'=91   &txx0 3C #w 2 3 02N .'9 =w(8)D'',,w.7 77>>+ , 0%GGLL,78 '*;;Q J 03DD  77>>"'',,'8*E F!"6"89N$$&'3~#6677^ O %'//'C-*LM N OECOHJJ\G+, +<< 0   !LM   Q$// 0$ O OECOCOsQ"F+P%>N. C P%#P;P%.PA P P%PP%P" P%%P.cXt|j|j|jS)z:Handle calls to 'cloud-init collect-logs' as a subcommand.)rrrAr;)nameargss rhandle_collect_logs_argsr&s  dmmT^^ DDrcJt}td|jS)z4Tool to collect and tar all cloud-init related logs.r7)rHr parse_args)rFs rmainr+s \F #NF4E4E4G HHr__main__rk)r)0__doc__rBrKrrerlrpathlibrtypingrcloudinit.cmd.develrcloudinit.helpersrcloudinit.stagesrcloudinit.subpr r cloudinit.temp_utilsr cloudinit.utilr r rrrrrrxrurr1r5rHrRr`rirZrsr}boolrrrrexitrrrrsN  .#!6(& 24I"$568:MN $ @(K79O79O6 D:BDBG" 9=I5}E9;GC"J/S/ #c# +\  5 ? JU DU pE I  z CHHTVr