oB]c@sddlZddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z e j eZdd d d d d gZddddddddgZddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,gZd-Zd.Zed/Zd0Zd1Zd2Zd3Zd4ejfd5YZded6Zdd7ZdS(8iNi(t ParserError(trenderer(tsubnet_is_ipv6(tlog(tutilspre-uptupspost-uptdownspre-downs post-downt bridge_ageingtbridge_bridgepriot bridge_fdt bridge_gcinitt bridge_hellot bridge_maxagetbridge_maxwaitt bridge_stptaddresstnetmaskt broadcasttnetworktmetrictgatewayt pointtopointtmediatmtuthostnamet leasehourst leasetimetvendortclienttbootfiletserverthwaddrtprovidertframetnetnumtendpointtlocaltttlc Csg}ddddddddd d g }x|jD]\}}|dkrUq7n|dkr|d |d|d f}n|r7||kr7t|tkrd j|}nd|kr|jdd}n|jdj||q7q7Wt|S(NRRRRRt pointopointRtscopet dns_searchtdns_nameserverss%s/%stprefixt t_t-s {0} {1}(titemsttypetlisttjointreplacetappendtformattsorted(tifacetsubnettcontentt valid_maptkeytvalue((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyt_iface_add_subnet%s.     c Cs|dkrgSg}dddddddd d g }d d d g}idd6}|d dkrs|jdnx0|jD]"\}}t|tkr||rdnd}n| s||krqn|dkr|r||krtjd|d||qqn||krYx3|D]+} |jdj|j||| q$Wqnt|tkr}dj |}n|jdj|j|||qWt |S(Nitcontrolt device_idtdrivertindextinettmodetnametsubnetsR/tbridge_pathcosttbridge_portpriotbridge_waitportt hwaddresst mac_addresstbondtbridget infinibandtvlantontoffRsZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.s {0} {1}R+(RJRKRLRM( R3R.R/tbooltLOGtwarningR4tgetR0R1R5( R6R@tipv4_subnet_mtuR8t ignore_maptmultiline_keystrenamesR:R;tv((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyt_iface_add_attrsCsJ       ))cCs|d}|d}|dkr)d}n#|d krBd|}n d|}|j}|ji|d6|d6d j|d j|g}|r|jd r|jd j|n|S(NRCR=tautothotplugsallow-s # control-tfullnametcverbs{cverb} {fullname}siface {fullname} {inet} {mode}RIs hwaddress {mac_address}(R[(tcopytupdateR4RSR3(R6R@trender_hwaddressR\R=R]tsubsttlines((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyt_iface_start_entry|s         c Csd }x|jD]}|j}|jdr:qn|jd}|d}|dkr|d}|jdstjj||}nx/tj|D]} tj | } g| D]T} tjj tjj| | rt j d| d k rtjj| | ^q} xi| D]a} t | d} | jj}Wd QXtjj| }t||tjj||qWqWq|d kr>|d}|jdstjj||}nxtj|D]a} t | d} | jj}Wd QXtjj| }t||tjj||qWq|d krxu|dD]4}||kr{i|d 6||d|dsR`s s ( titer_interfacesRSR^tdeepcopyR)R1tdns_searchdomainsRRR5t iter_routesR3R( Rt network_stateR`RR6Rnt searchdomainsRRts((Rs5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyt_render_interfacess:   cCstj||j}tjtjj||jr@|jnd}tj|||j ||j rtj||j }tjtjj|tj||j |ndS(NRp( Rt target_pathRt ensure_dirR|R}RRt write_fileRRt_render_persistent_net(RRt templatesttargettfpenitheadertnetrules((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pytrender_network_states  N( t__name__t __module__t__doc__RwRRRRRR(((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyRRs   2 A /cCsrd}tdi|d6|d6dd6}|s9d}n|jdsU|d7}n|j|d|}||S( Nsetc/network/interfacesRRRRRps R`(RRwtendswithR(RRR`RRR((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pytnetwork_state_to_eni s    cCswdddg}ddg}x-|D]%}tj|d|d|s"tSq"Wtj|d}tjj|sstStS( Ntifquerytifuptifdowns/sbins /usr/sbinRmRsetc/network/interfaces(RtwhichRRR|R}RR(RtexpectedRmtpteni((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyt availables  (R^R~R|RRpRRRRt cloudinitRtloggingRt getLoggerRRQRRRR<RYRRcRRRRRRwRR(((s5/usr/lib/python2.7/site-packages/cloudinit/net/eni.pyts4       9   *