+
    i                     ^   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
Ht ^ RIHtHt ^ RIHtHtHtHtHt ^ RIHt ]P.                  ! ]4      t. ROtRR ltR tR	 t ! R
 R4      t ! R R]4      t ! R R]4      t  ! R R]PB                  4      t!R t"RR lt#RR lt$RR lt%R# )    N)DictOptional)subputil)networkmanager_confresolv_conf)IPV6_DYNAMIC_TYPESis_ipv6_addressnet_prefix_to_ipv4_maskrenderersubnet_is_ipv6NetworkStatec                     R R.p\        \        V4      4       F/  pW,          '       d   V R,           W,          ,           W&   K+  WV&   K1  	  RP                  V4      # )z1Created 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   )   sU    ;
E 3u:88Sy58+EH!H	 
 99U    c                 F    RpV R,          ^ 8H  ;'       d    V R,          V9   # )::prefixnetwork)r   z0.0.0.0 )routedefault_netss   & r   _is_default_router$   6   s(    $L?aDDE)$4$DDr   c                     \         P                  ! R V 4      '       d:   V P                  R4      '       d   V P                  R4      '       d   V # RV ,          # V # )z\s"z"%s")research
startswithendswith)values   &r   _quote_valuer,   ;   sF    	yyC  U^^C%8%8LE>!r   c                   l   a  ] tR t^Ft o RtRRRR/tR tR tR tR	 t	R
 t
R tR tR tR tR tRtV tR# )	ConfigMapz!Sysconfig like dictionary object.TyesFnoc                    / V n         R # N_confselfs   &r   __init__ConfigMap.__init__O   s	    
r   c                "    W P                   V&   R # r2   r3   )r6   keyr+   s   &&&r   __setitem__ConfigMap.__setitem__R   s    

3r   c                (    V P                   V,          # r2   r3   r6   r:   s   &&r   __getitem__ConfigMap.__getitem__U   s    zz#r   c                8    V P                   P                  V4      # r2   )r4   getr>   s   &&r   rB   ConfigMap.getX   s    zz~~c""r   c                    WP                   9   # r2   r3   r>   s   &&r   __contains__ConfigMap.__contains__[   s    jj  r   c                >    V P                   P                  VR 4       R # r2   )r4   popr>   s   &&r   dropConfigMap.drop^   s    

sD!r   c                ,    \        V P                  4      # r2   )r   r4   r5   s   &r   __len__ConfigMap.__len__a   s    4::r   c                    R# )z6Skip the pair key, value if it matches a certain rule.Fr!   r6   r:   vals   &&&r   skip_key_valueConfigMap.skip_key_valued   s    r   c                H   \         P                  ! 4       pVP                  \        4       4       V P                  '       d   VP                  R 4       \        V P                  P                  4       4       F  pV P                  V,          pV P                  W#4      '       d   K/  \        V\        4      '       d   V P                  V,          p\        V\        4      '       g   \        V4      pVP                  V: R\        V4      : R 24       K  	  VP                  4       # )r   =)ioStringIOwriter   r4   sortedkeysrQ   
isinstancebool	_bool_mapstrr,   getvalue)r6   bufr:   r+   s   &   r   	to_stringConfigMap.to_stringh   s    kkm		,.!:::IIdO$**//+,CJJsOE""3..%&&u-eS))E
II3U(;<= - ||~r   c                <    V P                   P                  V4       R # r2   )r4   update)r6   updatess   &&r   rc   ConfigMap.updatex   s    

'"r   r3   N)__name__
__module____qualname____firstlineno____doc__r\   r7   r;   r?   rB   rE   rI   rL   rQ   r`   rc   __static_attributes____classdictcell____classdict__s   @r   r.   r.   F   sR     + 	etI
 #!" # #r   r.   c                   l   a a ] tR t^|t oRtV 3R ltR t]R 4       t]R 4       t	R t
R	R ltRtVtV ;t# )
Routez!Represents a route configuration.c                   < \         \        V `  4        ^V n        RV n        RV n        Wn        W n        W0n        W@n	        R# )   FN)
superrp   r7   last_idxhas_set_default_ipv4has_set_default_ipv6_route_name_base_sysconf_dirroute_fn_tpl_ipv4route_fn_tpl_ipv6)r6   
route_namebase_sysconf_diripv4_tplipv6_tpl	__class__s   &&&&&r   r7   Route.__init__   s?    eT#%$)!$)!%!1!)!)r   c                   \        V P                  V P                  V P                  V P                  4      pV P
                  P                  4       Vn        V P                  Vn        V P                  Vn        V P                  Vn	        V# r2   )
