x[hbddlZddlZddlZddlZddlZddlZddlmZmZddl m Z m Z ddl m Z mZmZmZddlmZddlmZdZdZd Zd Zej2eZGd d ZGd dej:ZddZddZdZ ddZ!ddZ"y)N)ListOptional)subputil)is_ipv6_addressis_ipv6_networkrenderersubnet_is_ipv6) NetworkState)available_nm_ifcfg_rhz/etc/NetworkManagerz/usr/lib/NetworkManagerz/etc/sysconfig/network-scriptsz# This is generated by cloud-init. Do not edit. # [.config] enable=nm-version-min:1.40 [connection.30-cloud-init-ip6-addr-gen-mode] # Select EUI64 to be used if the profile does not specify it. ipv6.addr-gen-mode=0 ceZdZdZdZdZdZdZdZdZ dZ d e fd Z d Z d Zd ZdZdZde d dfdZdee d dfdZdZdZedZdZdZy) NMConnectionz/Represents a NetworkManager connection profile.ctjd}tj|_t |j_d|t tj||dd|jd<ddi|jd<y ) z Initializes the connection with some very basic properties, notably the UUID so that the connection can be referred to. z$a3924cb8-09e0-43e9-890b-77972a800108z cloud-init 120)iduuidzautoconnect-priority connectionz%org.freedesktop.NetworkManager.originz cloud-inituserN)rUUID configparser ConfigParserconfigstr optionxformuuid5)selfcon_id CI_NM_UUIDs ?/usr/lib/python3/dist-packages/cloudinit/net/network_manager.py__init__zNMConnection.__init__-sxYYEF "//1 "%  x( :v67$)%  L! 4\  Fc|jj|si|j|<|jj||s||j||<yy)z_ Sets a property unless it's already set, ensuring the section exists. Nr has_section has_optionrsectionoptionvalues r _set_defaultzNMConnection._set_defaultEsP {{&&w/#%DKK {{%%gv6+0DKK  (7r!ct|jj|xr|jj||S)zf Checks if a config option is set. Returns True if it is, else returns False. r#rr'r(s r_config_option_is_setz"NMConnection._config_option_is_setPs6 {{&&w/ DKK4J4J V5  r!cL|j||r|j||Sy)z] Returns the value of a config option if its set, else returns None. Nr-rr,s r_get_config_optionzNMConnection._get_config_optionYs+  % %gv 6;;w'/ /r!cN|j||r||j||<yy)z Overrides the value of a config option if its already set. Else, if the config option is not set, it does nothing. Nr/r&s r_change_set_config_optionz&NMConnection._change_set_config_optioncs,  % %gv 6+0DKK  ( 7r!cdD]/}|j|ddk7ry|j|ddvs/ydD]}|j|ddy)zt If for both ipv4 and ipv6, 'may-fail' is set to be False, set it to True for both of them. ipv4ipv6may-failfalseNmethod)dhcpautotrue)r0r2)rfamilys r$_set_mayfail_true_if_both_false_dhcpz1NMConnection._set_mayfail_true_if_both_false_dhcpksr ' F&&vz:gE&&vx8A   ' GF  * *6:v F Gr!c tddddddddd}d}|j|d| |r||}|j|ddk(ry |j|ddk(r|dk(ry |d vr|jd dd||j|d<|j|dd y #t$rd}d|j|d<YwxYw) z} Ensures there's appropriate [ipv4]/[ipv6] for given family appropriate for given configuration type manualr;r:)staticstatic6dhcp6 ipv6_slaacipv6_dhcpv6-statelessipv6_dhcpv6-statefuldhcp4r:disabledr9r<r7N)rFrErDr5r8)r*KeyErrorr)rr= subnet_type method_mapr9s r_set_ip_methodzNMConnection._set_ip_methods %+$*   &(F3 5#K0 ;;v x (F 2  ;;v x (F 2v7I      fh ;(. FH% &*g6G 5F.4DKK  + 5sBB76B7returnc|jj|si|j|<tjdD](}||}|jj ||r&|cSy)N not_possible)rr$ itertoolscountr%)rr' key_prefixindexkeys r_get_next_numbered_sectionz'NMConnection._get_next_numbered_sectionsf{{&&w/#%DKK __Q' EL(C;;))'37  r!cL|j||}||j||<y)z Adds a numbered property, such as address or route, ensuring the appropriate value gets used for . N)rVr)rr'rSr)rUs r _add_numberedzNMConnection._add_numbereds) --gzB$) GS!r!c|d}|j|j|}|r |d|d|n|d||j||<y)a:Add route options to a given route Example: Given: section: ipv4 route: route0 key: mtu value: 500 Create line under [ipv4] section: route0_options=mtu=500 If the line already exists, then append the new key/value pair _options,=N)rget)rr'routerUr) numbered_key route_optionss r_add_route_optionszNMConnection._add_route_optionsse )  G,00> oQse1UG ,5%! G\*r!cX|ddzt|dz}|j|d|y)z5 Adds an ipv[46]address property. address/prefixN)rrX)rr=subnetr)s r _add_addresszNMConnection._add_addresss4 y!C'#fX.>*?? 69e4r!c(d}|ddk(xr|d|vS)N)z::z0.0.0.0rernetwork)rr^ default_netss r_is_default_routezNMConnection._is_default_routes%( X!#Hi(8L(HHr!cNt|drdnd}|dd|d}d|vr |d|dz }d|vr3|j|r|d|j|d <n |d|dz }|j|d }||j||<d |vr|j ||d |d y y ) z!Adds a ipv[46].route property.rir6r5rdregatewayr[metricz route-metricr^mtuN)rrlrrVra)rr^r=r) route_keys r _add_routezNMConnection._add_routes+5+;<&#$AeHo%67   qy)*+ +E u %%e,9>x8I F#N31U8_-..33FGD ). FI& E>  # #FIueEl K r!dnsNct|rdnd}|jj|rR|j|ddk7r<|j |dd|j|d|zdz|j|d<yyy) zF Extends the ipv[46].dns property with a name server. r6r5r9rHrs;N)rrr$r0r*)rrsr=s r_add_nameserverzNMConnection._add_nameservers+3/V KK # #F +''9ZG   feR 0)-V)d?d@iiidA}|dB}d} g} g} |dk(r|dCsdDD]} |j| d|dCD]} t| rdEndF} |j| | ddG| vr|j | | dH| vr| dH|j| dH<| dID]}|j |dJ| vr| j | dJdK| vr| j | dK| dFk(sdB| vs| dB} dL|vr:| |dLdMDcgc]}|| vr| c}z } | |dLdNDcgc]}|| vr| c}z } | s|jr |j} | s|jr |j} | D]}|j|| r|j| |j| |} | |k(stjdO|dP|| ||jD][\}}||vr ||t||t r||rdQndR|j||<>t#|||j||<]|dk(rh|dSdTurt#dU|jddV<| t#| |jddB<|dW$|j%|dW|jddX<|dk(r)dY|vr%|j|dY|jddZ<|dk(r:| 8d|jvri|jd<t#| |jddB<|dk(ry|d[D]H}|j&|}|j)d d d|j)d d |j+J|dW$|j%|dW|jddX<|dk(rX| Vd\|jdd]<t#| |jddB<|dW$|j%|dW|jddX<|dk(s|jj-|dXs|dP|jd d^<yycc}wcc}w)_z Integrate information from network state interface information into the connection. Most of the work is done here. ethernetvlanbondbridge infinibandN)physicalrrrrloopbackrz bond-masterrz slave-typez-mastermastermodez bond-modemiimonz bond-miimonxmit_hash_policyzbond-xmit_hash_policy num_grat_arpzbond-num_grat_arp downdelayzbond-downdelayupdelayz bond-updelay fail_over_maczbond-fail_over_macprimary_reselectzbond-primary_reselectprimaryz bond-primary active_slavezbond-active_slavead_actor_sys_priozbond-ad_actor_sys_prioad_actor_systemzbond-ad_actor_system ad_selectzbond-ad_selectad_user_port_keyzbond-ad_user_port_keyall_slaves_activezbond-all_slaves_activearp_all_targetszbond-arp_all_targets arp_intervalzbond-arp_intervalzbond-arp_ip_targetzbond-arp_validatezbond-lacp_ratezbond-lp_intervalzbond-min_linkszbond-num_unsol_nazbond-packets_per_slavezbond-peer_notif_delayzbond-resend_igmpzbond-tlb_dynamic_lbzbond-use_carrier) arp_ip_target arp_validate lacp_rate lp_interval min_links num_unsol_napackets_per_slavepeer_notif_delay resend_igmptlb_dynamic_lb use_carrier bridge_stpbridge_bridgeprio)stppriorityrvlan_id)rrrrrrpsubnetsr4r6r5rcrnroutesdns_nameserversrxrs nameserverssearchzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.namer<r8 wakeonlanT@z wake-on-lan mac_addressz mac-addresszvlan-raw-deviceparent bridge_portsdatagramztransport-modezinterface-name)rcon_refrLr rgrrextendrdns_searchdomainsrwr{r>LOGwarningitems isinstanceboolrrget_connr*r~r%)riface network_stater _type_mapif_type slave_type _prop_map device_mtuipv4_mtufound_nameserversfound_dns_searchr=rfr^rsr nameservernm_proprUports rrender_interfacezNMConnection.render_interface5s#&  E&M* ?  E !JJ,3 L!&)  !6@DKK %l 32B(2B2Bj9,-3DKK %h / " G. .-.#$; .  3 .-.>. !5.#$;.>. 3."$%=#.&"#9'.*-+..#$;/.0$%=1.2"#93.4 35.6"6 3-1- 3%=$;1"71[.`$/ iq9 v5\  f U9%5+ 2##FD1 2I& )F-f5V6F   v 7F"!!&&1F"17 1B F#I.) '& '!F*!((0A)BCv% ''|(<=EVO!%=! )& E>  < 6"//"   #El84!!11!  !]%B%B - = = M$C$C,>> , -J   , -   !1 2 113  !H:% KK>f   &g.446 @LGS%Sz!%*d+#CjFg G$W-14E#J G$W- @ j [!T)9 S S#ctj}|jj|dd}||j zS)z Stringify. F)space_around_delimitersz2# Generated by cloud-init. Changes will be lost. )ioStringIOrwritegetvalue)rbufheaders rdumpzNMConnection.dump"s< kkm #u=G &&r!)__name__ __module__ __qualname____doc__r r*r-r0r2r>rLrrVrXrargrlrrrwrr{r~r staticmethodrrrrjr!rrr*s9 0 1 1G0;7z* .5IL$ P3 P4 P$s) 1 < .. kHZ'r!rcDeZdZdZd dZdZdZ d dedee ddfd Z y) RendererzRenders network information in a NetworkManager keyfile format. See https://networkmanager.dev/docs/api/latest/nm-settings-keyfile.html Nc i|_||_yN) connectionsr)rrs rr zRenderer.__init__3s r!c |j|Sr)rrrs rrzRenderer.get_conn7s''r!c\||jvr|j|jS|Sr)rr~rs rrzRenderer.con_ref:s1 T%% %##F+446 6Mr!r templatesrMcB|jD]5}|jdxs|d}t|d|j|<7|jD]<}|jdxs|d}|j|}|j |||>|jj D]G\}}|j st||}tj||jdItjt|tdy)N config_idri) iter_interfacesr]rrrrrnm_conn_filenamer write_filercloud_init_nm_conf_filenameNM_IPV6_ADDR_GEN_CONF) rrrtargetrconn_keyconnrrs rrender_network_statezRenderer.render_network_stateAs#224 EEyy->vH)5eFm)DD  X & E #224 >Eyy->vH##H-D  ! !% = > !,,224 6LFD::<#FF3D OOD$))+u 5  6  ' /1F r!r)NN) rrrrr rrr rdictrrjr!rrr-sC (%)  # D>   r!rcPtj|t}d|d}|d|S)Nz cloud-init-z .nmconnectionz/system-connections/r target_path NM_RUN_DIR)rrtarget_con_dircon_files rrrbs5%%fj9NVHM2H 1( <>) $)>)@+G4 y19;t;r!cHtj|t}d}|d|S)Nz$30-cloud-init-ip6-addr-gen-mode.confz/conf.d/r)rr conf_files rrrs+%%fj9N6I Xi[ 11r!cddlm}tjd|}d}|r tjgdt |xr|S#tj$rd}Y&wxYw)Nr) uses_systemdnmcli)rT) systemctlz is-enabledzNetworkManager.serviceF)cloudinit.distrosr rwhichProcessExecutionErrorr)rr  nmcli_presentservice_actives r availablersa/JJwv6MN~ # IIK L   1>1)) #"N #sAA&%A&r)#rrrQloggingrrtypingrr cloudinitrr cloudinit.netrrr r cloudinit.net.network_stater cloudinit.net.sysconfigr r NM_LIB_DIRrr getLoggerrrrrrrrrrrjr!rrs  !  59 " & 1g!@'@'F2 x  2 j= * <*2 2r!