
    x[hʲ                     \   S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJr  S SK	J
r
Jr  S SKJrJr  S SKJrJrJrJrJr  S SKJr  \R.                  " \5      r/ SQrSS jrS	 rS
 r " S S5      r " S S\5      r " S S\5      r  " S S\RB                  5      r!S r"SS jr#SS jr$SS jr%g)    N)DictOptional)subputil)networkmanager_confresolv_conf)IPV6_DYNAMIC_TYPESis_ipv6_addressnet_prefix_to_ipv4_maskrenderersubnet_is_ipv6)NetworkState)	almalinuxcentos
cloudlinux	eurolinuxfedoramiraclelinux	openeulerOpenCloudOSopenmandrivarhelrockysuse	TencentOS	virtuozzoc                     SS/n[        [        U5      5       H  nX   (       a  U S-   X   -   X'   M  XU'   M      SR                  U5      $ )Nz1Created by cloud-init automatically, do not edit.  
)rangelenjoin)seplinesis      9/usr/lib/python3/dist-packages/cloudinit/net/sysconfig.py_make_headerr(   )   sS    ;
E 3u:8Sy58+EH!H	 
 99U    c                 4    SnU S   S:H  =(       a    U S   U;   $ )N)z::z0.0.0.0prefixr   network )routedefault_netss     r'   _is_default_router0   6   s%    $L?aDE)$4$DDr)   c                     [         R                  " SU 5      (       a3  U R                  S5      (       a  U R                  S5      (       a  U $ SU -  $ U $ )Nz\s"z"%s")research
startswithendswith)values    r'   _quote_valuer8   ;   sF    	yyC  U^^C%8%8LE>!r)   c                   ^    \ rS rSrSrSSS.rS rS rS rS	 r	S
 r
S rS rS rS rS rSrg)	ConfigMapF   z!Sysconfig like dictionary object.yesno)TFc                     0 U l         g N_confselfs    r'   __init__ConfigMap.__init__O   s	    
r)   c                      X R                   U'   g r?   r@   )rC   keyr7   s      r'   __setitem__ConfigMap.__setitem__R   s    

3r)   c                      U R                   U   $ r?   r@   rC   rG   s     r'   __getitem__ConfigMap.__getitem__U   s    zz#r)   c                 8    U R                   R                  U5      $ r?   )rA   getrK   s     r'   rO   ConfigMap.getX   s    zz~~c""r)   c                     XR                   ;   $ r?   r@   rK   s     r'   __contains__ConfigMap.__contains__[   s    jj  r)   c                 <    U R                   R                  US 5        g r?   )rA   poprK   s     r'   dropConfigMap.drop^   s    

sD!r)   c                 ,    [        U R                  5      $ r?   )r"   rA   rB   s    r'   __len__ConfigMap.__len__a   s    4::r)   c                     g)z6Skip the pair key, value if it matches a certain rule.Fr-   rC   rG   vals      r'   skip_key_valueConfigMap.skip_key_valued   s    r)   c                 0   [         R                  " 5       nUR                  [        5       5        U R                  (       a  UR                  S5        [        U R                  R                  5       5       H  nU R                  U   nU R                  X#5      (       a  M*  [        U[        5      (       a  U R                  U   n[        U[        5      (       d  [        U5      nUR                  U< S[        U5      < S35        M     UR                  5       $ )Nr    =)ioStringIOwriter(   rA   sortedkeysr^   
isinstancebool	_bool_mapstrr8   getvalue)rC   bufrG   r7   s       r'   	to_stringConfigMap.to_stringh   s    kkm		,.!::IIdO$**//+,CJJsOE""3..%&&u-eS))E
II3U(;<= - ||~r)   c                 :    U R                   R                  U5        g r?   )rA   update)rC   updatess     r'   rp   ConfigMap.updatex   s    

'"r)   r@   N)__name__
__module____qualname____firstlineno____doc__ri   rD   rH   rL   rO   rR   rV   rY   r^   rm   rp   __static_attributes__r-   r)   r'   r:   r:   F   sF    + I
 #!" #r)   r:   c                   b   ^  \ rS rSrSrU 4S jrS r\S 5       r\S 5       r	S r
S
S jrS	rU =r$ )Route|   z!Represents a route configuration.c                    > [         [        U ]  5         SU l        SU l        SU l        Xl        X l        X0l        X@l	        g )N   F)
superrz   rD   last_idxhas_set_default_ipv4has_set_default_ipv6_route_name_base_sysconf_dirroute_fn_tpl_ipv4route_fn_tpl_ipv6)rC   
route_namebase_sysconf_diripv4_tplipv6_tpl	__class__s        r'   rD   Route.__init__   s?    eT#%$)!$)!%!1!)!)r)   c                    [        U R                  U R                  U R                  U R                  5      nU R
                  R                  5       Ul        U R                  Ul        U R                  Ul        U R                  Ul	        U$ r?   )