rp   rw   rx   ry   rz   r4   copyrt   ru   rv   )r6   rs   & r   r   
Route.copy   sp    """"""	
 **//#]]
!%!:!:!%!:!:r   c                X    V P                   R V P                  RV P                  /,          # basename)ry   rx   rw   r5   s   &r   	path_ipv4Route.path_ipv4   -    %%T++VT5E5EF
 	
r   c                X    V P                   R V P                  RV P                  /,          # r   )rz   rx   rw   r5   s   &r   	path_ipv6Route.path_ipv6   r   r   c                    R V9   # ):r!   )r6   addresss   &&r   is_ipv6_routeRoute.is_ipv6_route   s    g~r   c                "   VR9  d   \        R\        V4      ,          4      h\        P                  ! 4       pVP	                  \        4       4       V P                  '       d   VP	                  R4       Rp\        V P                  P                  4       4       EFc  pRV9  d   K  VP                  RR4      p\        V P                  V,          4      p\        V P                  RV,           ,          4      pVR 8X  EdH   V P                  V4      '       Eg0   \        V P                  RV,           ,          4      pV^,           pVP	                  R\        V4      ,           : R\        V4      : R24       VP	                  R\        V4      ,           : R\        V4      : R24       VP	                  R\        V4      ,           : R\        V4      : R24       R	V,           p	WP                  9   dR   \        V P                  V	,          4      p
VP	                  R	\        V4      ,           : R\        V
4      : R24       EK  EK  VR8X  g   EK  V P                  V4      '       g   EK  \        V P                  R
V 2,          4      pR	V,           V P                  9   d+   R\        V P                  R	V,           ,          4      ,           MRp
VP	                  V: RV: RV: RV
: RV P                  : R2
4       EKf  	  VP                  4       # )ipv4ipv6zUnknown protocol '%s'r   ADDRESSr   GATEWAYNETMASKrT   METRICPREFIXzmetric /z via r   z dev )r   r   )
ValueErrorr]   rU   rV   rW   r   r4   rX   rY   replacer   r,   rw   r^   )r6   protor_   reindexr:   indexaddress_valuegateway_valuenetmask_value
metric_keymetric_valueprefix_values   &&          r   r`   Route.to_string   sd   ((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22L4NP , &T%7%7%F%F"4::ug.>#?@  %'4::5 DJJx%/?$@ AA 
 		 &$%$((	Y -n ||~r   )rx   rw   ru   rv   rt   ry   rz   )r   )rf   rg   rh   ri   rj   r7   r   propertyr   r   r   r`   rk   rl   __classcell__r   rn   s   @@r   rp   rp   |   sK     +* 
 

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

B Br   rp   c            
          a a ] tR t^t oRtRRRRRRRR	R
R/tRV 3R llt]R 4       t]P                  R 4       t]R 4       t
]
P                  R 4       t
]R 4       tRR ltR tRtVtV ;t# )NetInterfacezERepresents a sysconfig/networking-script (and its config + children).ethernetEthernetbondBondbridgeBridge
infiniband
InfiniBandvlanVlanc                `  < \         \        V `  4        . V n        W0n        V P                  P                  R 4      p\        VVVP                  R4      VP                  R4      R7      V n        V P                  P                  R4      V n        W@n	        Wn
        WP                  R&   W n        R# )route_templatesr   r   )r}   r~   iface_templatesDEVICEN)rs   r   r7   children	templatesrB   rp   routesiface_fn_tplkind_iface_namer4   rx   )r6   
