oB]c@sddlZddlZddlmZddlZddlmZddlmZddlmZddlm Z ddlm Z ddl m Z dd l mZdd lmZejeZd ejfd YZdS( iN(tStringIO(tdistros(thelpers(tlog(tssh_util(tutil(tnet_util(t ResolvConf(t PER_INSTANCEtDistrocBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd Zd)dZdZdZdZdZedZdZdZedZedZedZedZedZedZ dZ!dZ"e#dZ$dZ%d Z&e'd!Z(d"Z)d)d#Z*d$Z+d%Z,d)d)d&Z-d'Z.d(Z/RS(*s/usr/local/libs /etc/rc.confs/etc/login.confs/etc/login.conf.origs/etc/resolv.confs,/usr/local/etc/sudoers.d/90-cloud-init-usersthn0cCsTtjj||||tj||_d|_tjd|_ d|ds-ltrcsiisError running %s: %s(RRBR4RR\R;(tcmdtnicsterr((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ifconfig_lists  ! cCsTd|g}tj|dddg\}}t|rPtjd||dS|S(NR>RiisError running %s: %s(RRBR4RR\R;(tifnameRt if_resultR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ifconfig_ifname_out&s  ! cCsWdddg}tj|dddg\}}t|rStjd||dS|S(NR>s-ltetherRiisError running %s: %s(RRBR4RR\R;(RRR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ifconfig_ether/s ! cCsbtj|}xL|jD]>}|jddkrt|jd}|rZ|SqqWdS(Nsether ii(R RR0tfindtstrRD(RRR)tmac((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_interface_mac8s cCstj}|jS(N(R RRD(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_devicelistAs cCsg}tj}xn|D]f}tj|}xN|jD]@}|jddkr;|jddkr;|j|q;q;WqW|S(Nsinet6 itscopeid(R RRR0RRw(tipv6RtnicRR)((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ipv6Fs  *cCstg}tj}x[|D]S}tj|}x;|jD]-}|GH|jj|r;|j|q;q;WqW|S(N(R RRR0RR1Rw(Rtipv4RRRR)((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ipv4Qs  cCstj|}d|}xb|jD]T}tj||r&|jddjdd}|jddkrztSq&q&WdS(Nt^titUPi(R RR0RR1RDRR(RRRtpatR)tflags((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytis_up\s  cCstj}i}x?|D]7}i|d6|j|d6dd6|tj|s(tdictR(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt update_bynames cSs#tjd|d|gdtdS(NR>Rtcapture(RRBR(tcurtnew((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytrenamescSs tjd|dgdtdS(NR>tdownR(RRBR(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyRscSs tjd|dgdtdS(NR>RR(RRBR(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyRss cirename%diRs<[nic not present] Cannot rename mac=%s to %s, not available.Rs*[busy] Error renaming mac=%s from %s to %sRRs2[busy-target] Error renaming mac=%s from %s to %s.iRis(unable to do any work for renaming of %ss$no work necessary for renaming of %ss$achieving renaming of %s with ops %ss.[unknown] Error performing %s%s for %s, %s: %ss ( R4RRRR!tcopyRxRwRR;R]tjoin(Rtrenamest current_infot cur_bymacRRRRRRRtopsterrorstupst cur_bynamet tmpname_fmtttmpitnew_nametcur_nametcur_opstmsgttargetttmp_nametopmaptoptparamsRb((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_rename_interfacesws                       "#     cCsg}xr|jdiD]^}|jddkr:qn|jd}|jd}|sdqn|j||gqW|j|S(Ntconfigttypetphysicalt mac_addressR(RxRwR(RtnetcfgRtentRR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytapply_network_config_namesscCstj}|dkr)tjddS|j}g}x|D]}d|}tj|}xq|jdD]`}tj||rq|jddjdd}|j dd kr|j |qqqqqWqBW|r|}nt t |} tj } | | kr/| j| | jd| nd} d} x3| D]+} tj| }|rB| } |} PqBqBW| r| rigd 6dd 6}|d j id d 6| d6| d6idd 6gd6|SdSdS(NsFail to get network interfacesRs RiRitRUNNINGiRtversionRRRRtdhcptsubnets(R RR;RRRDRRR1RRwtlisttsortedtdefault_primary_nictremovetinsertR(RRtpotential_interfacest connectedRRRR)RRtdefault_pri_nict target_namet target_macRRtnconf((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytgenerate_fallback_configsH              c Csctj|}g}g}|j}x!|jD]\}}|jdrUq4n|j|}tjd||jddkr-tj d||jd|jd|jdd|jd} |j d |jd d |kr |j |d nd |kr3|j |d q3nd } |j d|| q4Wy&t t j|j} | jWn=tk rt jtd|jt d} | jnXxF|D]>} y| j| Wqtk rt jtd| qXqWxF|D]>} y| j| Wqtk r>t jtd| qXqWt j|jt| d|S(NR=sConfiguring interface %st bootprototstaticsConfiguring dev %s with %s / %staddresstnetmasks netmask t defaultroutertgatewaysdns-nameserverss dns-searchtDHCPt ifconfig_s&Failed to parse %s, use new empty filetsFailed to add nameserver %ssFailed to add search domain %si(Rttranslate_networkRR!R@RNRR RxRR,RvRRR/tresolv_conf_fntparseRVR^tadd_nameservert ValueErrortadd_search_domainR#R( Rtsettingstentriest nameserverst searchdomainst dev_namestdeviceR RFR>t resolvconftservertdomain((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_write_networksR            cCs$t}xMtj|jjD]3}|jtjdd|||jdq"Wtj|j|j tj |j|j y*t j d|tjd|jgWnktjk rtjt d|ytj|j |jWq tk rtjt d|jq XnXdS(Ns ^default:sdefault:lang=%s:s sRunning cap_mkdb for %stcap_mkdbsFailed to apply locale %ssFailed to restore %s backup(RRR/t login_conf_fnR0R"RRERtlogin_conf_fn_bakR#R$RRRBtProcessExecutionErrorR^RV(Rtlocaletout_fntnewconfR7((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt apply_localeMs"   cCs|jdrdS|j|}dd|g}tjd||tj|dddg\}}t|rtjd||ndS( NR=s/etc/rc.d/netiftstarts4Attempting to bring up interface %s using command %sRiisError running %s: %s(R@RNRRRRBR4R\(Rt device_nameRFRt_outR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_bring_up_interfacegs  ! cCs!|j|jdd|dS(Ntinstalltpkgs(tupdate_package_sourcestpackage_command(Rtpkglist((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytinstall_packagests cCs|dkrg}ntjj}d|ds