(KXc@szddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z ddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZejeZ e!Z"de#fdYZ$de#fdYZ%dZ&dS(iN(t PER_INSTANCEt FREQUENCIESt CLOUD_CONFIG(thandlers(t boot_hook(t cloud_config(t shell_script(t upstart_job(tcloud(tconfig(tdistros(thelpers(timporter(tlog(tsources(t type_utils(tutiltInitcBsXeZd dZedZedZedZdZ edZ dZ e dZ dZd Zd d Zd Zd Zd ZdZdZdZd dZdZdZdZdZdZdZdZd dZdZ dZ!d dZ"e#dZ$e#dZ%e#dZ&RS(!cCsU|dk r||_ntjtjg|_d|_d|_d|_t|_ dS(N( tNonetds_depsRtDEP_FILESYSTEMt DEP_NETWORKt_cfgt_pathst_distrotNULL_DATA_SOURCEt datasource(tselfR((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt__init__7s     cCs1d|_d|_d|_|r-t|_ndS(N(RRRRRR(Rtreset_ds((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_resetCs    cCs|js|jd}|jdd}tj|}tjd|||||j|_|jt k r|j|j_ ||j_ qn|jS(NtsystemtdistrotubuntusUsing distro class %s( Rt _extract_cfgtpopR tfetchtLOGtdebugtpathsRRR tsys_cfg(Rt system_configt distro_namet distro_cls((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR Ks cCs |jdS(Nt restricted(R"(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pytcfg\scCs|jtj|j}|dkr;|jddnH|dkr_tj|di}n$|dkrtj|di}nt|t si}n|S(NR,t system_infoRR'(R.(R.spaths( tread_cfgtcopytdeepcopyRR#RRtget_cfg_by_patht isinstancetdict(Rt restrictiontocfg((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR"`s     cCs:|js3|jd}tj||j|_n|jS(NR'(RR"R tPathsR(Rt path_info((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR'os c Cs|jj}|tjj|dtjj|ddtjj|ddtjj|ddtjj|ddtjj|dtjj|dtjj|dtjj|d tjj|d g }|S( Ntscriptss per-instancesper-oncesper-boottvendortseedt instancesRtsemtdata(R't cloud_dirtostpathtjoin(Rtc_dirt initial_dirs((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_initial_subdirsvs cCs]g}|j|jj|r5|j|jjnx|D]}tj|q<Wt|S(N(tappendR't boot_finishedt instance_linkRtdel_filetlen(Rtrm_instance_lnktrm_listtf((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt purge_caches cCs|jdS(N(t_initialize_filesystem(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt initializescCstj|jtj|jd}tj|jd}|rtj||rtj|\}}ytj|||Wqtk rtj t d|||qXqndS(Nt def_log_filetsyslog_fix_permss9Unable to change the ownership of %s to user %s, group %s( Rt ensure_dirsREtget_cfg_option_strR-t ensure_filetextract_usergroupt chownbynametOSErrortlogexcR%(Rtlog_filetpermstutg((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyROs   cCs(|jdkr$|j||_ndS(N(RRt _read_cfg(Rt extra_fns((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR/sc CsFtji|j}tjd|d|jd|dt}|jS(NR'Rtadditional_fnstbase_cfg(R R7Rt ConfigMergertfetch_base_configR-(RR_t no_cfg_pathstmerger((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR^s   cCs|jjd}d}ytj|}Wntk r>nX|sIdSytj|SWn%tk rtjt d|dSXdS(Ntobj_pkls#Failed loading pickled blob from %s( R't get_ipath_curRRt load_filet ExceptiontpickletloadsRYR%(Rt pickled_fntpickle_contents((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_restore_from_caches  cCs|jtkrtS|jjd}ytj|j}Wn(tk retj t d|jtSXytj ||ddWn%tk rtj t d|tSXt S(NRfsFailed pickling datasource %stmodeis Failed pickling datasource to %s( RRtFalseR'RgRjtdumpsRiRRYR%t write_filetTrue(RRlt pk_contents((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_write_to_caches  cCsv|jjdpg}x9dtjtgD]"}||kr.|j|q.q.W|jjdpig}||fS(Ntdatasource_pkg_listttdatasource_list(R-tgetRtobj_nameRRF(Rtpkg_listtntcfg_list((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_get_datasourcess  cCs|jtk r|jS|j}|r;tjd|n|s|j\}}tj|j|j |j t j |j ||\}}tjd||n||_|j|S(Ns#Restored from cache, datasource: %ssLoaded datasource %s - %s(RRRnR%R&R~Rt find_sourceR-R R'R0R1RtinfoR(RtdsR}R{tdsname((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_get_data_sources"    cCs dddgS(NRR9R=((R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_get_instance_subdirsscCs+|jj|}|s'tdn|S(NsCNo instance directory is available. Has a datasource been fetched??(R't get_ipatht RuntimeError(Rtsubnamet instance_dir((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt _get_ipathsc Cs|j}tj|jjtj||jjg}x0|jD]"}|jtj j ||qHWtj ||jj d}dt j|j|jf}d}tj j |d}ytj|j}Wntk rnX|s|}ntj|d|tjtj j |dd||jj}d} tj j |d} ytj| j} Wntk rnX| s|} ntj| d|tjtj j |dd| |j|S(NR>s%s: %sRs%s sprevious-datasources instance-idsprevious-instance-id(RRRIR'RHtsym_linkRRFR@RARBRSt get_cpathRRzRRRhtstripRiRrtget_instance_idR( Rtidirtdir_listtdtdpRt previous_dstds_fntiidt previous_iidtiid_fn((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_reflect_cur_instancesD          cCs |jS(N(R(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR$3scCs |jS(N(R(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt instancify6scCs1tj|j|j|j|jtj|jS(N(RtCloudRR'R-R R tRunners(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pytcloudify9s  cCs(|jsdS|j|jdS(N(Rut_store_userdatat_store_vendordata(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pytupdate?s  cCsbd|jj}tj|jd|dd|jj}tj|jd|ddS(Ns%st userdata_rawituserdata(Rtget_userdata_rawRRrRt get_userdata(Rtraw_udt processed_ud((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyREscCsbd|jj}tj|jd|dd|jj}tj|jd|ddS(Ns%stvendordata_rawit vendordata(Rtget_vendordata_rawRRrRtget_vendordata(Rtraw_vdt processed_vd((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyRKscCsp|dkri}n|ji|jd6|jd6tj|tj|tj |t j |g}|S(NR'R( RRR'Rtcc_parttCloudConfigPartHandlertss_parttShellScriptPartHandlertbh_parttBootHookPartHandlertup_parttUpstartJobPartHandler(Rtoptst def_handlers((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_default_handlersQs       cCs |jS(N(R(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_default_userdata_handlersbscCs|jdidd6dd6S(NRtvendor_scriptst script_pathtvendor_cloud_configtcloud_config_path(R(R((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_default_vendordata_handlerses  c sT|d krg}n|jjd}|jdx?|gD]1}|rC|tjkrCtjjd|qCqCWfd}tj||x?|D]7}j |dt } | rt j d| |qqW|j fd} fd} fd} z| | |Wd | Xd S( sb Generalized handlers suitable for use with either vendordata or userdata Rics| stjj| rdStj|}x|jD]\}}ytj|dgddg}|stj d||w:ntj |d}t j |}j |}|rtjd||nWq:tk rtjtd|q:Xq:WdS(NRwt list_typest handle_parts<Could not find a valid user-data handler named %s in file %sis#Added custom handler for %s from %ss"Failed to register handler from %s(R@RAtisdirRt find_modulest iteritemsR t find_moduleR%twarnt import_moduleRt fixup_handlertregisterR&RiRY(RAtpotential_handlerstfnametmod_nametmod_locstmodttypes(t c_handlers(s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pytregister_handlers_in_dir~s*      t overwrites$Added default handler for %s from %scsYxRjD]D\}}|jkr.q ntj|jj|q WdS(N(Rt initializedRt call_beginRF(t_ctypeR(RR>t frequency(s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt init_handlerss csMid6d6d6d6dd6|d6}tjtjd|dS(NRt handlerdirR>Rit handlercounttexcluded(Rtwalktwalker_callback(Rt part_data(RR>tdata_msgRR(s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt walk_handlerss cszxsjD]e\}}|jkr.q njj|ytj|Wq tjtd|q Xq WdS(NsFailed to finalize handler: %s(RRtremoveRtcall_endRRYR%(RR(RR>R(s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pytfinalize_handlerssN(RR'RRtsysRAtinsertR tContentHandlersRRpR%R&R( RRtc_handlers_listRRtcdirRRRRRRR((RR>RRRs=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt _do_handlersjs,        cCs(|j||j||jdS(N(t_consume_userdatat_consume_vendordataR(RR((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt consume_datas  c Cs |jjs tjddStjd|jd|jdgd|jdt}|jj di}t |t sitd 6}tj d |n|j d }|j d d}tj|stjd dStjd ||jj}|j}|j|||d|dS(sH Consume the vendordata and run the part handlers on it sno vendordata from datasourceNR'RR`Ratinclude_vendort vendor_datatenableds/invalid 'vendor_data' setting. resetting to: %stdisabled_handlerss#vendordata consumption is disabled.s2vendor data will be consumed. disabled_handlers=%sR(RRR%R&R RbRR-RpRyR3R4RRRtis_trueRRR(RRt _cc_mergertvdcfgRt no_handlerstvendor_data_msgR((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyRs.        cCs5|jjt}|j}|j|||dS(s@ Consume the userdata and run the part handlers N(RRRsRR(RRt user_data_msgR((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyRs N('t__name__t __module__RRRpRtpropertyR R-R"R'RERsRNRPROR/R^RnRuR~RRRRR$RRRRRRRRRRRRR(((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR6s@            2          j  ,tModulescBsVeZddZedZdZdZdZdddZ dZ RS(cCs||_||_d|_dS(N(tinitt cfg_filesRt _cached_cfg(RRR((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR"s  c Csg|jdkrWtjd|jjd|jjd|jd|jj}|j|_nt j |jS(NR'RR`Ra( RRR RbRR'RRR-R0R1(RRe((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR-(s  cCsg}||jkr|S|j|}x|D]}|s?q-nt|ttfrq|ji|jd6q-t|tri}t|dkr|dj|dg}tj|}|s\q n|r|tkrtjd||d}ntj|dt j tgdg}|stjd|q ntj tj |d} |j | |||gq W|S( NRRRs6Config specified module %s has an unknown frequency %sRwthandlesCould not find module named %si(RyR tform_module_nameRR%RRR RRRzt fixup_moduleRRF( Rtraw_modst mostly_modstraw_modtraw_nameRtrun_argsRRR((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt_fixup_modulesbs*       c Cs|jj}g}g}x|D]\}}}}yy|sI|j}n|tkr^t}n||j|tj|g} |j|d|} |j | |j | d|Wq"t k r} t j td|||j|| fq"Xq"W||fS(Ns config-%sRsRunning %s (%s) failed(RRRRRR-R R%RFtrunRRiRRY( RR tcctfailurest which_ranRRRRt func_argstrun_namete((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt _run_moduleszs$       cCs@i|d6|d6|d6}|g}|j|}|j|S(NRRR(RR(RRRRt mod_to_beR R ((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt run_singles  c Cs|j|}|j|}|jjj}g}g}|jjdg}x|D]\}} } } t|j} | j tj j |j | sU|| krqUn| |kr|j | qU|j | qUW|rtjd||n|r tjd|n|j|S(Ntunverified_moduless}Skipping modules %s because they are not verified on distro '%s'. To run anyway, add them to 'unverified_modules' in config.srunning unverified_modules: %s(RRRR RR-RytsetR RtDistrotexpand_osfamilyt osfamiliesRFR%RR( Rt section_nameR R td_nametskippedtforcedt overriddenRRt_freqt_argstworked_distros((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyt run_sections*   N( RRRRRR-RRRRR&(((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyR!s  -   cCs|g}tj}tj}|rC|jtj|din|jtjt|ro|j|ntj|S(Ntdefault(Rtget_builtin_cfgtread_cc_from_cmdlineRFt load_yamltread_conf_with_confdRt mergemanydict(t base_cfgst default_cfgt kern_contents((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyRcs  ('tcPickleRjR0R@Rtcloudinit.settingsRRRt cloudinitRtcloudinit.handlersRRRRRRRRRR R R R R tloggingRRRt getLoggerRR%RRtobjectRRRc(((s=/opt/freeware/lib/python2.7/site-packages/cloudinit/stages.pyts0