iface_namer|   r   r   	route_tplr   s   &&&&& r   r7   NetInterface.__init__   s     	lD*,"NN&&'89	]]6*]]6*	
 !NN../@A	%)

8!1r   c                    V P                   # r2   )r   r5   s   &r   r   NetInterface.name	  s    r   c                .    Wn         WP                  R &   R# )r   N)r   r4   )r6   r   s   &&r   r   r     s    %)

8r   c                    V P                   # r2   )_kindr5   s   &r   r   NetInterface.kind  s    zzr   c                    WP                   9  d   \        V4      hWn        V P                   V,          V P                  R &   R# )TYPEN)iface_typesr   r   r4   )r6   r   s   &&r   r   r     s7    '''T""
!--d3

6r   c                X    V P                   R V P                  RV P                  /,          # r   )r   rx   r   r5   s   &r   pathNetInterface.path  s+      T++VTYY?
 	
r   c                D   \        V P                  V P                  V P                  V P                  R 7      pV P
                  P                  4       Vn        V'       d   \        V P                  4      Vn        V'       d    V P                  P                  4       Vn	        V# ))r   )
r   r   rx   r   r   r4   r   listr   r   )r6   copy_childrencopy_routescs   &&& r   r   NetInterface.copy#  sj    IIt--t~~DJJ
 **//#dmm,AJ{{'')AHr   c                &    VR 8X  d
   VR8X  d   R# R# )r   r   TFr!   rO   s   &&&r   rQ   NetInterface.skip_key_value.  s    &=SF]r   )rx   r   r   r   r   r   r   r   )r   )FF)rf   rg   rh   ri   rj   r   r7   r   r   setterr   r   r   rQ   rk   rl   r   r   s   @@r   r   r      s     O 	J(lK2(     
[[* *   
[[4 4 
 

	 r   r   c                     a  ] tR tRt o RtRRRRRRR	/R
RRRR//tRRRRRRRRRRRRR/R
RRRRRRRRRR//t]! . R2O4      t/ t	R3R lt
]R  4       t]R! 4       t]R" 4       t]R# 4       t]R$ 4       t]R% 4       t]R& 4       t]R3R' l4       t]R3R( l4       t]V 3R) lR* l4       t]R+ 4       t]R3V 3R, lR- ll4       tR4V 3R. lR/ lltV 3R0 ltR1tV tR# )5Rendereri4  z7Renders network information in a /etc/sysconfig format.rhelONBOOTTUSERCTLF	BOOTPROTOnonesusestatic	STARTMODEauto	accept-raIPV6_FORCE_ACCEPT_RA
bridge_stpSTPbridge_ageingAGEINGbridge_bridgeprioPRIOmac_addressHWADDRmtuMTU
BRIDGE_STPBRIDGE_AGEINGTIMEBRIDGE_PRIORITYLLADDRNc                x   V'       g   / pVP                  R R4      V n        VP                  RR4      V n        VP                  RR4      V n        RpVP                  RV4      V n        RVP                  R4      R	VP                  R	4      R
VP                  R
4      /V n        VP                  RR4      V n        R# )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   flavorr   N)rB   r   r   r   r   r   r   )r6   confignm_conf_paths   && r   r7   Renderer.__init__p  s    F!::m_E#ZZG
 

:/@AE(.

&)
% vzz),vzz*;<vzz*;<

 jj62r   c                   \         P                  ! V P                  P                  V/ 4      4      pVP	                  V4       R Fa  pVP                  V4      pVf   K  VR 8X  d   VR,          R9  d   K1  V P
                  V,          P                  V4      pV'       g   K]  WbV&   Kc  	  RV9   d)   VR,          '       d   VR,          R8X  d   RVR&   R# R# R# R# )	r   Ntypephysical	wakeonlanzwol gETHTOOL_OPTS)r   r   r   )r  r   )r   deepcopyiface_defaultsrB   rc   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           	     
   VR 8X  d$   RVR&   RV9   d   RVR&   VP                  R4       MRVR&   \        V\        VP                  4      R7       EF|  w  rVRpVP	                  R4      pVR	8X  g   VR
