o m[h@sddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z ddl m Z mZddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddlmZmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/e0Z1dZ2dZ3e,e-e.dZ4ddddd Z5e6e7Z8d\d"d#Z9d]d$d%Z:d&d'Z;ed,d-Z?d.e$fd/d0Z@d1d2ZAd^d4d5ZBd_d7e eCe0ffd8d9ZDd:d;ZEdee e0eGfd7e eHe1ffd?d@ZIdAeejJd7e eHe1ffdBdCZKdDdEZLdFdGZMdHdIZNdJdKZOdLdMZPdNejQfdOdPZRdQdRZSdSdTZTd]dUdVZUdWdXZVdYdZZWe7d[kr{eXeUejYdSdS)`N)OptionalTupleCallableUnion)featuresnetinfo)signal_handler)sources)socket)stages) url_helper)util) performance)version)warnings) reporting) atomic_helper) lifecycle)handlers)log_utilloggers)read_cfg_paths)cc_set_hostname)Modules)validate_cloudconfig_schema)log_with_downgradable_level)events) PER_INSTANCE PER_ALWAYSPER_ONCE CLOUD_CONFIGzOCloud-init v. {version} running '{action}' at {timestamp}. Up {uptime} seconds.zcloud_%s_modules)instancealwaysoncez Local Stagez Network Stagez Config Stagez Final Stage) init-localinitmodules-config modules-finalcCsV|r tjd|tjdtjdtjtjdtjdtjddS)N%s z<------------------------------------------------------------ )file)sysstderrwrite traceback print_excmsgr34/usr/lib/python3/dist-packages/cloudinit/cmd/main.pyr0Ts   r0cCs&|st|}tjd|ddtd|S)Nr)FT)consoler-log)welcome_formatr multi_logLOG)actionr2r3r3r4welcome^sr;cCstjttt|dS)N)ruptime timestampr:)WELCOME_MSG_TPLformatrversion_stringr r< time_rfc2822r:r3r3r4r7es r7 Closing stdinloggercCsjttjs/|dttj}t|tjWddS1s(wYdS|ddS)zj reopen stdin as /dev/null to ensure no side effects logger: a function for logging messages rCNz"Not closing stdin, stdin is a tty.)osisattyr,stdinfilenoopendevnulldup2)rDfpr3r3r4 close_stdinns  " rMcCsTg}|jr|jD] }|tj|jq|jr(|jD] }|tj|jq|SN) main_filesappendrEpathrealpathnamefiles)argsfn_cfgsfhr3r3r4 extract_fns}s  rXmodscCsrt|}||\}}t|t|}|dkr,d||f}tjd|t|gStdt|t||S)Nrz)No '%s' modules to run under section '%s'r)zRan %s modules with %s failures)MOD_SECTION_TPL run_sectionlenr,r-r.r9debug)rY action_namesectionfull_section_name which_ranfailurestotal_attemptedr2r3r3r4run_module_sections rdcCs"|drt|ddSdS)Nr)getrupdate_configuration)cfgr3r3r4apply_reporting_cfgs rhcloud-config-urlurlcCs<t|}|D]}||vr|||fSqtd||f)Nz!No keys (%s) found in string '%s')r keyval_str_to_dictKeyError)cmdlinenamesdatakeyr3r3r4parse_cmdline_urls rrTreturnc Cs"|durt}zt|\}}WntytjdfYSw|d}|rMtj |rM|r@d||f}tj }|r|dtd| | tj(krdgfYSddgfYStd| Ynwt?||@}td | |||A| tj(krtB|d!d"d#|j>|d| tj(krt*j+rtC|j:\}}|rtd$|ntd%|tD|j&-dd&|j:j;| krtd'| |j:|j:gfStd(| |j:|E|FtB|d)d*d#z|GjHd+|jItJgtJd,\}}|s-|ItKWntyDttd-|j:d-gfYSw|j&6d.}tj,|rjtL|jMd/krjtNtOPtQ|ddd0d1ntd2t |jtR|t||j d3}z)|}|}t|j|\}}||ks||krtSd4||t|j|\}}Wntyttd5Ynwt|j|TtU|j:|jd6|j:tV|||fS)7Nz%s.dz91_kernel_cmdline_url.cfg)rQrr$r%ds_depsreportercstj|fSrN)rPrrr1 early_logsr3r4szmain_init..#Failed to setup output redirection!@Logging being reset, this logger may no longer be active shortlyr1!PID [%s] started cloud-init '%s'.z0Failed to initialize, likely bad things to come!z .skip-networkz4Will wait for network connectivity before continuingtrustr)checkmanual_cache_cleanFz"manual cache clean set from configmanual_clean_markerz(manual cache clean found from marker: %sexistingz)[%s] Exiting. datasource %s in local modezNo local datasource foundz8No instance datasource found! Likely bad things to come!)bring_upz[%s] Exiting without datasourcezNo instance datasource found.z2[%s] barreling on in force mode without datasourcez5[%s] %s will now be targeting instance id: %s. new=%srr)stage retry_stagezTNetwork connectivity determined necessary for cloud-init's network stage. Reason: %szVNetwork connectivity determined unnecessary for cloud-init's network stage. Reason: %sr(z.[%s] Exiting. datasource %s not in local mode.z6[%s] %s is in local mode, will apply init modules now.zinit-netzmodules:config consume_data)rUfreqzConsuming user data failed! cloud_configrT)configstrict log_detailslog_deprecationsz2Skipping user-data validation. No user-data found.rz#Stdout, stderr changing to (%s, %s)z'Failed to re-adjust output redirection!)rrg)Wr DEP_FILESYSTEM DEP_NETWORKrrrErQrr r7r Initrread_cfgrXskip_log_setuprMr fixup_outputrgget_output_cfgrlogexcr9r0rPrrr]r reset_logging setup_loggingrhr;rgetppidr6 initializerr DSMODE_LOCALDSMODE_NETWORKrMANUAL_NETWORK_WAITr get_runpathdistrowait_for_networkr,r-r.r debug_inforrrrfetchrdsmodeDataSourceNotFoundExceptionforceapply_network_config_maybe_persist_instance_data instancifyis_new_instance_maybe_set_hostnamerrsetup_datasourceupdatecloudifyrunrrrstatst_sizerrrrrwarningactivate_datasourcedi_report_warnrd)rSrUdepsbootstage_namew_msgr%outfmterrfmtr2lvl path_helperrrmcfgmfilebring_up_interfacesiid should_waitreasonran_resultscloud_cfg_pathrY outfmt_orig errfmt_origr3rr4 main_initsZ                                      r)cCsd|vr tddS|d}|durtddSt|ts'td|dS|d}|dur7tddSt|tsDtd|dS|jdd }| t j r\|t t j d}ntd ||||vrqtd |||dSt jd ||t|d dS)N di_reportzno di_report found in config.zdi_report was None.z%di_report config not a dictionary: %sdatasource_listz(no 'datasource_list' found in di_report.z(di_report/datasource_list not a list: %s.rvz1Datasource '%s' came from unexpected module '%s'.z:used datasource '%s' from '%s' was in di_report's list: %sdsid_missing_source)rdslist)r9r]rrrrelist __module__ rpartitionrr DS_PREFIXr\r show_warningr)rrgdicfgr.modnamer3r3r4rsH           rcCsZ|j}d||f}t|}tjg|jd}|t|z|jddWn tj yDd|}t t |t ||jsB|gYSYnwt|t|t||jd}z|jsatt |j|Wntyqt t dYnw|jr~t dt|jst|jt|jt||d t d t||d krtj d d ddt!|||S)Nz%s:%srrrzGCan not apply stage %s, no datasource found! Likely bad things to come!rrrr1rr%z `--mode init`24.1Use `cloud-init init` instead.)rrr)"rr7r rrrrXrr rr rr9r0rr rrrMrrgrr]rrrrhr;rrErrrrd)r^rUrSrrr%r2rYr3r3r4 main_modulessZ         r8c Cst|j}t|}tjg|jd}|t|z|jddWntj y8t t dt d|js6YdSYnwt|t|t||jd}|j}|rRt d||j}|rbt d|t|}z tt |jdWnty}t t d Ynw|jrt d tt|jt|jt||d ||||\}} | rt d |dS|st d |dSdS)Nrrrz;Failed to fetch your datasource, likely bad things to come!rzrzUsing passed in arguments %szUsing passed in frequency %srrr1zRan %s but it failed!zDid not run %s, does it exist?r)!rSr7r rrrrXrr rr rr9r0rr r module_argsr] frequencyFREQ_SHORT_NAMESrerMrrgrrrrrhr; run_singler) rSrUmod_namerr%rYmod_argsmod_freqrarbr3r3r4 main_single s`           r@c Cst}|d}tj|j}tj|d}tj|d}tj|d}tj|d}t} t ||f|j \} } |dkrH|j rEd} nd} n|dkrRd|j } ntd|| tvrctd | giddd } d d| | | | d i}| dkr||||fD]}t |qnz tt |}Wn tyYnw| |d vr| |d | <|d }| |d <|| dr|| dstdt| tt || d<ttdd| j}|}t ||t j!tj"|||ddzz,| ||}| dvr|\}}|durt#||d<n|}|| d$dd|DWn\tyO}zt%d| t&d| || d't#|WYd}~n7d}~wt(y}z&|j)rwt%d| t&d| || d'dt#|j)dWYd}~nd}~wwWtt || d<d|d <|}|*|+D]&}||vrt,t-|||||| d|<q|||| d|<qt ||nHtt || d<d|d <|}|*|+D]&}||vrt,t-|||||| d|<q|||| d|<qt ||w| dkrWg}|+D]}t.||t/r;||0dr;|$||0dgqt |d |d|d it j!tj"|||ddt1|| dS)!Nrpz status.jsonz result.jsonr%r$modules modules-%szunknown name: %sz'Invalid cloud init mode specified '{0}')errorsrecoverable_errorsstartfinishedv1)rr%r$r&r'rrErFz=Unexpected start time found for %s. Was this stage restarted?cSs t|tjSrN)rr LogExporter)hr3r3r4rs z status_wrapper..T)r)r%r$rrCcSsg|]}t|qSr3)r).0rr3r3r4 sz"status_wrapper..zfailed stage %szfailed run of stage %sz sys.exit(z) calledrDr')rrC)2rrrErQnormpathrun_dirrr getLoggerr ensure_dirsr:rr ValueError STAGE_NAMEr?copydel_filejsonloadsrrr9rfloatr<rfilterr export_logsr write_jsonsym_linkrelpathrextend exceptionr0rP SystemExitr clean_logskeysr/setrrrer\)rSrUrdata_dlink_d status_path status_link result_path result_link root_logger_namefunctorr nullstatusstatusfrGhandlerpreexisting_recoverable_errorsretrrCrnew_recoverable_errorsrqrr3r3r4status_wrapperQs                 "          rrr%cCsB|jr|jr|jd}tj|s|jjdddSdSdSdS)zCWrite instance-data.json file if absent and datasource is restored. instance_dataF) write_cacheN)r ds_restoredrrrErQrpersist_instance_data)r%instance_data_filer3r3r4r s   r c Cs~|}tj|j|dd\}}}|r=z td|j|dWdStjy<}ztd||t |WYd}~dSd}~wwdS)zCall set_hostname if metadata, vendordata or userdata provides it. @param stage: String representing current stage in which we are running. @param retry_stage: String represented logs upon error setting hostname. T) metadata_only set_hostnameNzGFailed setting hostname in %s stage. Will retry in %s stage. Error: %s.) rr get_hostname_fqdnrgrhandleSetHostnameErrorr9r]r)r%rrcloudhostname_fqdn_rr3r3r4r s" r cCs tjdttjddS)Nr*)r,stdoutr.rsortedrFEATURES)rSrUr3r3r4 main_features s rc Cst|s tj}tj|dd}|jddddt dd|jd d d d d d|jdddddt dd|jdd ddd d|jddd dd d|j dd|j dd d!}|j d"d#d$}|jd%d&d d'd d|jdddd(d)t dd|j d"tfd*|j d+d,d$}tjd-d.d/d0d1j}|jd2d3d4d5|d6d7d8|jdddd(d)t dd|j d+tfd*|j d9d:d$}|jd;d|jd?d4d@d ttdA|jdBd dCd d>|jdDdEdFdGdH|jdddd(d)t dd|j d9tfd*|j dIdJd$}|j dKdLd$}|j dKtfd*|j dMdNd$} |j dOdPd$} |j dQdRd$} |j dSdTd$} |j dUdVd$} |j dWdXd$}|rtdYdZ|Dd}|dMkrYdd[lm}|| n|dOkridd[lm}|| n|dQkrdd\lm}m}|| d]| j dQ|fd*nm|dSkrdd^lm}m}|| | j dS|fd*nS|dIkrdd_l m}m!}|||j d`|fd*n9|dWkrddal"m}m#}|||j dW|fd*n|dUkrddbl$m}m%}|| | j dU|fd*n|&dc|j'|dd}t(|ded |j)st*|St)|S)fNr)progz --versionz-vrz %(prog)s z'Show program's version number and exit.)r:rhelpz--debugz-d store_truez:Show additional pre-action logging (default: %(default)s).F)r:rdefaultz--filez-frPrOzPUse additional yaml configuration files for subcommands: init, modules or singlerb)r:destrtypez--forcezDForce running even if no datasource is found (use at your own risk).r)r:rrrz --all-stages all_stageszsRun cloud-init's stages under a single process using a syncronization protocol. This is not intended for CLI usage.)rr:rrr Subcommands subcommand)titlerr%z2Initialize cloud-init and perform initial modules.)r--localz-lz+Start in local mode (default: %(default)s).rTz(Use additional yaml configuration files.rBrAz1Activate modules using a given configuration key.z`init`r6r7Tr~z--modez-mstorez9Module configuration name to use (default: %(default)s). r)r%rfinal)r:rrchoicessinglezRun a single module.z--namez-nzModule name to run.)r:rrequiredz --frequencyzModule frequency for this run.)r:rrrz--reportzEnable reporting.r9*argumentz0Any additional arguments to pass to this module.)nargsmetavarrqueryz;Query standardized instance metadata from the command line.rzList defined features.analyzez-Devel tool: Analyze cloud-init logs and data.develzRun development tools.z collect-logsz*Collect and tar all cloud-init debug info.cleanz3Remove logs and artifacts so cloud-init can re-run.rlz/Report cloud-init status or wait on completion.schemaz-Validate cloud-config files using jsonschema.css|] }|ds|VqdS)-N)r)rJposargr3r3r4 szmain..) get_parser)rhandle_collect_logs_args)parser)rhandle_clean_args)r handle_argsrender)rhandle_schema_args)rhandle_status_argsza subcommand is requiredrUr)+rconfigure_root_loggerr,argvargparseArgumentParserpop add_argumentrr@FileType set_defaultsadd_subparsers add_parserr)rrmessager8r/r;r`r@rrcloudinit.analyzercloudinit.cmd.devel.parsercloudinit.cmd.devel.logsrcloudinit.cmd.cleanrcloudinit.cmd.queryrcloudinit.config.schemarcloudinit.cmd.statusrerror parse_argssetattrrsub_main) sysv_argsr subparsers parser_init parser_mod extra_help parser_single parser_queryparser_featuresparser_analyze parser_develparser_collect_logs parser_clean parser_status parser_schemaranalyze_parser devel_parser logs_parserr clean_parserr query_parserhandle_query_args schema_parserr status_parserrrUr3r3r4mains                       rcCstdtdddd}td|d|jddgd }d |_t||_Wd n1s1wY|d|jdgd }d |_t||_Wd n1sTwY|d|jd dgd }d |_t||_Wd n1sxwY|d|jd dgd }d |_t||_Wd n1swY|j rd}|j rd|j }td|dtddStdtdd S)z>Run all stages in a single process using an ordering protocol.z*Running cloud-init in single process mode.rrrrzREADY=1r%rrFNTrAz --mode=configz --mode=finalz%a stage of cloud-init exited non-zerozfirst exception received: zSTATUS=Completed with failure, z2. Run 'cloud-init status --long' for more details.z STOPPING=1rzzSTATUS=Completed) r9rr SocketSync sd_notifyrrrsystemd_exit_codeexperienced_any_errorfirst_exception)rsyncrUrr3r3r4r sD              rc Csz|j\}}|dvrt|jrtjntjn|jrttd|ks.d|kr0d|j kr0t }d}d}|dkrE|j r@d\}}n0d\}}n+|dkrUd|j d|j }}n|d krhd |j d |j }}|j }n|}d |}d }tj|||d|_|j&td|d |||}Wdn1swYWdn1swYtd|krd|j krt|}|S)N)r%rAr%rAT)r$zsearching for local datasources)z init-networkz!searching for network datasourcesrBzrunning modules for %srz single/%szrunning single module %szrunning 'cloud-init %s'F)reporting_enabledzcloud-init stage: '')r:rsetup_basic_loggingr]rrrrattach_handlersrrrrrSreportrReportEventStackrrTimedr flush_eventsr\)rUrSrjrname report_onrdescretvalr3r3r4rGsR    r__main__)r(rN)ri)TN)ZrrTrEr,r/rrtypingrrrr cloudinitrrrr r r r r rrrrrrr cloudinit.logrrcloudinit.cmd.develrcloudinit.configrcloudinit.config.modulesrrrcloudinit.lifecyclercloudinit.reportingrcloudinit.settingsrrrr rReasonr>rZr;rQrN__name__r9r0r;r7timedr]rMrXrdrhrrintrrrbytesboolr DataSourcerr)rr8r@rrrr r rrrrexitrr3r3r3r4s                        m  ;  %y2AF ~; E