rz   r   r   r   r   rA   copyr   r   r   )rC   rs     r'   r   
Route.copy   sp    """"""	
 **//#]]
!%!:!:!%!:!:r)   c                 N    U R                   U R                  U R                  S.-  $ N)basename)r   r   r   rB   s    r'   	path_ipv4Route.path_ipv4   )    %%++T5E5EF
 	
r)   c                 N    U R                   U R                  U R                  S.-  $ r   )r   r   r   rB   s    r'   	path_ipv6Route.path_ipv6   r   r)   c                     SU;   $ )N:r-   )rC   addresss     r'   is_ipv6_routeRoute.is_ipv6_route   s    g~r)   c                    US;  a  [        S[        U5      -  5      e[        R                  " 5       nUR	                  [        5       5        U R                  (       a  UR	                  S5        Sn[        U R                  R                  5       5       GH  nSU;  a  M  UR                  SS5      n[        U R                  U   5      n[        U R                  SU-      5      nUS:X  Ga!  U R                  U5      (       Gd
  [        U R                  S	U-      5      nUS
-   nUR	                  S[        U5      -   < S[        U5      < S35        UR	                  S[        U5      -   < S[        U5      < S35        UR	                  S	[        U5      -   < S[        U5      < S35        SU-   n	XR                  ;   aI  [        U R                  U	   5      n
UR	                  S[        U5      -   < S[        U
5      < S35        GMv  GMy  US:X  d  GM  U R                  U5      (       d  GM  [        U R                  SU 3   5      nSU-   U R                  ;   a  S[        U R                  SU-      5      -   OSn
UR	                  U< SU< SU< SU
< SU R                  < S3
5        GM     UR                  5       $ )N)ipv4ipv6zUnknown protocol '%s'r    ADDRESSr   GATEWAYr   NETMASKr}   ra   METRICr   PREFIXzmetric /z via r   z dev )
ValueErrorrj   rb   rc   rd   r(   rA   re   rf   replacer   r8   r   rk   )rC   protorl   reindexrG   indexaddress_valuegateway_valuenetmask_value
metric_keymetric_valueprefix_values               r'   rm   Route.to_string   sV   ((4E
CDDkkm		,.!::IIdO $**//+,C#KK	2.E

30M

9u+< =>M t'9'9-'H'H #DJJy5/@$A B!A+		 3w</m1LN 		 3w</m1LN 		 3w</m1LN &-
+#&tzz*'=#>LII#c'l2L4NP , &T%7%7%F%F"4::ug.>#?@  %'4::5 DJJx%/?$@ AA 
 		 &$%$((	Y -n ||~r)   )r   r   r   r   r   r   r   )r   )rs   rt   ru   rv   rw   rD   r   propertyr   r   r   rm   rx   __classcell__r   s   @r'   rz   rz   |   sI    +* 
 

 
 

B Br)   rz   c                      ^  \ rS rSrSrSSSSSS.r SU 4S	 jjr\S
 5       r\R                  S 5       r\S 5       r
\
R                  S 5       r
\S 5       rSS jrS rSrU =r$ )NetInterface   zERepresents a sysconfig/networking-script (and its config + children).EthernetBondBridge
InfiniBandVlan)ethernetbondbridge
infinibandvlanc                 X  > [         [        U ]  5         / U l        X0l        U R                  R                  S5      n[        UUUR                  S5      UR                  S5      S9U l        U R                  R                  S5      U l        X@l	        Xl
        XR                  S'   X l        g )Nroute_templatesr   r   )r   r   iface_templatesDEVICE)r~   r   rD   children	templatesrO   rz   routesiface_fn_tplkind_iface_namerA   r   )rC   
iface_namer   r   r   	route_tplr   s         r'   rD   NetInterface.__init__   s     	lD*,"NN&&'89	]]6*]]6*	
 !NN../@A	%)

8!1r)   c                     U R                   $ r?   )r   rB   s    r'   r   NetInterface.name	  s    r)   c                 ,    Xl         XR                  S'   g )Nr   )r   rA   )rC   r   s     r'   r   r     s    %)