8X  dX   VR 8X  d!   VR,          RB9   d   RVR&   MR	VR&   RVR&   EMVR8X  d   VR
8X  d   RVR&   RVR&   RVR&   RVR&   EMRVR&   RVR&   EMVR8X  d>   VR 8X  d!   VR,          RB9   d   RVR&   MR	VR&   RVR&   EMRVR&   RVR&   RVR&   RVR&   EMVR8X  d4   VR 8X  d!   VR,          RB9   d   RVR&   MR	VR&   RVR&   EM_RVR&   RVR&   EMSVRB9   d$   VR,          p	RVR&   VR 8X  d   V	RC9  d   RVR&   EM)VRD9   d   \        V4      '       d   VR 8w  d   RpRVR&   RV9   d   \        Wq9   ;'       d    VR,          W,          8g  4      p
V
'       d0   \        P                  RVP                  W,          VR,          4       \        V4      '       d   VR 8X  d   MVR,          W&   MVR,          W&   \        V4      '       d   VR8X  d   RVR&   RVR&   MKVR8X  d'   VR 8X  d   \        P                  RV4       M&Wq9   VR &   M\        R!V: R"VP                  : R#24      hVP	                  R$4      R8X  g   EKh  VR 8X  d	   RVR%&   EKw  RVR &   EK  	  REpREp\        V\        VP                  4      R7       EF  w  rVVP	                  R4      pR&V9   dF   VR8X  d,   \        V4      '       d   VR&,          VR'&   M VR&,          VR(&   MVR 8w  d   VR&,          VR)&   VRF9   d%   VR 8w  d   V'       d   VR,          R8w  d   RVR*&   K  V\        9   d   K  VRD9   g   K  \        V4      '       d   V^,           pVR+,          : R,VR-,          : 2pV^ 8X  d   VR 8X  d   WR.&   MWR/&   MV^8X  d   VR 8X  d   WR0&   MWR1&   M|VR 8X  d   WR2V,          &   MiVR1;;,          R3V,           ,          uu&   MLV^,           pV^ 8X  d   R4M
\        V4      pVR+,          VR5V,           &   \        VR-,          4      VR6V,           &   R7V9   d>   VR 8w  d7   RVR8&   \        VR7,          4      '       d   VR7,          VR9&   MVR7,          VR:&   R;V9   d#   VR 8w  d   R3P!                  VR;,          4      VR<&   R=V9   g   EK  VR 8w  g   EK  \        VR=,          4      ^8  d2   \        P                  R>VP                  \        VR=,          4      4       \        VR=,          R?,          ^4       F  w  r_WR@\        V4      ,           &   K  	  EK  	  RA# )Gr   r   r   BRIDGEdhcpr   startr   r  dhcp6zipv6_dhcpv6-statefuldhcp4managedDHCLIENT6_MODEr   TDHCPV6CIPV6INITFIPV6_AUTOCONFIPV6_FAILURE_FATALzipv6_dhcpv6-statelessinfoz-SDHCPV6C_OPTIONS
ipv6_slaac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   metricIPV6_ROUTE_METRICIPV4_ROUTE_METRICr   DHCLIENT_SET_DEFAULT_ROUTEr   r   r   IPADDR6IPV6ADDR	IPADDR6_1IPV6ADDR_SECONDARIESz
IPADDR6_%dr   r   IPADDRr   gatewayDEFROUTEIPV6_DEFAULTGWr   
dns_searchDOMAINdns_nameserversz6%s has %d entries in dns_nameservers. Only 3 are used.:N   NDNSN)r  r  )r  r  )r   static6r   r  r  )rI   	enumerater   r   rB   r   r[   LOGwarningr   debugr   r	   r]   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J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J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*CB*G K45%#a&.1 !LI Kr   c                   VR 8X  d   R# \        V\        VP                  4      R7       EF  w  rVVP                  R4      pVP                  R. 4       EF  pVP                  R4      ;'       g    \	        VR,          4      p	\        V4      '       Ed   V\        9  Ed   VP                  R4      '       d   VP                  '       g*   VP                  R4      '       d/   VP                  '       d   \        RVP                  ,          4      hR	VR
&   VR,          R9   d   R	VR&   RV9   d0   V	'       d   VR,          VR&   R	Vn        MVR,          VR&   R	Vn        RV9   dF   VR8X  d0   \        V4      '       d   VR,          VR&   EK7  VR,          VR&   EKF  VR,          VR&   EKU  EKX  R F'  w  rW9   g   K  V VP                   2pW,          W,&   K)  	  V;P                  ^,          un        EK  	  EK  	  R# )r   Nr  r  r   r   r-  r   z?Duplicate declaration of default route found for interface '%s'Tr.  r   r'  r/  r   r$  r   r%  r&  r   r6  ))r-  r   )r$  r   )r   r   )netmaskr   )r    r   )r7  r   r   rB   r
   r$   r	   ru   rv   r   r   r   rt   )r  r
  	route_cfgr;  r   _r=  r?  r"   is_ipv6r  new_namer  s   &&&&&        r   _render_subnet_routesRenderer._render_subnet_routesj  s   
 V"7#i6H6H2IJJIA **V,KHb1 **V,  )$1 &e,,#+== 

