fOddlZddlZddlZddlZddlZddlZddlmZmZddl 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 ZdZde 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 lddddddddd}|j|dd ||}|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:r9disabledr<r7N)rFrErDr5r8)r*KeyErrorr)rr= subnet_type method_mapr9s r_set_ip_methodzNMConnection._set_ip_methods %+$*   &(J7 5 ,F ;;v x (F 2  ;;v x (F 2v7I      fh ;(. FH% &*g6+ 5F.4DKK  + 5sBB32B3returnc|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!ct|drdnd}|dd|d}d|vr |d|dz }|j|d}||j||<d |vr|j||d |d y y ) z!Adds a ipv[46].route property.networkr6r5rdregatewayr[r^mtuN)rrVrra)rr^r=r) route_keys r _add_routezNMConnection._add_routes+5+;<&#$AeHo%67   qy)*+ +E33FGD ). FI& E>  # #FIueEl K r!dnsNct|rdnd}|jj|r<|j|dd|j|d|zdz|j|d<yy)zF Extends the ipv[46].dns property with a name server. r6r5rn;N)rrr$r*)rrnr=s r_add_nameserverzNMConnection._add_nameserversf+3/V ;; " "6 *   feR 0)-V)t#|||j||<]|dk(rh|d.d/urt#d0|jdd1<| t#| |jdd<|d2$|j%|d2|jdd3<|dk(r)d4|vr%|j|d4|jdd5<|dk(ry|d6D]H}|j&|}|j)d d d|j)d d |j+J|d2$|j%|d2|jdd3<|dk(rX| Vd7|jdd8<t#| |jdd<|d2$|j%|d2|jdd3<|dk(s|jj-|d3s|d+|jd d9<yycc}wcc}w):z Integrate information from network state interface information into the connection. Most of the work is done here. ethernetvlanbondbridge infinibandN)physicalrrrrloopbackr{z bond-masterrz slave-typez-mastermasterz bond-mode bond_miimonzbond-xmit-hash-policyzbond-num-grat-arpzbond-downdelayz bond-updelayzbond-fail-over-maczbond-primary-reselectz bond-primary) modemiimonxmit_hash_policy num_grat_arp downdelayupdelay fail_over_macprimary_reselectprimary bridge_stpbridge_bridgeprio)stppriorityrvlan_id)rrrrrrksubnetsr6r5rcrjroutesdns_nameserversrsrn 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_refr rLrgrmextendrdns_searchdomainsrrrvr>LOGwarningitems isinstanceboolrrget_connr*ryr%)riface network_stater _type_mapif_type slave_type _prop_map device_mtuipv4_mtufound_nameserversfound_dns_searchrfr=r^rnr nameservernm_proprUports rrender_interfacezNMConnection.render_interfaces#&  E&M* ?  E !JJ,3 L!&)  !6@DKK %l 32B(2B2Bj9,-3DKK %h / " G $'$; 3-)!5$;) $/ i) .5\ I& )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)9rLrrVrXrargrmrrrrvryr| staticmethodrrrr!rrr*s9 0 1 1G0+7Z* .5 LP3P4P $s)  1 < .. rHh'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__s r!c |j|Sr)rrrs rrzRenderer.get_conns''r!c\||jvr|j|jS|Sr)rryrs rrzRenderer.con_refs1 T%% %##F+446 6Mr!r templatesrMc|jD] }t|d|j|d<"|jD]'}|j|d}|j|||)|jj D]G\}}|j st ||}tj||jdItjt|tdy)Nri) iter_interfacesrrrrr|nm_conn_filenamer write_filercloud_init_nm_conf_filenameNM_IPV6_ADDR_GEN_CONF)rrrtargetrconnrrs rrender_network_statezRenderer.render_network_states#224 JE.:5=.ID  U6] + J#224 >E##E&M2D  ! !% = > !,,224 6LFD::<#FF3D OOD$))+u 5  6  ' /1F r!r)NN) rrrrr rrr rdictrrr!rrrsC (%)  # 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 rrrs5%%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 rrr)s+%%fj9N6I Xi[ 11r!cddlm}tjd|}d}|r tjgdt |xr|S#tj$rd}Y&wxYw)Nr) uses_systemdnmcli)rT) systemctlz is-enabledzNetworkManager.serviceF)cloudinit.distrosrrwhichProcessExecutionErrorr)rr nmcli_presentservice_actives r availabler/sa/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 getLoggerrrrrrrrrrrr!rrs  !  59 " & 1g!h'h'V 0 x  0 f= * <*2 2r!