8r)   c                     U R                   $ r?   )_kindrB   s    r'   r   NetInterface.kind  s    zzr)   c                 |    XR                   ;  a  [        U5      eXl        U R                   U   U R                  S'   g )NTYPE)iface_typesr   r   rA   )rC   r   s     r'   r   r     s7    '''T""
!--d3

6r)   c                 N    U R                   U R                  U R                  S.-  $ r   )r   r   r   rB   s    r'   pathNetInterface.path  s'      ++TYY?
 	
r)   c                 :   [        U R                  U R                  U R                  U R                  S9nU R
                  R                  5       Ul        U(       a  [        U R                  5      Ul        U(       a  U R                  R                  5       Ul	        U$ )N)r   )
r   r   r   r   r   rA   r   listr   r   )rC   copy_childrencopy_routescs       r'   r   NetInterface.copy#  sj    IIt--t~~DJJ
 **//#dmm,AJ{{'')AHr)   c                     US:X  a  US:X  a  gg)Nr   r   TFr-   r\   s      r'   r^   NetInterface.skip_key_value.  s    &=SF]r)   )r   r   r   r   r   r   r   r   )r   )FF)rs   rt   ru   rv   rw   r   rD   r   r   setterr   r   r   r^   rx   r   r   s   @r'   r   r      s    O "K =G2(     
[[* *   
[[4 4 
 

	 r)   r   c                      \ rS rSr% SrSSSS.SSS	.S
.rSSSSSSS.SSSSSS.S
.r\" / SQ5      r0 r	\
\S'   S+S jr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S  5       r\S! 5       r\S+S" j5       r\S+S# j5       r\S$\4S% j5       r\S& 5       r\ S+S$\4S' jj5       r  S,S$\S\\
   S(S4S) jjrS*rg)-Rendereri4  z7Renders network information in a /etc/sysconfig format.TFnone)ONBOOTUSERCTL	BOOTPROTOstaticauto)r   	STARTMODE)r   r   IPV6_FORCE_ACCEPT_RASTPAGEINGPRIOHWADDRMTU)	accept-ra
bridge_stpbridge_ageingbridge_bridgepriomac_addressmtu
BRIDGE_STPBRIDGE_AGEINGTIMEBRIDGE_PRIORITYLLADDR)r   r   r   r   r   ))	bond_modezmode=%s)bond_xmit_hash_policyzxmit_hash_policy=%s)bond_miimonz	miimon=%s)bond_min_linkszmin_links=%s)bond_arp_intervalzarp_interval=%s)bond_arp_ip_targetzarp_ip_target=%s)bond_arp_validatezarp_validate=%s)bond_ad_selectzad_select=%s)bond_num_grat_arpznum_grat_arp=%s)bond_downdelayzdowndelay=%s)bond_updelayz
updelay=%s)bond_lacp_ratezlacp_rate=%s)bond_fail_over_maczfail_over_mac=%s)bond_primaryz
primary=%s)bond_primary_reselectzprimary_reselect=%sr   Nc                 p   U(       d  0 nUR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        SnUR                  SU5      U l        UR                  S	5      UR                  S
5      UR                  S5      S.U l        UR                  SS5      U l        g )Nsysconf_dirzetc/sysconfignetrules_pathz(etc/udev/rules.d/70-persistent-net.rulesdns_pathzetc/resolv.confz,etc/NetworkManager/conf.d/99-cloud-init.confnetworkmanager_conf_pathcontrolr   r   )r  r   r   flavorr   )rO   r  r  r  r  r   r  )rC   confignm_conf_paths      r'   rD   Renderer.__init__p  s    F!::m_E#ZZG
 

:/@AE(.

&)
% zz),%zz*;<%zz*;<

 jj62r)   c                 ~   [         R                  " U R                  R                  U0 5      5      nUR	                  U5        S HU  nUR                  U5      nUc  M  US:X  a  US   S;  a  M*  U R
                  U   R                  U5      nU(       d  MQ  XbU'   MW     SU;   a  US   (       a  US   S:X  a  SUS'   g g g g )	N)r   r   r   r   type)physicalr   	wakeonlanr  zwol gETHTOOL_OPTS)r   deepcopyiface_defaultsrO   rp   cfg_key_maps)clsiface	iface_cfgr  flavor_defaultsold_key	old_valuenew_keys           r'   _render_iface_sharedRenderer._render_iface_shared  s    --(:(:(>(>vr(JK):G		'*I$m+f F 1 **6266w?7)2g& ; 5 k"f+(/In% , # !r)   c           	      d	   US:X  a"  SUS'   SU;   a  SUS'   UR                  S5        OSUS'   [        U[        UR                  5      S9 GH7  u  pVSnUR	                  S	5      nUS
