*CeoTdZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z ddlmZddlmZmZmZd Zd ZGd d e j,Zy) znetplan apply command lineN)utils) ConfigManagerConfigurationError)apply_sriov_config)OvsDbServerNotRunningOvsDbServerNotInstalledapply_ovs_cleanupznetplan-ovs-cleanup.serviceceZdZfdZdZd dZedZegfdZede fdZ ed dZ ed d Z xZ S) NetplanApplycTt|dddd|_d|_d|_y)Napplyz.Apply current netplan config to running systemT) command_id descriptionleafF)super__init__ sriov_onlyonly_ovs_cleanupstate)self __class__s 4/usr/share/netplan/netplan_cli/cli/commands/apply.pyrzNetplanApply.__init__,s5 G%U"  $  % c|jjddd|jjddd|jjdd |j|_|j |j y) Nz --sriov-only store_truez0Only apply SR-IOV related configuration and exit)actionhelpz--only-ovs-cleanupz1Only clean up old OpenVSwitch interfaces and exitz--statez0Directory containing previous YAML configuration)r )parser add_argument command_applyfunc parse_args run_command)rs rrunzNetplanApply.run4s    &X ! Z   !5l&Y ! [   &X ! Z&&   rc t}|r||_|jrtj ||y|j rtj |dd|ydtjvr{tjd}| tdtj|ddddd dd g}|d k7r6|rtj|n|d k(r t!d td|zyd}t#t%j$d} t%j$d} || vr| j'|t#| } t%j$d} t)j*| t-j.} t#| }g}d}dtjvr#|j1ddgtj2}|j5t)j6|rKtj||d k7r1|r$tjtj8n t;dt-j.}t#t%j$d}|s| rd}t%j$d}||vr|j'|t#|}|s| rd}t%j$d}| j=t)j*||t#|}|s|rd}|rt)j>|rptAjBdtj || ||dg}t)jDdr|jGd dt)jHd||ntAjBdd}|rtAjBd t)jJrkd!| vrt)jLd!}|D] }|| vr t)jNd"d#|g"t)jRd|ntAjBd$t-j.}|jUtjW||}|jrpt|j}|jU|jXj[}|jXj[}tj]|||t-j.}|D]}tAjBd%| tj^d&d'd(d)|zgtj`tj`*tj^d&d+d)|zgtj`tj`*t-j.}|jcD]\}} | jed-}!|!stg|!thk\r&tAjjd.jm|!|S||vr*|!|vr&tAjBd/jm||!tj^d0d1d2d3|d4gtj`tj`*tj^d0d1d2d3|d-| jed-gtj`tj`*tj^gd5tj^d&d6gtj ||tjnjqd7rt)jHd8d9g|r t%j$d:D"cgc]!}"tjnjs|"#}#}"t%j$d;D"cgc]9}"|"judd?gdYwxYw)INFSNAPbusctlzmissing busctl utilitycallz--quietz--systemzio.netplan.Netplanz/io/netplan/NetplanApplyrz'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_PROFILEvalgrindz--leak-check=full)stderrz(the configuration could not be generatedTzDnetplan generated networkd configuration changed, reloading networkdznetplan-wpa-*.serviceznetplan-wpa@*.servicestop)syncz2no netplan generated networkd configuration existsz9netplan generated NM configuration changed, restarting NMlodevice disconnectz,no netplan generated NM configuration existsz%netplan triggering .link rules for %sudevadmz test-builtinnet_setup_linkz/sys/class/net/)stdoutr0testz#Ignoring device without syspath: %snamez5Interface name {} is too long. {} will not be renamedz+Interface rename {} -> {} already happened.iplinksetdevdown)r7triggerz--attr-match=subsystem=netsettlez*/run/systemd/system/netplan-regdom.servicestartznetplan-regdom.servicez1/run/systemd/system/*.wants/netplan-wpa-*.servicez1/run/systemd/system/*.wants/netplan-ovs-*.service/z:Falling back to a hard restart of systemd-networkd.servicerestartzsystemd-networkd.servicez/run/NetworkManager/devices) ignore_errors)nmcligeneralstatus )capture_outputtextz connectedg?)Irrrrprocess_sriov_configrprocess_ovs_cleanuposenvironshutilwhich RuntimeError subprocessr+sysexitPermissionErrorboolglobremover nm_interfaces netifaces interfacesextendSTDOUTappendget_generator_path EX_CONFIGrupdatesystemctl_daemon_reloadloggingdebugsystemctl_is_activeinsert systemctl nm_runningnm_get_connection_for_interfacerGCalledProcessErrorsystemctl_network_managerparseprocess_link_changesvirtual_interfaceskeysclear_virtual_links check_callDEVNULLitemsgetlen IF_NAMESIZEwarningformatpathexistsbasenameendswithOVS_CLEANUP_SERVICEnetworkctl_reloadnetworkctl_reconfigurenetworkd_interfaces ip_addr_flushrmtreeranger' returncodetimesleepstrr9nm_bring_interface_up))r run_generater2 exit_on_error state_dirconfig_managerr*resovs_cleanup_serviceold_files_networkd old_ovs_glob old_files_ovs old_nm_glob nm_ifaces old_files_nmgenerator_call generate_outdevicesrestart_networkdrestart_ovs_glob restart_ovsrestart_nm_glob restart_nm wpa_servicesloopback_connectionr5changescm prev_links curr_linksdevices_after_udevifacesettingsnew_namef netplan_wpa netplan_ovsr]cmd_outs) rr#zNetplanApply.command_applyAs& "DJ ??  - -nm L   " "  , ,^UE= Y  RZZ \\(+F~"#;<< //669j#7#8#7#* #%&Cax HHSMCZ)ACC'KcQSSO!$)),M"NOyy!DE , .    3 4\* ii RS '' Y5I5I5KL K(   *  ! !:/B"C D%,,Le6689 JOON<PTUU&()STT&&(  *K LM$6# 99%HI "2 2  # #$7 8+, }# ))$VW,,_gFG/* lJ   ) ) +  MM` a  , ,^]KYf g34L(()@A##A'>? OOFLt < MMN O   MMU V!9$*/*O*OPT*U'%FY.  X|V$DE //TB MMH I&&( 33G^L ::tzz*B HHJ..335J'::??AJ  , ,ZW M&&( MF MMA6 J M%%y.'7'86'A'C.8-?-?-7-?-? A %%y&'86'A'C-7-?-?-7-?-?A M'113&}} AOE8||F+Hx=K/OO$[$b$bckmr$stG#4F(FMM"O"V"VW\^f"gh%%tVUE5&&Q-7-?-?-7-?-?A%%tVU',e'-x||F/C'E.8-?-?-7-?-? A A. RSy(34 )).-H 77>>F G OOG&>%? @ 8< Bu8vw1277++A.wKw8< Bu8vI1"#**S3F-F"G77++A.IKI T''),,U-F-F-HI OOG&9%: F OOG[;%>T J "//IM& +##E* + MM7t L  + +G$ ? }$5r $A$..TMC~~* 1  $CJJ7JJsO $}$)<++,?@*=$M C&88R00 M CVL MNxI00 T \] ,F+GdSS TsDd;A5e?&f>>f ?;f;ee)ffAggc|D]N}|jD]9\}}t|tur|jdg}|D] }||k(s y;Py)zp Is this physical interface a member of a 'composite' virtual interface? (bond, bridge) r_TF)rwtypedictrx) compositesphy compositerrmembersrs ris_composite_memberz NetplanApply.is_composite_memberJsj $ $I(0 $ 8H~-",,|R8$$E|#$  $ $rc|stjdgStt|t|z }tt|j |}|D]} dddd|g}t j |!|S#t j$r'tjdj|Y]wxYw)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.r<r=deleter?zCould not delete interface {}) rgr{listr> intersectionrVrurnr|)rrrdropped_interfacesinterfaces_to_clearr=rs rrtz NetplanApply.clear_virtual_links[s OOY ZI!#j/C O"CD#3'9#:#G#G#PQ' ND NVXud;%%c* N"!00 N ? F Ft LM Ns#B7B=<B=rci}|j|jg}|jjD]$}|j}|s|j s t j||jr/tjdj|jotj||}|s/tjdj|j||k(r%tjdj||jr2tjdj|j||d|i||<'tjdj||S)z Go through the pending changes and pick what needs special handling. Only applies to non-critical interfaces which can be safely updated. zSkipping composite member {}z,Cannot find unique matching interface for {}z&Skipping correctly named interface: {}zLCannot rename {} ({} -> {}) at runtime (needs reboot), due to being criticalr;zLink changes: {})bridgesbondsphysical_interfacesvaluesset_name _has_matchrridrgrhr|rfind_matching_ifacer{critical)r_rrcomposite_interfacesnetdefnewnamecurrent_iface_names rrqz!NetplanApply.process_link_changesusJ . 6 68L8LM%88??A ng{ C&  MM#a& ! $ G OO;BB1E F F& > MM91 = = >s, B?5A B?*$B B?B::B?)TFTN)T)__name__ __module__ __qualname__rr'r# staticmethodrrtrrqrOrP __classcell__)rs@rrr*s GAR <>""2)))V > >rr)__doc__rgrQrWr[rVrSr^rr3r configmanagerrrsriovrovsr r r rrzNetplanCommandrrrrsR(!   >&SS4 K>5''K>r