o ´ edõOã@s dZddlZddlZddlZddlZddlZddlZddlZddlZddl m m Z ddl m Z mZddlmZddlmZmZdZdZGdd „d e jƒZdS) znetplan apply command lineéN)Ú ConfigManagerÚConfigurationError)Úapply_sriov_config)ÚOvsDbServerNotRunningÚapply_ovs_cleanupznetplan-ovs-cleanup.serviceécsxeZdZ‡fdd„Zdd„Zddd „Zed d „ƒZegfd d „ƒZede fdd„ƒZ eddd„ƒZ eddd„ƒZ ‡Z S)Ú NetplanApplycs(tƒjddddd|_d|_d|_dS)NÚapplyz.Apply current netplan config to running systemT)Ú command_idÚ descriptionÚleafF)ÚsuperÚ__init__Ú sriov_onlyÚonly_ovs_cleanupÚstate©Úself©Ú __class__©ú0/usr/share/netplan/netplan/cli/commands/apply.pyr,sþ zNetplanApply.__init__cCsP|jjdddd|jjdddd|jjddd |j|_| ¡| ¡dS) Nz --sriov-onlyÚ store_truez0Only apply SR-IOV related configuration and exit)ÚactionÚhelpz--only-ovs-cleanupz1Only clean up old OpenVSwitch interfaces and exitz--statez0Directory containing previous YAML configuration)r)ÚparserÚ add_argumentÚ command_applyÚfuncÚ parse_argsÚ run_commandrrrrÚrun4s ÿ ÿÿ zNetplanApply.runTFNc& Cstƒ}|r||_|jrt ||¡dS|jr t |dd|¡dSdtjvr[t   d¡}|dur2t dƒ‚t   |ddddd dd g¡}|d krY|rKt |¡n|d krStd ƒ‚t d|ƒ‚dSd}tt d¡ƒ} t d¡} || vrr|  |¡t| ƒ} t d¡} t | t ¡¡} t| ƒ}g}d}dtjvrš| ddg¡t j}| t ¡¡|r¹t j ||dd kr¹|rµt tj¡ntdƒ‚t ¡}tt d¡ƒ}|sÊ| rÊd}t d¡}||vrØ| |¡t|ƒ}|sâ| râd}t d¡}|  t ||¡¡t|ƒ}|sú|rúd}|rt ¡|r)t  !d¡t || ||¡dg}t "d¡r | #d d¡tj$d||dnt  !d¡|rft  !d¡t %¡re|D] }|| vrFq=z t &d d!|g¡Wq=t j'y]Yq=wtj(d|dnt  !d"¡t ¡}| )¡t *||¡}|jr—t|jƒ}| )¡|j+ ,¡}|j+ ,¡}t -|||¡t ¡}|D]<}t  !d#|¡z"t j.d$d%d&d'|gt j/t j/d(t j.d$d)d'|gt j/t j/d(Wqt j'yÙt  !d*|¡Yqwt ¡}| 0¡D]X\}}| 1d+¡} | r9t2| ƒt3krt  4d, 5| |¡¡qâ||vr| |vrt  !d- 5|| ¡¡qât j.d.d/d0d1|d2gt j/t j/d(t j.d.d/d0d1|d+| 1d+¡gt j/t j/d(qât  .gd3¢¡t  .d$d4g¡t ||¡tj6 7d5¡r]t $d6d7g¡|r®d8d9„t d:¡Dƒ}!d;d9„t d<¡Dƒ}"z t 8¡t 9t :¡¡Wnt j'yšt  4d=¡tj$d>d?gddYnwtj$d6t;gddtj$d6|!|"dd|rt ||¡D]}t <|¡q·t j=d@ddAtj(d6|d|rgdB¢}#t>dCƒD],}$t j?|#dddD}%|%j@dEkrðtA BdF¡qÙdGtC|%jDƒvrûdStA BdH¡qÙdSdSdS)INFÚSNAPÚbusctlzmissing busctl utilityÚcallz--quietz--systemzio.netplan.Netplanz/io/netplan/NetplanÚApplyré‚z'failed to communicate with dbus servicez1failed to communicate with dbus service: error %sz//run/systemd/system/netplan-ovs-cleanup.servicez/run/systemd/network/*netplan-*z!/run/systemd/system/netplan-ovs-*z0/run/NetworkManager/system-connections/netplan-*ÚNETPLAN_PROFILEÚvalgrindz--leak-check=full)Ústderrz(the configuration could not be generatedTzDnetplan generated networkd configuration changed, reloading networkdznetplan-wpa-*.serviceznetplan-wpa@*.serviceÚstop)Úsyncz2no netplan generated networkd configuration existsz9netplan generated NM configuration changed, restarting NMÚdeviceÚ disconnectz,no netplan generated NM configuration existsz%netplan triggering .link rules for %sÚudevadmz test-builtinÚnet_setup_linkz/sys/class/net/)Ústdoutr)Útestz#Ignoring device without syspath: %sÚnamez5Interface name {} is too long. {} will not be renamedz+Interface rename {} -> {} already happened.ÚipÚlinkÚsetÚdevÚdown)r.Útriggerz--attr-match=subsystem=netÚsettlez*/run/systemd/system/netplan-regdom.serviceÚstartznetplan-regdom.servicecSsg|]}tj |¡‘qSr)ÚosÚpathÚbasename©Ú.0ÚfrrrÚ sz.NetplanApply.command_apply..z1/run/systemd/system/*.wants/netplan-wpa-*.servicecSs&g|]}| dt¡stj |¡‘qS)ú/)ÚendswithÚOVS_CLEANUP_SERVICEr;r<r=r>rrrrAs ÿz1/run/systemd/system/*.wants/netplan-ovs-*.servicez:Falling back to a hard restart of systemd-networkd.serviceÚrestartzsystemd-networkd.servicez/run/NetworkManager/devices)Ú ignore_errors)ÚnmcliÚgeneralÚstatusé )Úcapture_outputÚtextééz connectedgà?)ErrrrÚprocess_sriov_configrÚprocess_ovs_cleanupr;ÚenvironÚshutilÚwhichÚ RuntimeErrorÚ subprocessr$ÚsysÚexitÚPermissionErrorÚboolÚglobÚremoveÚutilsÚ nm_interfacesÚ netifacesÚ interfacesÚextendÚSTDOUTÚappendÚget_generator_pathÚ EX_CONFIGrÚupdateÚsystemctl_daemon_reloadÚloggingÚdebugÚsystemctl_is_activeÚinsertÚ systemctlÚ nm_runningrGÚCalledProcessErrorÚsystemctl_network_managerÚparseÚprocess_link_changesÚvirtual_interfacesÚkeysÚclear_virtual_linksÚ check_callÚDEVNULLÚitemsÚgetÚlenÚ IF_NAMESIZEÚwarningÚformatr<ÚexistsÚnetworkctl_reloadÚnetworkctl_reconfigureÚnetworkd_interfacesrDÚ ip_addr_flushÚrmtreeÚranger!Ú returncodeÚtimeÚsleepÚstrr0)&rÚ run_generater+Ú exit_on_errorÚ state_dirÚconfig_managerr#ÚresÚovs_cleanup_serviceÚold_files_networkdÚ old_ovs_globÚ old_files_ovsÚ old_nm_globÚ nm_ifacesÚ old_files_nmÚgenerator_callÚ generate_outÚdevicesÚrestart_networkdÚrestart_ovs_globÚ restart_ovsÚrestart_nm_globÚ restart_nmÚ wpa_servicesr,ÚchangesÚcmÚ prev_linksÚ curr_linksÚdevices_after_udevÚifaceÚsettingsÚnew_nameÚ netplan_wpaÚ netplan_ovsÚcmdÚ_ÚoutrrrrAs\    ü ÿÿ              ÿ€      þüÿ ýÿ þ  þü€  ý   è zNetplanApply.command_applycCsV|D]&}| ¡D]\}}t|ƒturq| dg¡}|D] }||kr&dSqqqdS)zp Is this physical interface a member of a 'composite' virtual interface? (bond, bridge) r_TF)rvÚtypeÚdictrw)Ú compositesÚphyÚ compositer§r¢Úmembersr¡rrrÚis_composite_member8s   ÿÿüz NetplanApply.is_composite_memberc Cs†|s t d¡gStt|ƒt|ƒƒ}tt|ƒ |¡ƒ}|D]"}zdddd|g}t |¡Wqtjy@t d |¡¡Yqw|S)a% Calculate the delta of virtual links. And remove the links that were dropped from the YAML config, if they were not dropped by the backend already. We can make use of the netplan netdef ids, as those equal the interface name for virtual links. z;Cannot clear virtual links: no network interfaces provided.r3r4Údeleter6zCould not delete interface {}) rgrzÚlistr5Ú intersectionrUrtrmr{)ržrŸr•Údropped_interfacesÚinterfaces_to_clearr4r¦rrrrsIs ÿz NetplanApply.clear_virtual_linksrŠcCsÒi}|j|jg}|j ¡D]Q}|j}|sq |jsq t ||j¡r*t   d  |j¡¡q t   ||¡}|s {}) at runtime (needs reboot), due to being criticalr2zLink changes: {})ÚbridgesÚbondsÚphysical_interfacesÚvaluesÚset_nameÚ has_matchrr¯Úidrgrhr{r\Úfind_matching_ifacerzÚcritical)r_rŠrœÚcomposite_interfacesÚnetdefÚnewnameÚcurrent_iface_namerrrrpcs4   ÿz!NetplanApply.process_link_changesc Csbzt|ƒWdStjy0}zt t|ƒ¡|r%t d¡WYd}~dSWYd}~dSd}~ww)NrN)rr\Ú config_errorsrgÚerrorr†rVrW)rŠrˆÚerrrrOsÿ€þz!NetplanApply.process_sriov_configc Csœz t|||ƒWdSttfy3}zt t|ƒ¡|r(t d¡WYd}~dSWYd}~dSd}~wtyM}zt  d  |¡¡WYd}~dSd}~ww)NrNzCannot call Open vSwitch: {}.) rÚOSErrorrTrgrÃr†rVrWrrzr{)rŠÚovs_oldÚ ovs_currentrˆrÄrrrrP˜sÿ€€ÿz NetplanApply.process_ovs_cleanup)TFTN)T)Ú__name__Ú __module__Ú __qualname__rr!rÚ staticmethodr¯rsrrprOrPÚ __classcell__rrrrr*s  x + r)Ú__doc__rgr;rVrZrUrRr^r„Únetplan.cli.utilsÚclir\Únetplan.configmanagerrrÚnetplan.cli.sriovrÚnetplan.cli.ovsrrrDryÚNetplanCommandrrrrrÚs