܍~c LddlZddlZddlZddlZddlmZmZddlmZ ddlm Z m Z ddl m Z mZddlmZmZmZmZmZddlmZe jeZgdZdd Zd Zd ZGd dZGddeZGddeZ Gddej!Z!dZ"ddZ#dS)N)MappingOptional)log)subputil)networkmanager_conf resolv_conf)IPV6_DYNAMIC_TYPESis_ipv6_addressnet_prefix_to_ipv4_maskrenderersubnet_is_ipv6) NetworkState) almalinuxcentos cloudlinux eurolinuxfedora miraclelinux openEuler openmandrivarhelrockysuse virtuozzo#cddg}tdt|D]!}||r|dz||z||<|||<"d|S)NzBCreated by cloud-init on instance boot automatically, do not edit.r  )rangelenjoin)seplinesis 9/usr/lib/python3/dist-packages/cloudinit/net/sysconfig.py _make_headerr(&sqL  E1c%jj ! ! 8 Sy58+E!HHE!HH 99U  c2d}|ddko |d|vS)N)z::z0.0.0.0prefixrnetwork)route default_netss r'_is_default_router03s%$L ?a  DE)$4 $DDr)ctjd|r1|dr|dr|Sd|zS|S)Nz\s"z"%s")research startswithendswith)values r' _quote_valuer88sS y   C  "U^^C%8%8 "LE> ! r)cXeZdZdZdddZdZdZdZdZd Z d Z d Z d Z d Z dZdS) ConfigMapz!Sysconfig like dictionary object.yesno)TFci|_dSN_confselfs r'__init__zConfigMap.__init__Ls  r)c||j|<dSr>r?)rBkeyr7s r' __setitem__zConfigMap.__setitem__Os 3r)c|j|Sr>r?rBrEs r' __getitem__zConfigMap.__getitem__Rsz#r)c6|j|Sr>)r@getrHs r'rKz ConfigMap.getUsz~~c"""r)c||jvSr>r?rHs r' __contains__zConfigMap.__contains__Xsdj  r)c<|j|ddSr>)r@poprHs r'dropzConfigMap.drop[s sD!!!!!r)c*t|jSr>)r"r@rAs r'__len__zConfigMap.__len__^s4:r)cdS)z6Skip the pair key, value if it matches a certain rule.Fr-rBrEvals r'skip_key_valuezConfigMap.skip_key_valueasur)c@tj}|t|jr|dt |jD]}|j|}|||r&t|tr |j |}t|tst|}||dt|d| S)Nr =)ioStringIOwriter(r@sortedkeysrV isinstancebool _bool_mapstrr8getvalue)rBbufrEr7s r' to_stringzConfigMap.to_stringeskmm ,..!!! :  IIdOOO$*//++,, > >CJsOE""3.. %&& .u-eS)) #E  II333 U(;(;(;(;< = = = =||~~r)c:|j|dSr>)r@update)rBupdatess r'rfzConfigMap.updateus '"""""r)N)__name__ __module__ __qualname____doc__r`rCrFrIrKrMrPrRrVrdrfr-r)r'r:r:Cs++I    ###!!!""" #####r)r:cbeZdZdZfdZdZedZedZdZ d dZ xZ S) Routez!Represents a route configuration.ctt|d|_d|_d|_||_||_||_||_ dS)NF) superrmrClast_idxhas_set_default_ipv4has_set_default_ipv6 _route_name_base_sysconf_dirroute_fn_tpl_ipv4route_fn_tpl_ipv6)rB route_namebase_sysconf_diripv4_tplipv6_tpl __class__s r'rCzRoute.__init__|s\ eT##%%% $)!$)!%!1!)!)r)ct|j|j|j|j}|j|_|j|_|j|_|j |_ |Sr>) rmrtrurvrwr@copyrqrrrs)rBrs r'r~z Route.copysb     "  "  "    *//##] !%!:!%!:r)c0|j|j|jdzSN)basename)rvrurtrAs r' path_ipv4zRoute.path_ipv4#%+T5E F F  r)c0|j|j|jdzSr)rwrurtrAs r' path_ipv6zRoute.path_ipv6rr)c d|vS)N:r-)rBaddresss r' is_ipv6_routezRoute.is_ipv6_routes g~r)ipv4c |dvrtdt|ztj}|t |jr|dd}t|jD]0}d|vr| dd}t|j|}t|jd|z}|dkrE| |s/t|jd |z}|d z}|dt|zd t|d|dt|zd t|d|d t|zd t|dd |z} | |jvrUt|jd |z} |d t|zd t| d|d kr| |rtt|jd|} d |z|jvr dt|jd |zznd} ||d| d|d| d|j d 2| S)N)ripv6zUnknown protocol '%s'r ADDRESSrGATEWAYrNETMASKrorXMETRICrPREFIXzmetric /z via rz dev ) ValueErrorrarYrZr[r(r@r\r]replacerr8rtrb) rBprotorcreindexrEindex address_value gateway_value netmask_value metric_key metric_value prefix_values r'rdzRoute.to_strings ( ( (4E CDD Dkmm ,..!!! :  IIdOOO$*//++,,5 5 C##KK 2..E 300M 9u+< =>>Mt'9'9-'H'H #DJy5/@$A B B !A+  3w<<///m1L1L1L1LN  3w<<///m1L1L1L1LN  3w<<///m1L1L1L1LN&- ++#&tz(U2B'C#D#DLII#c'll222L4N4N4N4NP&T%7%7 %F%F"4:.>u.>.>#?@@  %'4:55DJx%/?$@ A AAA  & $ % $ (((    ||~~r))r) rhrirjrkrCr~propertyrrrrd __classcell__r|s@r'rmrmys++*****     X   X BBBBBBBBr)rmceZdZdZddddddZ dfd Zed Zejd Zed Z e jd Z edZ ddZ dZ xZ S) NetInterfacezERepresents a sysconfig/networking-script (and its config + children).EthernetBondBridge InfiniBandVlan)ethernetbondbridge infinibandvlanrctt|g|_||_|jd}t |||d|d|_|jd|_||_ ||_ ||j d<||_ dS)Nroute_templatesrr)rzr{iface_templatesDEVICE) rprrCchildren templatesrKrmroutes iface_fn_tplkind _iface_namer@ru)rB iface_nameryrr route_tplr|s r'rCzNetInterface.__init__s lD!!**,,, "N&&'899   ]]6**]]6**     !N../@AA %) 8!1r)c|jSr>)rrAs r'rzNetInterface.names r)c(||_||jd<dS)Nr)rr@)rBrs r'rzNetInterface.name s%) 8r)c|jSr>)_kindrAs r'rzNetInterface.kinds zr)cn||jvrt|||_|j||jd<dS)NTYPE) iface_typesrrr@)rBrs r'rzNetInterface.kinds? t' ' 'T"" " !-d3 6r)c0|j|j|jdzSr)rrurrAs r'pathzNetInterface.paths" +TY ? ?  r)Fct|j|j|j|j}|j|_|rt|j|_|r|j |_ |S)N)r) rrrurrr@r~listrr)rB copy_children copy_routescs r'r~zNetInterface.copy sx  It-t~DJ   *//##  -dm,,AJ  *{''))AHr)c"|dkr|dkrdSdS)NrrTFr-rTs r'rVzNetInterface.skip_key_value+s &==SF]]4ur))r)FF)rhrirjrkrrCrrsetterrrr~rVrrs@r'rrsOO" K=G222222(  X  [**[*X [44[4   X    r)rceZdZUdZddddddddd Zd d d d dddddddddd ZegdZiZe e d<d)dZ e dZ e dZe dZe dZe dZe dZe d Zed)d!Zed)d"Ze d#Ze d$Ze d)d%Z d*d&edee d'dfd(ZdS)+Rendererz7Renders network information in a /etc/sysconfig format.TFnone)ONBOOTUSERCTL NM_CONTROLLED BOOTPROTOstaticauto)r STARTMODE)rrIPV6_FORCE_ACCEPT_RASTPAGEINGPRIOHWADDRMTU) accept-ra bridge_stp bridge_ageingbridge_bridgeprio mac_addressmtu BRIDGE_STPBRIDGE_AGEINGTIMEBRIDGE_PRIORITYLLADDR)rrrrr)) bond_modezmode=%s)bond_xmit_hash_policyzxmit_hash_policy=%s) bond_miimonz miimon=%s)bond_min_linksz min_links=%s)bond_arp_intervalzarp_interval=%s)bond_arp_ip_targetzarp_ip_target=%s)bond_arp_validatezarp_validate=%s)bond_ad_selectz ad_select=%s)bond_num_grat_arpznum_grat_arp=%s)bond_downdelayz downdelay=%s) bond_updelayz updelay=%s)bond_lacp_ratez lacp_rate=%s)bond_fail_over_maczfail_over_mac=%s) bond_primaryz primary=%s)bond_primary_reselectzprimary_reselect=%srNc|si}|dd|_|dd|_|dd|_d}|d||_|d |d |d d |_|d d|_dS)N sysconf_dirz etc/sysconfig netrules_pathz(etc/udev/rules.d/70-persistent-net.rulesdns_pathzetc/resolv.confz,etc/NetworkManager/conf.d/99-cloud-init.confnetworkmanager_conf_pathcontrolrr)rrrflavorr)rKrrrrrr)rBconfig nm_conf_paths r'rCzRenderer.__init__ns F!::m_EE#ZZ G   :/@AA E (. & ) ) %zz),,%zz*;<<%zz*;<<   jj622 r)cxtj|j|i}||dD]Q}||}|8|dkr |ddvr*|j||}|r|||<Rd|vr|dr|ddkr d|d<dSdSdSdS) N)rrrrtype)physicalr wakeonlanrzwol g ETHTOOL_OPTS)r~deepcopyiface_defaultsrKrf cfg_key_maps)clsiface iface_cfgrflavor_defaultsold_key old_valuenew_keys r'_render_iface_sharedzRenderer._render_iface_shareds-(:(>(>vr(J(JKK))): 3 3G '**I$m++f F11*6266w??3)2Ig& 5 k" !f ++(/In % % % ! ++r)c  |dkr$d|d<d|vrd|d<|dnd|d<t|t|jD]U\}}d}|d }|d ks|d krR|dkr|dd krd|d<nd |d<d |d<n|dkr|d krd|d<d|d<d|d<d|d<nd|d<d|d<n|dkr:|dkr|dd krd|d<nd |d<d|d<nd|d<d|d<d|d<d|d<no|dkr0|dkr|dd krd|d<nd |d<d|d<nEd|d<d|d<n9|dvr&|d} d|d<|dkr|d kr | d krd |d<n|dvrt |r |dkrd}d|d<d|vrt ||vo|d||k} | r.td|j |||dt |r|dkrn|d||<n |d||<t |r|dkr d|d<d|d<nK|d kr*|dkrt d!|n#||v|d"<ntd#|d$|j d%|d&d kr|dkrd |d'<Pd|d"<Wd(} d(} t|t|jD]\}}|d }d)|vr|dkr |d)|d*<|d+vr|dkr|r|ddkrd|d,<N|tvrX|dvrt |rk| d-z} |d.d/|d0} | d1kr|dkr| |d2<n| |d3<n| d-kr|dkr| |d4<nn| |d5<nh|dkr | |d6| z<nY|d5xxd7| zz cc<nE| d-z} | d1krd8nt| }|d.|d9|z<t|d0|d:|z<d;|vr7|dkr1d|d<<t|d;r |d;|d=<n |d;|d><d?|vr$|dkrd7|d?|d@<dA|vr|dkrt|dAdBkr4t dC|j t|dAt|dAddBd-D]\}}||dDt|z<dS)ENrrrBRIDGEdhcprstartrrdhcp6zipv6_dhcpv6-statefuldhcp4managedDHCLIENT6_MODErTDHCPV6CIPV6INITF IPV6_AUTOCONFzipv6_dhcpv6-statelessinfoz-SDHCPV6C_OPTIONS ipv6_slaac)rr)rstatic6IPV6_MTUrzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.rmanualz Unknown subnet type setting "%s"rzUnknown subnet type 'z' found for interface ''rrrmetricrrrDHCLIENT_SET_DEFAULT_ROUTErorrr+rIPADDR6IPV6ADDR IPADDR6_1IPV6ADDR_SECONDARIESz IPADDR6_%drrIPADDRrgatewayDEFROUTEIPV6_DEFAULTGWr dns_searchDOMAINdns_nameserversz6%s has %d entries in dns_nameservers. Only 3 are used.DNS)rP enumerater"rrKrr_LOGwarningrdebugrr rar r r#)rrsubnetshas_default_routerr&subnetmtu_key subnet_type bootproto_in mtu_mismatch ipv4_index ipv6_index ipv6_cidrsuffks r'_render_subnetszRenderer._render_subnetssa V  %-Ik "9$$)/ +&x(((%+Ik "#7#i6H2I2IJJJu 0u 0IAvG **V,,Kg%%8N)N)NV## -8817 +..29 +.2;I.//f$$8N)N)N-3Ik*+/Ii(,0Ij)16Io..,0Ij)+/Ii(( 777V## -8817 +..29 +.28I.//,0Ij)26Io.+/Ii(48I/00 ,,V## -8817 +..29 +.28I.//,0Ij)15Io.. 111(5 )/ +&V## w(>(>$w..18 +. 555"&))1f.>.>(G,0Ij)F??#'9,@"5MYw-??$$L$ J%N%g."5M &f--;!V++!17Ig..-3E] '*!&))7f.>.>8=I4516Io.((V##II@+NNNN+2Y*>Ih'' j"{{INNN4zz)$$00V##-5Ik***/Ih'  "7#i6H2I2IJJJ@ 6@ 6IAv **V,,K6!!V##*0*:Ih'///V##(HY{-Cv-M-MBG ">? 222 555!&))!+aJ+1)+<+<+N>N OI!Q!V++3Ik22@II&<==!V++CLIlZ&?@@%&<=== #i====",aJ!+q22c*ooD17 1BIho.2Ix(33Ii$./&&6V+;+;,0Ij)&vi'899A6.>*-((6,3G*H*HIh'$..6V3C3C6"345599 /%N'8 9::  !*&1B*CBQB*G K K66145 %#a&&.11A@ 6@ 6r)c|dkrdSt|t|jD]H\}}|d}|dgD]}|dpt |d} t |r|t vr|dr|js|dr|jrtd|j zd |d <|d d vrd |d <d|vr'| r|d|d<d |_n|d|d<d |_d|vr |d|d<dD]\} } | |vr| |j } || || < |xj dz c_ JdS)Nrrrrrr)rz?Duplicate declaration of default route found for interface '%s'Tr*rr"r#r+rr!r))r)r)r!r)r+r)netmaskr)r,rro) r1r"rrKr r0r rrrsrrrq) rr route_cfgr5r_r7r9r.is_ipv6r new_namer s r'_render_subnet_routeszRenderer._render_subnet_routescs V   F"7#i6H2I2IJJJ5 ,5 ,IAv **V,,KHb113 ,3 , **V,,)$11&e,,,,#+=== 6**/8/M 6**09/M )=@IP-1Ij) -1BBBBF ">? E))"B:? :JI&67=AI::383CIi0=AI:5((.3Ho (+ . @ @)#e++)1&G93E&G&GG16wIg.&&!+&&&g3 ,5 ,5 ,r)cg}|jD]y\}}||ddg}|D]Y}||vrS||}t|ttfrd|}|||znZz|r:|dkrd||d<dSd||d<dSdS)NrE-rrBONDING_MODULE_OPTS BONDING_OPTS) bond_tpl_optsrr^tuplerr#append) rrrr bond_optsbond_key value_tpl bond_keys bond_values r'_render_bonding_optszRenderer._render_bonding_optss %(%6   !Xy!8#3#3C#=#=>I%  u$$!&xJ!*udm<<:%(XXj%9%9 $$Y*%=>>>E %  @ 4788I3F3F /000 -0HHY,?,? .))) @ @r)ctj}||D]d}|d}|dg}||}|j} ||||j|||| ||edS)Nrr5)r filter_by_physicaliter_interfacesrKrrAr6rH) r network_stateiface_contentsrphysical_filterrr iface_subnetsrrDs r'_render_physical_interfacesz$Renderer._render_physical_interfacess#5"22?CC  EvJ!IIi44M&z2I!(I   /      % %9mV      r)cvtjd}tjd}||D]x}|d|}|||||g}||j|D]} d| d<|dkrd| _|dr7|dkr|d|d<n|d|d <|d g} |j } | || |j || || | |tfd ||D} t| D]>\} }|dkrd | z}nd | z}|||<||}|dkr d|d<d|d<4|d<d|d<?zdS)Nr bond-masterrTBONDING_MASTERrrrMACADDRr5c8g|]}|dk|dS)r_rr-).0 slave_ifacers r' z4Renderer._render_bond_interfaces..s=##=1Z??  '@??r)zBONDING_SLAVE_%szBONDING_SLAVE%srrhotplugrMASTERSLAVE)r filter_by_typefilter_by_attrrXrUextendrrrKrrAr6rHr\r1)rrYrZr bond_filter slave_filterrr master_cfgs master_cfgr\rD bond_slavesr bond_slaveslavestr slave_cfgrs @r'_render_bond_interfacesz Renderer._render_bond_interfacessR-f55 .}== "22;??9 .9 .EvJ&z2I  $ $Yv > > >%+K   y1 2 2 2) - - /3 +,V##&,JOyy'' DV##*/))M*B*BIh''+099]+C+CIi(!IIi44M!(I   /      % %9mV    !'4'D'D$((K&/{%;%; . .!zV##1E9HH058H&0 (#*:6 V##-3Ik*-6Ik***4Ih')-Ig&& .Y9 .9 .r)c rtjd}||D] }|d}||}|dkr=|d}|r||d<|d|d|d<ncd|d <d|_|d } t | |d} || vr0td || d | | |d <|dg} |j } | || |j || || | | dS)Nrrrvlan_idVLAN_ID. ETHERDEVICETVLANzvlan-raw-devicezIName '%s' for vlan '%s' is not officially supportedby RHEL. Supported: %srPHYSDEVr5)r rirXrKrfindr_supported_vlan_namesr2rr#rrAr6rH) rrYrZr vlan_filterrrrrvrdev supportedr\rDs r'_render_vlan_interfacesz Renderer._render_vlan_interfacess-f55 "22;??" " EvJ&z2I))I..3+2Ii(+56M 8H8H8M8M6M+N -(($( &!!' ./1$i8HII Y..HH1"++ (, )$!IIi44M!(I   /      % %9mV    A" " r)ctt|jt|jgsdSt jd}|rEt j|r&t jtj |}|jD]}| ||jD]}| |td}t|}||s|dz|z}|S)Nr;r )anyr"r.dns_searchdomainsr ResolvConfosrisfiler load_fileadd_nameserveradd_search_domainr(rar5)rYexisting_dns_pathcontent nameserver searchdomainheader content_strs r' _render_dnszRenderer._render_dns7sM122M344     4(,,  P0A!B!B P!,T^ > > w<<1  4gg|~~tTYYw}}-G-GNOO r)cd|j|D}tjd}||D]}|d}||}|dkrd|_|D]\} } | |vr || || <|dkr$d|vr |drd|d<nd|d<|dr"d } |dkrd } |d|| <|dkrD|d gr.d d |d z|d<|d gD];} || } | g}|| j |D]}|}|dkrd}||d<<|dg}|j }| |||j || ||||dS)NcDi|]\}}|d||S)r)r5)rcold_knew_ks r' z6Renderer._render_bridge_interfaces.._sB   u)) 5   r)rrrronoffrra LLADDRESS bridge_portsz%sr BRIDGE_PORTSr;rr5)ritemsr rirXrrKr#rkrrrAr6rH)rrYrZrbridge_key_map bridge_filterrrrr r rEbridged_iface_name bridged_cfg bridged_cfgs bridge_cfg bridge_valuer\rDs r'_render_bridge_interfacesz"Renderer._render_bridge_interfaces]s  # 0 8 > > @ @    !/99 "22=AA2 2 EvJ&z2I!) $2$8$8$:$: 8 8 e##).wIg&9,, }}\22826 ,//27 ,/yy'' :V##%C!&=!9!9 #99^R0004sxx .11881In-',ii&C&C 8 8"--?@ +} ##K$8999".88J#-L''', +7Jx(( 8 "IIi44M!(I   /      % %9mV    a2 2 r)c0tjd}||D]k}|d}||}d|_|dg}|j} ||||j|||| ||ldS)Nrrr5) r rirXrrKrrAr6rH) rrYrZr ib_filterrrrr\rDs r'_render_ib_interfaceszRenderer._render_ib_interfacess+L99 "229==  EvJ&z2I)IN!IIi44M!(I   /      % %9mV      r)c|s|j}i}|D]t}|ddkr|d}t|||}|dkr*|d|d|||||||<u||||||||||||||||| |||i} | D]\}}|s|j rD| | |j <|j D] }|r| | |j <!|jrOt|jj|jjgddgD]&\} } | | vr|j | | | <'| S) z3Given state, return /etc/sysconfig files + contentsrloopbackrrrrrr)rrXrrPr r]rtrrrrrrdrrziprr) rryrYrrrZrrrcontentscpathrs r'_render_sysconfigzRenderer._render_sysconfigs*  & I57"2244 3 3EV} **vJ$Z1A9MMIx(((v&&&  $ $UIv > > >)2N: & & '' ~vNNN ##M>6JJJ ##M>6JJJ %%m^VLLL !!-HHH%3%9%9%;%; L L !J  II. I+4+>+>+@+@(!*!3III I3<3F3F3H3H0 L$'%/1A1KLV$%%LLLE5H,,*3*:*D*DU*K*Kr)rYreturncx|s|j}d}tj||j}||||j|D]\}}tj||||j rItj||j }| ||} | rtj|| ||j rHtj||j } | ||} | rtj| | ||j rE||} tj||j } tj| | |tj||d}|drtjt$j|t+dg}|jr*|d|dtj|d |d z|dSdS) Ni)r)rrr,zNETWORKING=yeszNETWORKING_IPV6=yeszIPV6_AUTOCONF=nor )rr target_pathrrrrr write_filerrrrr_render_persistent_netrKr6 ensure_dirrrdirnamer(use_ipv6rOr#)rBrYrtarget file_moderyrdatarresolv_contentrnm_conf_contentnetrules_contentrsysconfig_pathnetcfgs r'render_network_statezRenderer.render_network_states]  'I +FD4DEE00 mT[I1  %'' 3 3JD$ OD$ 2 2 2 2 = E' >>H!--.N E.)DDD  ( J+5L#>>yO J oyIII   H#::=II  ,VT5GHHM OM+;Y G G G)&)-- 2J2JKK  " "9 - -  OBGOON;; < < <"nn&67F% 2 3444 0111 O & 1 1D 8)        r)r>)NN)rhrirjrkrrrNrMrdict__annotations__rC classmethodr rArHrUr]rtr staticmethodrrrrrrrrr-r)r'rr1s}AA"   'V<<N0%!'#   '0!2#   L*E   M(It3333&00[02E6E6[E6N;,;,[;,z@@[@4[(<.<.[<.|$$[$L\,   \ ::[:x[$@D%%%[%T%) --#-D>-  ------r)rc$fddDS)ziReturn list of supported names for vlan devices per RHEL doc 11.5. Naming Scheme for VLAN Interfaces.cXg|]&}|t'S)rvid)formatint)rcvrrs r'rez)_supported_vlan_names..s?     dC))   r))z{rdev}{vid:04}z {rdev}{vid}z{rdev}.{vid:04}z {rdev}.{vid}r-rs``r'r}r}s6         r)ctjdtvrdSddg}ddg}|D]}tj|||sdSdd g}|D]7}t jtj||rd S8dS) NvariantFifupifdownz/sbinz /usr/sbin)r4rz/etc/sysconfig/network-scripts/network-functionszetc/sysconfig/configT) r system_info KNOWN_DISTROSrwhichrrrr)rexpectedr4pexpected_pathss r' availablers    i (M 9 9u!H{ #F z!F6::: 55  :N 7>>$*6155 6 6 44  5r))rr>)$r~rYrr3typingrr cloudinitrloggingrrcloudinit.distros.parsersrr cloudinit.netr r r r rcloudinit.net.network_stater getLoggerrhr2rr(r0r8r:rmrrr}rr-r)r'rs) $$$$$$$$$$$$$$ FFFFFFFF544444g!!       EEE 3#3#3#3#3#3#3#3#lkkkkkIkkk\GGGGG9GGGTQ Q Q Q Q x Q Q Q h   r)