ó i'dWc@s@dZddlZddlZddlZddljZddlmZddlm Z ddl m Z ddl m Z ddl mZmZddlmZmZdd lmZmZdd lmZdd lmZdd lmZdd lmZddlmZd„Z d„Z!d„Z"de#fd„ƒYZ$dS(s archiveadm info iÿÿÿÿN(tetree(t attrgetter(t OptionGroup(turlparse(t_t SetUIDasEUID(tUnifiedArchivetLOGFILE(tverify_credentialst ArchiveError(t InstallEngine(tES_DATA_EXCEPTION(tINSTALL_LOGGER_NAME(tTarget(tSizecCs tdƒS(s8Initialize and return usage string for 'info' subcommands‰ info [-p|--parsable | -t|--targets] [-k|--key ] [-c|--cert ] [-C|--ca-cert ] [-v|--verbose] (R(((sinfo.pyt get_usage1sc Cst|ddƒ}|jdddddddtd ƒƒ|jd d dddd dtd ƒƒ|jdddddddtdƒƒ|jdddddddtdƒƒ|jdddddddtdƒƒ|jdddddddtdƒƒ|j|ƒdS( sSet up the optionssRetrieve Archive Informations-ks--keytactiontstoretdesttkeythelpsPrivate key filename for HTTPS.s-cs--certtcerts"Client certificate file for HTTPS.s-Cs --ca-certtcacertsCA certificate file for HTTPS.s-ps --parsablet store_truetparsablesPrint easily parsable strings.s-ts --targetsttargetss:Output ai_manifest(4) target XML for archive origin systems-vs --verbosetverbosesReport verbose information.N(RtNonet add_optionRtadd_option_group(tparsertgroup((sinfo.pyt setup_options<s      c Cs tjtƒ}|jdƒ|d}|jrM|jrMttdƒƒ‚n|js_|j r‡|j on|j r‡ttdƒƒ‚nt |dd ƒ}|j d krQt jj|ƒ}t jj|ƒsåttdƒ|ƒ‚nt jj|ƒrttdƒ|ƒ‚ntƒ3t j|t jƒsHttdƒ|ƒ‚nWd QXnxld d d gD][}t||ƒ}|d k rat jj|ƒ rattd ƒi|d6|d6ƒ‚qaqaWt|j|jgƒr'y&t|jƒ|j|j |jƒWq'tk r#ttdƒƒ‚q'Xntjƒ}|jddddi|d6|jd 6|j d 6|jd 6ƒ|jƒ\}} |tjkrp| j ƒ} d } t!} xtt"j#| ƒD]c} |jd| ƒ| j$t%}|jd|ƒt&|t'ƒr|} nt&|t(ƒrºt)} qºqºW| r6tdƒ‚qp| d k rWtt|ƒƒ‚qpttdt*ƒƒ‚n|j+j,j-dt.ƒ}t/||ƒ}|GHd S(s-archiveadm(1m) info subcommand implementationsarchiveadm: run_infois@archiveadm info: 'parsable' and 'targets' are mutually exclusives,archiveadm info: key and cert must be pairedtschemesarchiveadm info: %s not founds"archiveadm info: %s is a directorys archiveadm info: %s not readableNRRRs3archiveadm info: %(cred)s file '%(file)s' not foundtcredtfiles$archiveadm info: invalid credentialstInstantiateUnifiedArchives#solaris_install/archive/checkpointstkwargstpaths%s checkpoint faileds%sts)Archive query failed, see %s for details.t class_type(0tloggingt getLoggertILNtdebugRRt SystemExitRRRRRR!tosR&tabspathtexiststisdirRtaccesstR_OKtgetattrtanyRRtgeturlt RuntimeErrorR t get_instancetregister_checkpointtexecute_checkpointst EXEC_SUCCESStpoptFalseterrsvctget_errors_by_mod_idt error_dataR t isinstanceR tKeyboardInterrupttTrueRtdoctvolatiletget_first_childRtUnifiedArchiveInfo(toptionstargstloggerR&turiR"t cred_filetenginetstatust failed_cpstfailuret archive_errortcontrolcterrtetuat archive_info((sinfo.pytrun_infoPst  % "             RGcBs#eZdZdd„Zd„ZRS(sšProvides formatted output for archiveadm.info based upon the UnifiedArchive passed in. Once initialized, the object may be printed directly. cCs…t|tƒstdƒ‚n||_|rf|jp9d|_|jpKd|_|j p]d|_ nd|_d|_d|_ dS(s Construct an info object. Arguments: ua An instance of UnifiedArchive options An optional options object s#'ua' passed not UnifiedArchive typeN( RARt ValueErrort_uaRRt _parsableRt_targetsRt_verbose(tselfRURH((sinfo.pyt__init__¬s   cCsJ g}t|jjƒ}dttdƒttdƒ|ƒƒkr—x?t|ƒD]1\}}|jjdkrO|j|ƒ}PqOqOW|j d|ƒni}x|D]}i}d}x|j D]} || j 7}qÀW||dt&}ddddg}d}|d|jj'7}|d|jj(7}|d|jjdj)j*7}|d|jjdj)j+7}|jr>t}|j,dddgƒ|d|jj-dkr dnd7}|d|jj.7}|d|jj/7}nE|j,dgƒ|ddj0ttdƒttdƒ|ƒƒƒ7}d}x|D]}|d|7}qW|j1|ƒ|j1|ƒ|r1ddddd dd!d"g}d#}x|D]}|d|7}qóW|j1|ƒx|D] }|jj}||jjd}d$}|d|7}|d|j)j2j37}|d|j47}|d|jj57}|dt |ƒd7}|d|j.7}|j6dLksß|jj5dMkrì|dN7}n|d|j6j7}|d|j7rdnd7}|j1|ƒqWnd(j0|ƒSi}t8d)ƒ|d*ƒd.ƒ|d?tlxmlRtoperatorRtoptparseRRtsolaris_installRRtsolaris_install.archiveRRtsolaris_install.archive.utilRR tsolaris_install.engineR R tsolaris_install.loggerR R+tsolaris_install.targetR tsolaris_install.target.sizeRRR RWtobjectRG(((sinfo.pyts(     U