:X  d  US:X  aO  US:X  a  US   S;   a  SUS'   OS
US'   SUS'   GOUS:X  a  US:X  a  SUS'   SUS'   SUS'   SUS'   GOSUS'   SUS'   GOUS:X  a7  US:X  a  US   S;   a  SUS'   OS
US'   SUS'   GOqSUS'   SUS'   SUS'   SUS'   GO[US:X  a-  US:X  a  US   S;   a  SUS'   OS
US'   SUS'   GO4SUS'   SUS'   GO(US;   a  US   n	SUS'   US:X  a  U	S;  a  SUS'   GOUS;   a  [        U5      (       a  US:w  a  SnSUS'   SU;   ar  [        Xq;   =(       a
    US   X   :g  5      n
U
(       a'  [        R                  S UR                  X   US   5        [        U5      (       a  US:X  a  OUS   X'   OUS   X'   [        U5      (       a  US:X  a
  SUS!'   SUS'   OIUS":X  a%  US:X  a  [        R                  S#U5        O&Xq;   US$'   O[        S%U< S&UR                  < S'35      eUR	                  S(5      S":X  d  GM$  US:X  a  S"US)'   GM2  SUS$'   GM:     S*nS*n[        U[        UR                  5      S9 GH  u  pVUR	                  S	5      nS+U;   a6  US:X  a"  [        U5      (       a	  US+   US,'   OUS+   US-'   OUS:w  a  US+   US.'   US/;   a  US:w  a  U(       a  US   S:w  a  SUS0'   Mv  U[        ;   a  M  US;   d  M  [        U5      (       a_  US1-   nUS2   < S3US4   < 3nUS5:X  a  US:X  a  XS6'   OqXS7'   OlUS1:X  a  US:X  a  XS8'   O[XS9'   OVUS:X  a  XS:U-  '   OHUS9==   S;U-   -  ss'   O7US1-   nUS5:X  a  S<O
[        U5      nUS2   US=U-   '   [        US4   5      US>U-   '   S?U;   a/  US:w  a)  SUS@'   [        US?   5      (       a	  US?   USA'   OUS?   USB'   SCU;   a  US:w  a  S;R!                  USC   5      USD'   SEU;   d  GM  US:w  d  GM  [        USE   5      SF:  a-  [        R                  SGUR                  [        USE   5      5        [        USE   S SF S15       H  u  p_XSH[        U5      -   '   M     GM     g )INr   r   r   BRIDGEdhcpr   startr   r  dhcp6zipv6_dhcpv6-stateful)dhcp4r,  managedDHCLIENT6_MODEr   TDHCPV6CIPV6INITFIPV6_AUTOCONFIPV6_FAILURE_FATALzipv6_dhcpv6-statelessinfoz-SDHCPV6C_OPTIONS
ipv6_slaac)r/  r,  r0  )r   static6IPV6_MTUr   zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r   manualz Unknown subnet type setting "%s"r   zUnknown subnet type 'z' found for interface ''r  r   r   metricIPV6_ROUTE_METRICIPV4_ROUTE_METRICr   r,  r0  DHCLIENT_SET_DEFAULT_ROUTEr}   r   r   r+   r   IPADDR6IPV6ADDR	IPADDR6_1IPV6ADDR_SECONDARIESz
IPADDR6_%dr   r   IPADDRr   gatewayDEFROUTEIPV6_DEFAULTGWr   
dns_searchDOMAINdns_nameservers   z6%s has %d entries in dns_nameservers. Only 3 are used.DNS)rV   	enumerater"   r   rO   r   rh   LOGwarningr   debugr   r	   rj   r   r
   r#   )r!  r#  subnetshas_default_router  r&   subnetmtu_keysubnet_typebootproto_inmtu_mismatch
ipv4_index
ipv6_index	ipv6_cidrsuffks                   r'   _render_subnetsRenderer._render_subnets  s    V%-Ik"9$)/	+&x(%+Ik" #7#i6H6H2IJIAG **V,Kg%8N)NV# -1BB17	+. 29	+.2;I./v%#99+/Ii(,0Ij)16Io.6:I23,0Ij)+/Ii( 77V# -1BB17	+. 29	+.28I./,0Ij) 26Io.+/Ii( 48I/0,V# -1BB17	+. 29	+.28I./,0Ij)15Io. 11(5)/	+&V# $+<<18	+. 55 "&))f.>(G,0Ij)F?#', @"5MY-??$L $J%NN%."5M &f--!V+ !17I.-3E]	*!&))f.>8=I4516Io.(V#II@+N +2*>Ih' "INN4  zz)$0V#-5Ik**/Ih'k Kp 

"7#i6H6H2IJIA **V,K6!V#%f--9?9I	"569?9I	"56v%*0*:Ih'// V#(Y{-Cv-MBG	">? 22 55!&))!+aJ+1)+<fX>N OI!Q!V+3<i04=j1#q!V+5>k2@I&<=!V+CLlZ&?@%&<= #i= ",aJ!+q2c*oD17	1BIho.2Ix(3Ii$./ &6V+;,0Ij)&vi'8996<Y6G	"23/5i/@	),6)f.>*-((6,3G*HIh'$.6V3C6"3459		/%NN'8 9:	 !*&1B*CBQ*G K45%#a&.1 !LI Kr)   c                 ~   US:X  a  g [        U[        UR                  5      S9 GH  u  pVUR                  S5      nUR                  S/ 5       GHf  nUR                  S5      =(       d    [	        US   5      n	[        U5      (       a  U[        ;  a  UR                  S5      (       a  UR                  (       d'  UR                  S5      (       a)  UR                  (       a  [        SUR                  -  5      eS	US
'   US   S;   a  S	US'   SU;   a&  U	(       a  US   US'   S	Ul        OUS   US'   S	Ul        SU;   a7  US:X  a&  [        U5      (       a  US   US'   GM  US   US'   GM  US   US'   GM&  GM)  S H"  u  pX;   d  M  U UR                   3nX   X,'   M$     U=R                  S-  sl        GMi     GM     g )Nr   r-  r  r   r   rH  r   z?Duplicate declaration of default route found for interface '%s'TrI  r   rA  rB  rJ  r   r>  r   r?  r@  r   ))rH  r   )r>  r   )r+   r   )netmaskr   )r,   r   r}   )rP  r"   r   rO   r
   r0   r	   r   r   r   r   r   r   )r!  r#  	route_cfgrT  r  _rV  rX  r.   is_ipv6r%  new_namer'  s                r'   _render_subnet_routesRenderer._render_subnet_routesj  s   
 V"7#i6H6H2IJIA **V,KHb1 **V, )$1 &e,,#+== 