6**y/M/M/M

6**y/M/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                   . pV P                    Fv  w  rVWUP                  R R4      .pV FX  pWR9   g   K  W%,          p\        V\        \        34      '       d   RP                  V4      pVP                  Wh,          4        Kt  	  Kx  	  V'       d4   VR8X  d   RP                  V4      VR&   R# RP                  V4      VR&   R# R# )rL  -r   r   BONDING_MODULE_OPTSBONDING_OPTSN)bond_tpl_optsr   rZ   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                N   VP                  \        P                  ! R 4      4       F{  pVP                  R4      ;'       g
    VR,          pVP                  R. 4      pW%,          pVP                  pV P                  VVVP                  V4       V P                  WxWc4       K}  	  R# )r  	config_idr   r;  N)iter_interfacesr   filter_by_typerB   r   rG  r<  rO  )	r  network_stateiface_contentsr   r	  r   iface_subnetsr
  rK  s	   &&&&     r   _render_physical_interfaces$Renderer._render_physical_interfaces  s     #22##J/
E ;/@@5=J!IIi4M&2I!((I//	 %%m
r   c                   \         P                  ! R 4      p\         P                  ! R4      pVP                  V4       EF  pVR,          pW',          pV P	                  WV4       V.p	V	P                  VP                  4       V	 F  p
RV
R&   VR8w  g   K  R V
n        K  	  VP                  R4      '       d1   VR8X  d   VP                  R4      VR&   MVP                  R4      VR&   VP                  R	. 4      pVP                  pV P                  VVVP                  V4       V P                  WW4       \        VP                  V4       Uu. uF  pVR,          V8X  g   K  VR,          NK  	  up4      p\        V4       FK  w  ppVR8X  d   R
V,          pM	RV,          pVVV&   VV,          pVR8X  d   RVR&   RVR&   KA  VVR&   RVR&   KM  	  EK  	  R# u upi )r   zbond-masterr   TBONDING_MASTERr   r   r   MACADDRr;  zBONDING_SLAVE_%szBONDING_SLAVE%sr   r   hotplugr   MASTERSLAVEN)r   rb  filter_by_attrra  r]  extendr   r   rB   r   rG  r<  rO  rX   r7  )r  rc  rd  r   bond_filterslave_filterr	  r   r
  master_cfgs
master_cfgre  rK  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   G
#G
c           	     H   \         P                  ! R 4      pVP                  V4       F  pVR,          pW&,          pVR8X  d6   VP                  R4      pV'       d   WR&   VRVP	                  R4       VR&   MXRVR	&   R Vn        VR
,          p	\        WR,          4      p
Wj9  d(   \        P                  RVV	RP                  V
4      4       WR&   VP                  R. 4      pVP                  pV P                  VVVP                  V4       V P                  W|W4       K  	  R# )r   r   r   vlan_idVLAN_IDN.ETHERDEVICETVLANzvlan-raw-devicezIName '%s' for vlan '%s' is not officially supportedby RHEL. Supported: %sr   PHYSDEVr;  )r   rb  ra  rB   rfindr   _supported_vlan_namesr8  r  r   r   rG  r<  rO  )r  rc  rd  r   vlan_filterr	  r   r
  r|  rdev	supportedre  rK  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                   . p. pV P                  4        F  pVR ,           FC  pRV9   d   VP                  VR,          4       RV9   g   K+  VP                  VR,          4       KE  	  RV9   g   K\  TVR,          R,           Uu. uF  pWb9  g   K  VNK  	  up,          pTVR,          R,           Uu. uF  pWs9  g   K  VNK  	  up,          pK  	  V P                  '       d,   TV P                   Uu. uF  pW9  g   K  VNK  	  up,          pV P                  '       d,   TV P                   Uu. uF  pWs9  g   K  VNK  	  up,          p\	        \        V4      \        V4      .4      '       g   R# \        P                  ! R4      p	V'       dP   \        P                  P                  V4      '       d+   \        P                  ! \        P                  ! V4      4      p	V F  pV	P                  V4       K  	  V F  p
V	P                  V
4       K  	  \        R4      p\!        V	4      pVP#                  V4      '       g   VR	,           V,           pV# u upi u upi u upi u upi )
r;  r2  r0  dnsnameserversr(   Nr   ;r   )ra  ro  r2  dns_searchdomainsanyr   r   
ResolvConfosr   isfiler   load_text_fileadd_nameserveradd_search_domainr   r]   r)   )rc  existing_dns_pathfound_nameserversfound_dns_searchr	  r=  r  r(   
nameservercontentsearchdomainheadercontent_strs   &&           r   _render_dnsRenderer._render_dnsI  sX    "224E	**$.%,,V4E-FG6)$++F<,@A + ~!$U|M:&:3 C:& !
 !"',x"8%"85 F"8%   52 ((("/"?"?""?J6 
"?" 
 ***+==!=F1 =!  %&$%
 
 ((,0A!B!B!,,##$56G ,J"":. ,,L%%l3 -c"'l%%f-- 4-+5Kc&
%"!s0   II3I I4II1I#>I#c                4   R p\         P                  ! R4      pV P                  4        Fh  pVR,           F  pRV9   g
   RV9   g   K  Rp M	  V'       d   K/  RV9   g   K8  VR,          R,          '       g   VR,          R,          '       g   Kf  Rp M	  V P                  '       g   V P                  '       g	   V'       d   VP                  R	RR
4       V'       g   R# RP                  \        4       RRP                  VP                  4       4      R.4      pV# )Fr   r;  r2  r0  Tr  r  r(   mainr   Nr   )	r   NetworkManagerConfra  r2  r  set_section_keypairr   r   rW   )rc  r   	iface_dnsr  r	  r=  outs   &&     r   _render_networkmanager_conf$Renderer._render_networkmanager_conf  s    	%88<"224E	**$.,&2H $I +
 IUN5\-00E%L4J4J 	 5, )))...''v>gg|~tTYYw}}-GNO
r   c                    < V ^8  d   QhRS[ /#    rc  r   )formatrn   s   "r   __annotate__Renderer.__annotate__  s     < <(<r   c                L   V P                   V,          P                  4        UUu/ uF   w  rEVP                  R 4      '       g   K  WEbK"  	  ppp\        P                  ! R 4      pVP                  V4       EF  pVR,          p	W),          p
VR8w  d   R V
n        VP                  4        F  w  rW9   g   K  W,          W&   K  	  VR8X  d*   RV
9   d#   V
P                  R4      '       d   RV
R&   MRV
R&   VP                  R4      '       d   RpVR8X  d   RpVP                  R4      W&   VR8X  dC   VP                  R	. 4      '       d+   R
RP                  VP                  R	4      4      ,          V
R&   VP                  R	. 4       FB  pW.,          pV.pVP                  VP                  4       V F  pT	pVR8X  d   RpVVR&   K  	  KD  	  VP                  R. 4      pV
P                  pV P                  V
VVP                  V4       V P                  V
VVV4       EK  	  R# u uppi )r   r   r   r   onoffr   rj  	LLADDRESSbridge_portsz%sr   BRIDGE_PORTSr/   r  r;  N)r  itemsr)   r   rb  ra  r   rB   r   ro  r   r   rG  r<  rO  )r  rc  rd  r   old_knew_kbridge_key_mapbridge_filterr	  r   r
  r  r  r:   bridged_iface_namebridged_cfgbridged_cfgs
bridge_cfgbridge_valuere  rK  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   H H c                .   \         P                  ! R 4      pVP                  V4       Fi  pVR,          pW&,          pR Vn        VP	                  R. 4      pVP
                  p	V P                  VVVP                  V4       V P                  WyW4       Kk  	  R# )r   r   r;  N)	r   rb  ra  r   rB   r   rG  r<  rO  )
r  rc  rd  r   	ib_filterr	  r   r
  re  rK  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                    < V ^8  d   QhRS[ /# r  r   )r  rn   s   "r   r  r    s     + + $+r   c                $   V'       g   V P                   p/ pVP                  4        F  pVR,          R8X  d   K  VP                  R4      ;'       g
    VR,          p\        VR,          W4      pVR8X  d#   VP	                  R4       VP	                  R4       V P                  WhV4       WV&   K  	  V P                  W%V4       V P                  W%V4       V P                  W%V4       V P                  W%V4       V P                  W%V4       / p	VP                  4        F  w  rV'       g   VP                  '       dV   VP                  4       WP                  &   VP                   F)  pV'       g   K  VP                  4       WP                  &   K+  	  VP                  '       g   K  \!        VP                  P"                  VP                  P$                  .RR	.4       F*  w  rW9  g   K  VP                  P                  V4      W&   K,  	  K  	  V	# )
z3Given state, return /etc/sysconfig files + contentsr  loopbackr`  r   r   r   r   r   r   )r   ra  rB   r   rI   r  rf  ry  r  r  r  r  r   r`   r   r   zipr   r   )r  r|   rc  r   r   rd  r	  r`  r
  contentsrL  cpathr   s   &&&&&        r   _render_sysconfigRenderer._render_sysconfig  s    I24"224EV}
*"YY{3DDuV}I$f/I x(v&$$Uv>(19% 5 	''vN##M6J##M6J%%mVL!!-H*002LAI...+4+>+>+@(!*!3!3I y3<3F3F3H0 "4 $'%%//1A1A1K1KLV$%LE ,*3*:*:*D*DU*K% 3 r   c                :   < V ^8  d   QhRS[ RS[S[,          RR/# )r  rc  r   returnN)r   r   dict)r  rn   s   "r   r  r  2  s2     D D#D D>D
 
Dr   c                  a V'       g   V P                   pR p\        P                  ! W0P                  4      pV P	                  WQV P
                  VR7      P                  4        F  w  rg\        P                  ! WgV4       K  	  V P                  '       dR   \        P                  ! W0P                  4      pV P                  WR7      p	V	'       d   \        P                  ! WV4       V P                  '       dQ   \        P                  ! W0P                  4      p
V P                  W4      pV'       d   \        P                  ! WV4       V P                  '       dL   V P                  V4      p\        P                  ! W0P                  4      p\        P                  ! VVVRR7       \        P                  ! W2P                  R4      4      pVP!                  R4      '       Edf   \        P"                  ! \$        P&                  P)                  V4      4       \+        4       R.pVP,                  '       d#   VP/                  R4       VP/                  R	4       \$        P&                  P1                  V4      '       d   \        P2                  ! V4      P5                  4        Fu  o\6        ;QJ d    V3R
 lR 4       F  '       g   K   RM	  RM! V3R
 lR 4       4      '       d   KE  S\+        4       P5                  4       9  g   Kd  VP/                  S4       Kw  	  \        P                  ! VRP9                  V4      R,           V4       R# R# )i  )r   )r  T)r  modepreserve_moder   r    zNETWORKING=yeszNETWORKING_IPV6=yeszIPV6_AUTOCONF=noc              3   .   <"   T F
  pVS9   x  K  	  R # 5ir2   r!   ).0settinglines   & r   	<genexpr>0Renderer.render_network_state.<locals>.<genexpr>h  s        , $tO,s   Fr   N)
NETWORKINGNETWORKING_IPV6r  )r   r   target_pathr   r  r   r  r   
write_filer   r  r   r  r   _render_persistent_netrB   r*   
ensure_dirr  r   dirnamer   use_ipv6rW  existsr  
splitlinesr  r   )r6   rc  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  sz    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C  , CCC  ,    !(A(A(CCd+ M OO		& 1D 8)1 .r   c                &   < V ^8  d   Qh/ S[ ;R&   # )r  r   )r  )r  rn   s   "r   r  r  4  s     t u r   )r   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=%sr2   )NN)rf   rg   rh   ri   rj   r  r  rV  rU  r   r7   classmethodr  rG  rO  r]  rf  ry  r  staticmethodr  r  r  r  r  r  __annotate_func__rk   rl   rm   s   @r   r   r   4  s    A 	du

 	hV<N 	/%X85
 	,0!285
L* 	
M( I3& 0 02 J6 J6X E, E,N @ @4  * <. <.| $ $L @ @D # #J < <|  $ + + +ZD D}  r   r   c           	     d    R Uu. uF  pVP                  V \        V4      R7      NK!  	  up# u upi )zeReturn list of supported names for vlan devices per RHEL doc
11.5. Naming Scheme for VLAN Interfaces.)r  vid)z{rdev}{vid:04}z{rdev}{vid}z{rdev}.{vid:04}z{rdev}.{vid})r  int)r  r  vs   && r   r  r  y  s>    


A 	
dC)
  s   %-c                     \         P                  ! 4       R ,          \        9  d   R# \        V 4      '       d   R# \	        V 4      '       d   R# R# )variantFT)r   system_infoKNOWN_DISTROSavailable_sysconfigavailable_nm_ifcfg_rhr  s   &r   	availabler	    s:    )$M96""V$$r   c                 X    \         P                   ! \        P                  ! V R 4      4      # )z;usr/lib*/NetworkManager/*/libnm-settings-plugin-ifcfg-rh.so)globr   r  r  s   &r   r  r    s)     99I	
 r   c                     R R.pRR.pV F$  p\         P                  ! W2V R7      '       d   K#   R# 	  RR.pV F?  p\        P                  P	                  \         P
                  ! W4      4      '       g   K>   R# 	  R# )	ifupifdownz/sbinz	/usr/sbin)r(   r  Fz/etc/sysconfig/network-scripts/network-functionszetc/sysconfig/configT)r   whichr  r   r  r  )r  expectedr(   pexpected_pathss   &    r   r  r    su    !H{#Fzz!6:: 
 	:N 77>>$**6566  r   )	almalinuxcentos
cloudlinux	eurolinuxfedoramiraclelinux	openeulerOpenCloudOSopenmandrivar   rockyr   	TencentOS	virtuozzo)#r2   )&r   r  rU   loggingr  r'   typingr   r   	cloudinitr   r   cloudinit.distros.parsersr   r   cloudinit.netr	   r
   r   r   r   cloudinit.net.network_stater   	getLoggerrf   r8  r  r   r$   r,   r.   rp   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   