3 cj :@sdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z ddl m Z mZmZmZmZmZmZddlmZmZddlmZddlmZdd lmZdd lmZmZm Z d Z!ej"Gd d d ej#Z$e$j%e$j&e$j'e$j(iZ)e$j&e$j%e$j(e$j'iZ*ej"Gdddej#Z+e,e+j-e+j.e+j/e+j0gZ1GdddeZ2dZ3d"ddZ4e5dddZ6ee+e7fdddZ8ee$dddZ9d#eee2dddZ:dd Z;e|jdkrttj|ddddn|jdkrttj||jtj krdS|jt!j"krdSdS)z4Handle calls to 'cloud-init status' as a subcommand.r=.g?)r9r3r2extended_statusZdetailr6r7r8 zstatus: z last_update: )rLprefixZ boot_coder5r8z errors:z -  z recoverable_errors:cSs.g|]&\}}|ddjdd|DqS)z: - z - cSsg|]}|jddqS)rMrP)replace).0ir%r%r& sz1handle_status_args...)join)rRkvr%r%r&rTsz&handle_status_args..r<T,: )indentZ sort_keysZ separatorsr>r)rYrZ)#rget_status_detailswaitr2rrrr#formatsysstdoutwriteflushrr9r3valueUXAppStatusDegradedMapCompatgetr5r6r7r8r:printZlongTABULAR_LONG_TMPLrUitemsr<dumpsr r!UXAppStatusDegradedMapvalues)nameargspathsZdetailsZ details_dictrOstater8r%r%r&handle_status_argss^       D &  rqcCstj}tstj}d}nd|kr0tj}d}ntjj|rNtj }dj |}nd|krbtj }d}ndtj j ddkstrdtjd d gjkrtj}d }nRtjjtjj|jd rtj}d }n.tjjtjj|jdrtj}d}n tj}d}||fS)a Report whether cloud-init current boot status @param disable_file: The path to the cloud-init disable file. @param paths: An initialized cloudinit.helpers.Paths object. @returns: A tuple containing (code, reason) about cloud-init's status and why. zCloud-init enabled on sysvinitzcloud-init=enabledz..=)rt)rRrr%r%r&rT)sz'_get_systemd_status..Z UnitFileStatersZstaticZ ActiveStateZactiveZSubStateZexitedrZMainPID0ZfailedN)r|r}r~r)rradict splitlines startswithrr!r)ZserviceraZstatesr%r%r&_get_systemd_statuss0    r)rorJc Csf|pt}tj}g}d}i}tjj|jd}tjj|jd}tt|\}}|t krXtj }tjj |rtjj |svtj }t t|jdi}d} i} x0t|jD]\} } | dkr| rtj }dj| }q| dkr| d kr| }q| }| jd \} }}| jjdd}qt| tr|j| jd g| jd p2d}| jd pBd}| jdi}x@|jD]4}|| krzt||| |<n| |j||qZW|dkr|dkrtj }t||}|| kr|} qW|rtj}n|tjkr| dkrtj}tr|tjtj fkrt}|r|}| r.t dt!| nd}| rDt"j||}|j#dd t$||||| |||S)zReturn a dict with status, details and errors. @param paths: An initialized cloudinit.helpers.paths object. Values are obtained from parsing paths.run_dir/status.json. rNz status.jsonz result.jsonr:rZstagezRunning in stage: {0}r9NrPr6startfinishedr7z%a, %d %b %Y %H:%M:%S %z)%rrrrurvrUryr{CLOUDINIT_DISABLED_FILEDISABLED_BOOT_CODESr$rwrrrrfsortedrir_ partitionlowerrQ isinstancerextendkeysrmaxr!r rrrrrkpopr1)ror2r6r9Z status_v1Z status_fileZ result_filer3r5Z latest_eventr7keyrdZds_rrZcurrent_recoverable_errorsZerr_typeZ event_timeZsystemd_statusr8r%r%r&r]Gs              r]cCst}tjtd|jdS)z$Tool to report status of cloud-init.r2N)rIr`exitrq parse_args)rHr%r%r&mainsr__main__)N)N)=rrEenumr<rur`copyrZtimerrrZtypingrrrr r r r Z cloudinitr rZcloudinit.cmd.develrZcloudinit.distrosrZcloudinit.helpersrZcloudinit.utilrrrruniqueEnumrrr#r r"rkrer' frozensetr)r*r+r,rr1rhrIintrqr4r{rr]rrr%r%r%r&sJ $         (`+4b