6**y/M/M

6**y/M/M(=@IP  -1Ij) -1BBBF	">? E)":?	:JI&67=AI:383CIi0=AI:5(!V+-f55AF$,B"	*= > BG$,B"	*= > 38/Ih/ ) .) #+)1
93E3E2F&GG16I.. &&!+&&{ 2 Kr)   c                 n   / nU R                    Hl  u  pVXUR                  SS5      /nU HN  nXR;   d  M
  X%   n[        U[        [        45      (       a  SR                  U5      nUR                  Xh-  5          Mj     Mn     U(       a0  US:X  a  SR                  U5      US'   g SR                  U5      US'   g g )Nre  -r   r   BONDING_MODULE_OPTSBONDING_OPTS)bond_tpl_optsr   rg   tupler   r#   append)	r!  r#  r"  r  	bond_optsbond_key	value_tpl	bond_keys
bond_values	            r'   _render_bonding_optsRenderer._render_bonding_opts  s    	#&#4#4H!#3#3C#=>I%$!&J!*udm<<%(XXj%9
$$Y%=> & $5 
 4788I3F	/0 -0HHY,?	.) r)   c                 :   UR                  [        R                  " S5      5       Hr  nUR                  S5      =(       d    US   nUR                  S/ 5      nX%   nUR                  nU R                  UUUR                  U5        U R                  XxXc5        Mt     g )Nr  	config_idr   rT  )iter_interfacesr   filter_by_typerO   r   r`  rU  rh  )	r!  network_stateiface_contentsr  r"  r   iface_subnetsr#  rd  s	            r'   _render_physical_interfaces$Renderer._render_physical_interfaces  s     #22##J/
E ;/@5=J!IIi4M&2I!((I//	 %%m
r)   c                 v   [         R                  " S5      n[         R                  " S5      nUR                  U5       GHr  nUS   nX'   nU R	                  XU5        U/n	U	R                  UR                  5        U	 H  n
SU
S'   US:w  d  M  SU
l        M     UR                  S5      (       a/  US:X  a  UR                  S5      US'   OUR                  S5      US	'   UR                  S
/ 5      nUR                  nU R                  UUUR                  U5        U R                  XX5        [        UR                  U5       Vs/ s H  nUS   U:X  d  M  US   PM     sn5      n[        U5       H=  u  nnUS:X  a  SU-  nOSU-  nUUU'   UU   nUS:X  a  SUS'   SUS'   M3  UUS'   SUS'   M?     GMu     g s  snf )Nr   zbond-masterr   TBONDING_MASTERr   r   r   MACADDRrT  zBONDING_SLAVE_%szBONDING_SLAVE%sr   r   hotplugr   MASTERSLAVE)r   r{  filter_by_attrrz  rv  extendr   r   rO   r   r`  rU  rh  re   rP  )r!  r|  r}  r  bond_filterslave_filterr"  r   r#  master_cfgs
master_cfgr~  rd  slave_ifacebond_slavesr   
bond_slaveslavestr	slave_cfgs                      r'   _render_bond_interfaces Renderer._render_bond_interfaces  s   --f5..}="22;?EvJ&2I$$Yv> %+Ky112)
/3
+,V#&,JO *
 yy''V#*/))M*BIh'+099]+CIi(!IIi4M!((I//	 %%m ! (5'D'D$(( #=1Z?	 (K'(K &/{%;!zV#1E9H058H&0	(#*:6	V#-3Ik*-6Ik**4Ih')-Ig& &<Y @Fs   F6
	F6
c           	          [         R                  " S5      nUR                  U5       H  nUS   nX&   nUS:X  a4  UR                  S5      nU(       a  XS'   US UR	                  S5       US'   OOSUS	'   SUl        US
   n	[        XS   5      n
Xj;  a'  [        R                  SUU	SR                  U
5      5        XS'   UR                  S/ 5      nUR                  nU R                  UUUR                  U5        U R                  X|X5        M     g )Nr   r   r   vlan_idVLAN_ID.ETHERDEVICETVLANzvlan-raw-devicezIName '%s' for vlan '%s' is not officially supportedby RHEL. Supported: %sr   PHYSDEVrT  )r   r{  rz  rO   rfindr   _supported_vlan_namesrQ  r7  r#   r   r`  rU  rh  )r!  r|  r}  r  vlan_filterr"  r   r#  r  rdev	supportedr~  rd  s                r'   _render_vlan_interfaces Renderer._render_vlan_interfaces"  s&   --f5"22;?EvJ&2I))I.+2i(+56M
8H8H8M+N	-($(	&!!'	./1$i8HI	.HH1"+ (,)$!IIi4M!((I//	 %%mA @r)   c                 T   / n/ nU R                  5        H  nUS    H9  nSU;   a  UR                  US   5        SU;   d  M%  UR                  US   5        M;     SU;   d  MM  UUS   S    Vs/ s H  nXb;  d  M
  UPM     sn-  nUUS   S    Vs/ s H  nXs;  d  M
  UPM     sn-  nM     U R                  (       a'  UU R                   Vs/ s H  nX;  d  M
  UPM     sn-  nU R                  (       a'  UU R                   Vs/ s H  nXs;  d  M
  UPM     sn-  n[	        [        U5      [        U5      /5      (       d  g [        R                  " S5      n	U(       aN  [        R                  R                  U5      (       a*  [        R                  " [        R                  " U5      5      n	U H  nU	R                  U5        M     U H  n
U	R                  U
5        M     [        S5      n[!        U	5      nUR#                  U5      (       d  US	-   U-   nU$ s  snf s  snf s  snf s  snf )
NrT  rM  rK  dnsnameserversr4   r   ;r    )rz  r  rM  dns_searchdomainsanyr"   r   
ResolvConfosr   isfiler   load_text_fileadd_nameserveradd_search_domainr(   rj   r5   )r|  existing_dns_pathfound_nameserversfound_dns_searchr"  rV  r  r4   
nameservercontentsearchdomainheadercontent_strs                r'   _render_dnsRenderer._render_dnsI  sG    "224E	*$.%,,V4E-FG6)$++F<,@A + ~!$U|M:&:3 :& !
 !"',x"8%"85 "8%   52 (("/"?"?""?J6 "?" 
 **+==!=F1 =!  %&$%
 
 ((,0A!B!B!,,##$56G ,J"":. ,,L%%l3 -c"'l%%f-- 4-+5Kc&
%"!s0   -	H:H	HH	H H 	H%H%c                    Sn[         R                  " S5      nU R                  5        HN  nUS    H  nSU;   d  SU;   d  M  Sn  O   U(       a  M(  SU;   d  M0  US   S   (       d  US   S	   (       d  ML  Sn  O   U R                  (       d  U R                  (       d  U(       a  UR                  S
SS5        U(       d  g SR                  [        5       SSR                  UR                  5       5      S/5      nU$ )NFr   rT  rM  rK  Tr  r  r4   mainr   r    )	r   NetworkManagerConfrz  rM  r  set_section_keypairr#   r(   rd   )r|  r   	iface_dnsr  r"  rV  outs          r'   _render_networkmanager_conf$Renderer._render_networkmanager_conf  s    	%88<"224E	*$.,&2H $I +
 IUN5\-0E%L4J4J 	 5, ))..''v>gg|~tTYYw}}-GNO
r)   r|  c                    U R                   U   R                  5        VVs0 s H  u  pEUR                  S5      (       d  M  XE_M!     nnn[        R                  " S5      nUR                  U5       GH  nUS   n	X)   n
US:w  a  SU
l        UR                  5        H  u  pX;   d  M  X   X'   M     US:X  a'  SU
;   a!  U
R                  S5      (       a  SU
S'   OSU
S'   UR                  S5      (       a  SnUS:X  a  S	nUR                  S5      X'   US:X  a=  UR                  S
/ 5      (       a&  SSR                  UR                  S
5      5      -  U
S'   UR                  S
/ 5       H=  nX.   nU/nUR                  UR                  5        U H  nU	nUS:X  a  SnUUS'   M     M?     UR                  S/ 5      nU
R                  nU R                  U
UUR                  U5        U R                  U
UUU5        GM     g s  snnf )Nr   r   r   r   onoffr   r  	LLADDRESSbridge_portsz%sr   BRIDGE_PORTSr<   r+  rT  )r   itemsr5   r   r{  rz  r   rO   r#   r  r   r   r`  rU  rh  )r!  r|  r}  r  old_knew_kbridge_key_mapbridge_filterr"  r   r#  r%  r'  rG   bridged_iface_namebridged_cfgbridged_cfgs
bridge_cfgbridge_valuer~  rd  s                        r'   _render_bridge_interfaces"Renderer._render_bridge_interfaces  s    !$ 0 0 8 > > @
 @) EL @ 	 

 !//9"22=AEvJ&2I!)	$2$8$8$: #).I& %; 9, }}\2226	,/27	,/yy''V#%C!&=!9	99^R0004sxx		.18 1In- ',ii&C" -@ +}##K$8$89".J#-L'',+7Jx(	 #/ 'D "IIi4M!((I//	 %%9mVa B
s   G=G=c                    [         R                  " S5      nUR                  U5       Ha  nUS   nX&   nSUl        UR	                  S/ 5      nUR
                  n	U R                  UUUR                  U5        U R                  XyX5        Mc     g )Nr   r   rT  )	r   r{  rz  r   rO   r   r`  rU  rh  )
r!  r|  r}  r  	ib_filterr"  r   r#  r~  rd  s
             r'   _render_ib_interfacesRenderer._render_ib_interfaces  s    ++L9	"229=EvJ&2I)IN!IIi4M!((I//	 %%m >r)   c                    U(       d  U R                   n0 nUR                  5        Hx  nUS   S:X  a  M  UR                  S5      =(       d    US   n[        US   X5      nUS:X  a"  UR	                  S5        UR	                  S5        U R                  XhU5        XU'   Mz     U R                  X%U5        U R                  X%U5        U R                  X%U5        U R                  X%U5        U R                  X%U5        0 n	UR                  5        H  u  pU(       d  UR                  (       aT  UR                  5       XR                  '   UR                   H(  nU(       d  M  UR                  5       XR                  '   M*     UR                  (       d  M  [!        UR                  R"                  UR                  R$                  /SS	/5       H)  u  pX;  d  M  UR                  R                  U5      X'   M+     M     U	$ )
z3Given state, return /etc/sysconfig files + contentsr  loopbackry  r   r   r   r   r   r   )r   rz  rO   r   rV   r(  r  r  r  r  r  r  r   rm   r   r   zipr   r   )r!  r   r|  r  r   r}  r"  ry  r#  contentsr   cpathr   s                r'   _render_sysconfigRenderer._render_sysconfig  s    I24"224EV}
*"YY{3DuV}I$f/I x(v&$$Uv>(19% 5 	''vN##M6J##M6J%%mVL!!-H%3%9%9%;!JI..+4+>+>+@(!*!3!3I y3<3F3F3H0 "4 $'%%//1A1A1K1KLV$%LE ,*3*:*:*D*DU*K% &< r)   returnc                   ^ U(       d  U R                   nSn[        R                  " X0R                  5      nU R	                  XQU R
                  US9R                  5        H  u  pg[        R                  " XgU5        M     U R                  (       aM  [        R                  " X0R                  5      nU R                  XS9n	U	(       a  [        R                  " XU5        U R                  (       aO  [        R                  " X0R                  5      n
U R                  X5      nU(       a  [        R                  " XU5        U R                  (       aH  U R                  U5      n[        R                  " X0R                  5      n[        R                  " UUUSS9  [        R                  " X2R                  S5      5      nUR!                  S5      (       Ga7  [        R"                  " [$        R&                  R)                  U5      5        [+        5       S/nUR,                  (       a"  UR/                  S	5        UR/                  S
5        [$        R&                  R1                  U5      (       av  [        R2                  " U5      R5                  5        HN  m[7        U4S jS 5       5      (       a  M  T[+        5       R5                  5       ;  d  M=  UR/                  T5        MP     [        R                  " USR9                  U5      S-   U5        g g )Ni  )r   )r  T)r  modepreserve_moder  r,   zNETWORKING=yeszNETWORKING_IPV6=yeszIPV6_AUTOCONF=noc              3   .   >#    U  H
  nUT;   v   M     g 7fr?   r-   ).0settinglines     r'   	<genexpr>0Renderer.render_network_state.<locals>.<genexpr>h  s        , $tO,s   )
NETWORKINGNETWORKING_IPV6r5  r    )r   r   target_pathr  r  r  r  r   
write_filer  r  r  r  r  _render_persistent_netrO   r6   
ensure_dirr  r   dirnamer(   use_ipv6rp  existsr  
splitlinesr  r#   )rC   r|  r   target	file_moder   r   datar  resolv_contentr  nm_conf_contentnetrules_contentr  sysconfig_pathnetcfgr  s                   @r'   render_network_stateRenderer.render_network_state2  sX    I	++F4D4DE00T[[I 1 

%'JD OOD	2 ==''>H!-- . N )D((++55L #>>O yI#::=I ,,V5G5GHMOO("	 ))&--	2JK""9--OOBGGOON;<"n&67F%%3401 ww~~n-- //?JJLD  ,    !(A(A(CCd+ M OO		& 1D 8)1 .r)   )r  r  r  r  r  r   r?   )NN)rs   rt   ru   rv   rw   r  r   ro  rn  r   dict__annotations__rD   classmethodr(  r`  rh  rv  r  r  r  staticmethodr  r  r   r  r  r  r   r  rx   r-   r)   r'   r   r   4  s   A 

 'V<N 0%!'#
 '0!2#
L* 	
M( It3& 0 02 J6 J6X E, E,N @ @4  * <. <.| $ $L @ @D # #J <(< <|  $  + $+ +` %)	D#D D>D
 
D Dr)   r   c           	      `    S Vs/ s H  nUR                  U [        U5      S9PM     sn$ s  snf )zeReturn list of supported names for vlan devices per RHEL doc
11.5. Naming Scheme for VLAN Interfaces.)z{rdev}{vid:04}z{rdev}{vid}z{rdev}.{vid:04}z{rdev}.{vid})r  vid)formatint)r  r   vs      r'   r  r  y  s>    


A 	
dC)
  s   #+c                     [         R                  " 5       S   [        ;  a  g[        U 5      (       a  g[	        U 5      (       a  gg)NvariantFT)r   system_infoKNOWN_DISTROSavailable_sysconfigavailable_nm_ifcfg_rhr  s    r'   	availabler    s:    )$M96""V$$r)   c                 X    [         R                   " [        R                  " U S5      5      $ )Nz;usr/lib*/NetworkManager/*/libnm-settings-plugin-ifcfg-rh.so)globr   r  r
  s    r'   r	  r	    s)     99I	
 r)   c                     SS/nSS/nU H  n[         R                  " X2U S9(       a  M    g   SS/nU H=  n[        R                  R	                  [         R
                  " X5      5      (       d  M=    g	   g)
Nifupifdownz/sbinz	/usr/sbin)r4   r  Fz/etc/sysconfig/network-scripts/network-functionszetc/sysconfig/configT)r   whichr  r   r  r  )r  expectedr4   pexpected_pathss        r'   r  r    su    !H{#Fzz!6:: 
 	:N 77>>$**6566  r)   )#r?   )&r   r  rb   loggingr  r3   typingr   r   	cloudinitr   r   cloudinit.distros.parsersr   r   cloudinit.netr	   r
   r   r   r   cloudinit.net.network_stater   	getLoggerrs   rQ  r  r(   r0   r8   r:   rz   r   r   r  r  r	  r  r-   r)   r'   <module>r     s      	  	 	 !   F  5!$
E
3# 3#lkI k\G9 GTBx   BJr)   