Ë
    *CàeoT  ã                   ó¶   — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZmZmZ d	Zd
Z G d„ de
j,                  «      Zy)znetplan apply command lineé    Né   )Úutilsé   )ÚConfigManagerÚConfigurationError)Úapply_sriov_config)ÚOvsDbServerNotRunningÚOvsDbServerNotInstalledÚapply_ovs_cleanupznetplan-ovs-cleanup.serviceé   c                   óŠ   ‡ — e Zd Zˆ fd„Zd„ Zd
d„Zed„ «       Zeg fd„«       Zede	fd„«       Z
edd„«       Zedd	„«       Zˆ xZS )ÚNetplanApplyc                 óT   •— t         ‰| �  ddd¬«       d| _        d| _        d | _        y )NÚapplyz.Apply current netplan config to running systemT)Ú
command_idÚdescriptionÚleafF)ÚsuperÚ__init__Ú
sriov_onlyÚonly_ovs_cleanupÚstate)ÚselfÚ	__class__s    €ú4/usr/share/netplan/netplan_cli/cli/commands/apply.pyr   zNetplanApply.__init__,   s5   ø€ Ü‰Ñ GØ%UØ"ð 	ô 	$ð  ˆŒØ %ˆÔØˆ�
ó    c                 ó  — | j                   j                  ddd¬«       | j                   j                  ddd¬«       | j                   j                  dd¬	«       | j                  | _        | j	                  «        | j                  «        y )
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_command)r   s    r   ÚrunzNetplanApply.run4   sƒ   € Ø�‰× Ñ  ¸Ø&Xð 	!ô 	Zà�‰× Ñ Ð!5¸lØ&Yð 	!ô 	[à�‰× Ñ  Ø&Xð 	!ô 	Zð ×&Ñ&ˆŒ	à�‰ÔØ×ÑÕr   c                 ó®  — t        «       }|r|| _        | j                  rt        j	                  ||«       y | j
                  rt        j                  |dd|«       y dt        j                  v r{t        j                  d«      }|€t        d«      ‚t        j                  |ddddd	dd
g«      }|dk7  r6|rt        j                  |«       n|dk(  rt!        d«      ‚t        d|z  «      ‚y d}t#        t%        j$                  d«      «      }	t%        j$                  d«      }
||
v r|
j'                  |«       t#        |
«      }t%        j$                  d«      }t)        j*                  |t-        j.                  «       «      }t#        |«      }g }d }dt        j                  v r#|j1                  ddg«       t        j2                  }|j5                  t)        j6                  «       «       |rKt        j                  ||¬«      dk7  r1|r$t        j                  t        j8                  «       nt;        d«      ‚t-        j.                  «       }t#        t%        j$                  d«      «      }|s|	rd}t%        j$                  d«      }||v r|j'                  |«       t#        |«      }|s|rd}t%        j$                  d«      }|j=                  t)        j*                  ||«      «       t#        |«      }|s|rd}|rt)        j>                  «        |rptA        jB                  d«       t        j                  ||||«       dg}t)        jD                  d«      r|jG                  dd«       t)        jH                  d||¬«       ntA        jB                  d«       d}|rtA        jB                  d «       t)        jJ                  «       rkd!|v rt)        jL                  d!«      }|D ]   }||vrŒ	 t)        jN                  d"d#|g«       Œ" t)        jR                  d|¬«       ntA        jB                  d$«       t-        j.                  «       }|jU                  «        t        jW                  ||«      }| j                  rpt        | j                  «      }|jU                  «        |jX                  j[                  «       }|jX                  j[                  «       }t        j]                  |||«       t-        j.                  «       }|D ]Ž  }tA        jB                  d%|«       	 t        j^                  d&d'd(d)|z   gt        j`                  t        j`                  ¬*«       t        j^                  d&d+d)|z   gt        j`                  t        j`                  ¬*«       Œ� t-        j.                  «       }|jc                  «       D �]  \  }} | je                  d-«      }!|!sŒtg        |!«      th        k\  r&tA        jj                  d.jm                  |!|«      «       ŒS||v r*|!|v r&tA        jB                  d/jm                  ||!«      «       Œ�t        j^                  d0d1d2d3|d4gt        j`                  t        j`                  ¬*«       t        j^                  d0d1d2d3|d-| je                  d-«      gt        j`                  t        j`                  ¬*«       �Œ t        j^                  g d5¢«       t        j^                  d&d6g«       t        j	                  ||«       t        jn                  jq                  d7«      rt)        jH                  d8d9g«       |�r
t%        j$                  d:«      D �"cg c]!  }"t        jn                  js                  |"«      ‘Œ# }#}"t%        j$                  d;«      D �"cg c]9  }"|"ju                  d<tv        z   «      st        jn                  js                  |"«      ‘Œ; }$}"	 t)        jx                  «        t)        jz                  t)        j|                  «       «       t)        jH                  d8tv        gd¬«       t)        jH                  d8|#|$z   d¬«       |�rt)        j*                  ||«      }%|%D ]  }t)        j~                  |«       Œ t        j€                  d@d¬A«       t)        jR                  d8|¬«       d!|%v rd}|rg dB¢}&tƒ        dC«      D ]m  }'t        j„                  |&dd¬D«      }(|(j†                  dEk(  rt‰        jŠ                  dF«       Œ@dGt�        |(jŽ                  «      v r nt‰        jŠ                  dH«       Œo d!|%v r|rt)        j�                  |«       y y y y # t        jP                  $ r Y �Œw xY w# t        jP                  $ r tA        jB                  d,|«       Y �Œ“w xY wc c}"w c c}"w # t        jP                  $ r2 tA        jj                  d=«       t)        jH                  d>d?gd¬«       Y �ŒÙw xY w)INFÚSNAPÚbusctlzmissing busctl utilityÚcallz--quietz--systemzio.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 networkdznetplan-wpa-*.serviceznetplan-wpa@*.serviceÚstop)Úsyncz2no netplan generated networkd configuration existsÚ z9netplan generated NM configuration changed, restarting NMÚloÚdeviceÚ
disconnectz,no netplan generated NM configuration existsz%netplan triggering .link rules for %sÚudevadmztest-builtinÚnet_setup_linkz/sys/class/net/)Ústdoutr0   Útestz#Ignoring device without syspath: %sÚnamez5Interface name {} is too long. {} will not be renamedz+Interface rename {} -> {} already happened.ÚipÚlinkÚsetÚdevÚdown)r7   Útriggerz--attr-match=subsystem=netÚsettlez*/run/systemd/system/netplan-regdom.serviceÚstartznetplan-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.serviceÚrestartzsystemd-networkd.servicez/run/NetworkManager/devices)Úignore_errors)ÚnmcliÚgeneralÚstatusé
   )Úcapture_outputÚtexté   é   z

connectedg      à?)Ir   r   r   r   Úprocess_sriov_configr   Úprocess_ovs_cleanupÚosÚenvironÚshutilÚwhichÚRuntimeErrorÚ
subprocessr+   ÚsysÚexitÚPermissionErrorÚboolÚglobÚremover   Únm_interfacesÚ	netifacesÚ
interfacesÚextendÚSTDOUTÚappendÚget_generator_pathÚ	EX_CONFIGr   ÚupdateÚsystemctl_daemon_reloadÚloggingÚdebugÚsystemctl_is_activeÚinsertÚ	systemctlÚ
nm_runningÚnm_get_connection_for_interfacerG   ÚCalledProcessErrorÚsystemctl_network_managerÚparseÚprocess_link_changesÚvirtual_interfacesÚkeysÚclear_virtual_linksÚ
check_callÚDEVNULLÚitemsÚgetÚlenÚIF_NAMESIZEÚwarningÚformatÚpathÚexistsÚbasenameÚendswithÚOVS_CLEANUP_SERVICEÚnetworkctl_reloadÚnetworkctl_reconfigureÚnetworkd_interfacesÚip_addr_flushÚrmtreeÚranger'   Ú
returncodeÚtimeÚsleepÚstrr9   Únm_bring_interface_up))r   Úrun_generater2   Ú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_servicesÚloopback_connectionr5   ÚchangesÚcmÚ
prev_linksÚ
curr_linksÚdevices_after_udevÚifaceÚsettingsÚnew_nameÚfÚnetplan_wpaÚnetplan_ovsr]   ÚcmdÚ_Úouts)                                            r   r#   zNetplanApply.command_applyA   s‘  € Ü&›ˆÙØ"ˆDŒJð �?Š?Ü×-Ñ-¨n¸mÔLØà×"Ò"Ü×,Ñ,¨^¸UÀEÈ=ÔYØð ”R—Z‘ZÑô —\‘\ (Ó+ˆFØˆ~Ü"Ð#;Ó<Ð<ô —/‘/ 6¨6°9¸jØ#7Ø#8Ø#7Ø#*ð	#%ó &ˆCð �aŠxÙ Ü—H‘H˜S•MØ˜C’ZÜ)ØAóCð Cô 'ØKÈcÑQóSð Sð àOÐÜ!¤$§)¡)Ð,MÓ"NÓOÐÜ—y‘yÐ!DÓEˆà ,Ñ.Ø×ÑÐ 3Ô4Ü˜\Ó*ˆÜ—i‘iÐ RÓSˆÜ×'Ñ'¨´Y×5IÑ5IÓ5KÓLˆ	Ü˜KÓ(ˆàˆØˆØ¤§
¡
Ñ*Ø×!Ñ! :Ð/BÐ"CÔDÜ%×,Ñ,ˆLà×Ñœe×6Ñ6Ó8Ô9ÙœJŸO™O¨NÀ<ÔPÐTUÒUÙÜ—‘œŸ™Õ&ä(Ð)SÓTÐTä×&Ñ&Ó(ˆô  ¤§	¡	Ð*KÓ LÓMÐÙÑ$6Ø#ÐÜŸ9™9Ð%HÓIÐàÐ"2Ñ2Ø×#Ñ#Ð$7Ô8ÜÐ+Ó,ˆÙ™}à#ÐäŸ)™)Ð$VÓWˆØ×Ñœ×,Ñ,¨_¸gÓFÔGÜ˜/Ó*ˆ
Ù™lØˆJñ Ü×)Ñ)Ô+áÜ�M‰MÐ`Ôaä×,Ñ,¨^¸]ÈKÐYfÔgØ3Ð4ˆLô ×(Ñ(Ð)@ÔAØ×#Ñ# AÐ'>Ô?Ü�O‰O˜F L°tÖ<ä�M‰MÐNÔOà ÐÙÜ�M‰MÐUÔVÜ×ÑÔ!Ø˜9Ñ$Ü*/×*OÑ*OÐPTÓ*UÐ'à%ò �FØ YÑ.Ø ðÜŸ™ X¨|¸VÐ$DÕEðô ×/Ñ/°¸TÖBä�M‰MÐHÔIô ×&Ñ&Ó(ˆð 	×ÑÔÜ×3Ñ3°G¸^ÓLˆð �:Š:Ü˜tŸz™zÓ*ˆBØ�H‰HŒJØ×.Ñ.×3Ñ3Ó5ˆJØ'×:Ñ:×?Ñ?ÓAˆJÜ×,Ñ,¨Z¸ÀWÔMô ×&Ñ&Ó(ˆØò 	MˆFÜ�M‰MÐAÀ6ÔJðMÜ×%Ñ% y°.Ø'7Ø'8¸6Ñ'Að'Cô .8×-?Ñ-?Ü-7×-?Ñ-?õ	Aô
 ×%Ñ% y°&Ø'8¸6Ñ'Að'Cä-7×-?Ñ-?Ü-7×-?Ñ-?öAð	Mô '×1Ñ1Ó3Ðà&Ÿ}™}›ó 	A‰OˆE�8à—|‘| FÓ+ˆHÚÜ�x“=¤KÒ/Ü—O‘OÐ$[×$bÑ$bÐckÐmrÓ$sÔtØØ˜GÑ#¨Ð4FÑ(FÜ—M‘MÐ"O×"VÑ"VÐW\Ð^fÓ"gÔhØä×%Ñ% t¨V°U¸EÀ5È&Ð&QÜ-7×-?Ñ-?Ü-7×-?Ñ-?õAô ×%Ñ% t¨V°UØ',¨eØ'-¨x¯|©|¸FÓ/Cð'Eô .8×-?Ñ-?Ü-7×-?Ñ-?÷	Að	Aô. 	×ÑÒRÔSÜ×Ñ˜y¨(Ð3Ô4ô 	×)Ñ)¨.¸-ÔHô �7‰7�>‰>ÐFÔGÜ�O‰O˜GÐ&>Ð%?Ô@âÜ8<¿	¹	ÐBuÓ8vÖw°1œ2Ÿ7™7×+Ñ+¨AÕ.ÐwˆKÐwä8<¿	¹	ÐBuÓ8vö I°1Ø"#§*¡*¨SÔ3FÑ-FÔ"Gô Ÿ7™7×+Ñ+¨AÕ.ð IˆKð IðTÜ×'Ñ'Ô)Ü×,Ñ,¬U×-FÑ-FÓ-HÔIô �O‰O˜GÔ&9Ð%:ÀÕFä�O‰O˜G [°;Ñ%>ÀTÕJÚô "×/Ñ/°ÀÓIˆMØ&ò +�Ü×#Ñ# EÕ*ð+ô �M‰MÐ7ÀtÕLÜ×+Ñ+¨G¸$Õ?ð
 �}Ñ$Ø�áò 5�ô ˜r›ò 	$�AÜ$Ÿ.™.¨¸TÈÔM�Cð —~‘~¨Ò*ÜŸ
™
 1œØ Ø$¬¨C¯J©J«Ñ7ÙÜ—J‘J˜s•Oð	$ð �}Ñ$Ñ)<Ü×+Ñ+Ð,?Õ@ð *=Ð$ðM øôC &×8Ñ8ò ÚðûôR ×0Ñ0ò MÜ—‘ÐCÀV×LðMüòN xùòIøô ×0Ñ0ò Tä—‘Ð \Ô]Ü—‘ 	Ð,FÐ+GÈd×SÐSðTúsD   Ïd;ÔA5eÜ?&fÝ>>f
Þ?;f ä;eåeå)fæfæAgçgc                 óª   — | D ]N  }|j                  «       D ]9  \  }}t        |«      t        urŒ|j                  dg «      }|D ]  }||k(  sŒ	   y Œ; ŒP y)zp
        Is this physical interface a member of a 'composite' virtual
        interface? (bond, bridge)
        r_   TF)rw   ÚtypeÚdictrx   )Ú
compositesÚphyÚ	compositer¯   r©   Úmembersr¨   s          r   Úis_composite_memberz NetplanApply.is_composite_memberJ  sj   € ð $ò 	$ˆIØ(Ÿ™Ó0ò $‘��8Ü˜H“~¬Ñ-ØØ"Ÿ,™, |°RÓ8�Ø$ò $�EØ “|Û#ñ$ñ	$ð	$ð r   c                 ó€  — |st        j                  d«       g S t        t        | «      t        |«      z
  «      }t        t        |«      j	                  |«      «      }|D ]  }	 dddd|g}t        j                  |«       Œ! |S # t
        j                  $ r' t        j                  dj                  |«      «       Y Œ]w xY w)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?   zCould not delete interface {})	rg   r{   Úlistr>   ÚintersectionrV   ru   rn   r|   )r¥   r¦   r›   Údropped_interfacesÚinterfaces_to_clearr=   r®   s          r   rt   z NetplanApply.clear_virtual_links[  s½   € ñ Ü�O‰OÐYÔZØˆIä!¤# j£/´C¸
³OÑ"CÓDÐô #¤3Ð'9Ó#:×#GÑ#GÈÓ#PÓQÐØ'ò 	NˆDðNØ˜V X¨u°dÐ;�Ü×%Ñ% cÕ*ð	Nð "Ð!øô ×0Ñ0ò NÜ—‘Ð ?× FÑ FÀtÓ LÖMðNús   Á#BÂ7B=Â<B=r�   c                 ó  — i }|j                   |j                  g}|j                  j                  «       D �]$  }|j                  }|sŒ|j
                  sŒ t        j                  ||j                  «      r/t        j                  dj                  |j                  «      «       Œot        j                  | |«      }|s/t        j                  dj                  |j                  «      «       Œ¶||k(  r%t        j                  dj                  |«      «       Œà|j                  r2t        j                  dj                  |j                  ||«      «       �Œd|i||<   �Œ' t        j                  dj                  |«      «       |S )z£
        Go through the pending changes and pick what needs special handling.
        Only applies to non-critical interfaces which can be safely updated.
        zSkipping composite member {}z,Cannot find unique matching interface for {}z&Skipping correctly named interface: {}zLCannot rename {} ({} -> {}) at runtime (needs reboot), due to being criticalr;   zLink changes: {})ÚbridgesÚbondsÚphysical_interfacesÚvaluesÚset_nameÚ
_has_matchr   r¸   Úidrg   rh   r|   r   Úfind_matching_ifacer{   Úcritical)r_   r�   r£   Úcomposite_interfacesÚnetdefÚnewnameÚcurrent_iface_names          r   rq   z!NetplanApply.process_link_changesu  sJ  € ð ˆØ .× 6Ñ 6¸×8LÑ8LÐMÐð %×8Ñ8×?Ñ?ÓAó 	<ˆFØ—o‘oˆGÙØØ×$Ò$ØÜ×/Ñ/Ð0DÀfÇiÁiÔPÜ—‘Ð<×CÑCÀFÇIÁIÓNÔOð ä!&×!:Ñ!:¸:ÀvÓ!NÐÙ%Ü—‘Ð N× UÑ UÐV\×V_ÑV_Ó `ÔaØØ! WÒ,ä—‘ÐF×MÑMÈgÓVÔWØØ�Šä—‘Ð nß!'¡¨¯	©	Ð3EÀwÓ!OôQáð ,2°7Ð*;ˆGÐ&Ó'ð7	<ô: 	�‰Ð(×/Ñ/°Ó8Ô9Øˆr   c                 óÐ   — 	 t        | «       y # t        j                  $ rD}t        j                  t        |«      «       |rt        j                  d«       Y d }~y Y d }~y d }~ww xY w)NrN   )r   r   Úconfig_errorsrg   Úerrorr‹   rW   rX   )r�   rŽ   Úes      r   rO   z!NetplanApply.process_sriov_config¡  sJ   € ð	Ü˜~Õ.øÜ×"Ñ"ò 	Ü�M‰Mœ#˜a›&Ô!ÙÜ—‘˜—‘ô ûð	ús   ‚ ŽA%¡5A Á A%c                 ó„  — 	 t        | ||«       y # t        t        f$ rD}t        j                  t        |«      «       |rt        j                  d«       Y d }~y Y d }~y d }~wt        $ r.}t        j                  dj                  |«      «       Y d }~y d }~wt        $ r }t        j                  d|«       Y d }~y d }~ww xY w)NrN   zCannot call Open vSwitch: {}.zCannot call Open vSwitch: %s.)r   ÚOSErrorrU   rg   rÏ   r‹   rW   rX   r	   r{   r|   r
   rh   )r�   Úovs_oldÚovs_currentrŽ   rÐ   s        r   rP   z NetplanApply.process_ovs_cleanupª  s�   € ð		>Ü˜n¨g°{ÕCøÜœÐ&ò 	Ü�M‰Mœ#˜a›&Ô!ÙÜ—‘˜—‘ô ûä$ò 	GÜ�O‰OÐ;×BÑBÀ1ÓE×FÑFûÜ&ò 	>Ü�M‰MÐ9¸1×=Ñ=ûð	>ús,   ‚ �B?Ÿ5AÁB?Á*$BÂB?ÂB:Â:B?)TFTN)T)Ú__name__Ú
__module__Ú__qualname__r   r'   r#   Ústaticmethodr¸   rt   r   rq   rO   rP   Ú__classcell__)r   s   @r   r   r   *   s„   ø„ ôòóGAðR ñó ðð  Ø<>ò "ó ð"ð2 ð)¸ò )ó ð)ðV òó ðð ò
>ó ô
>r   r   )Ú__doc__rg   rQ   rW   r[   rV   rS   r^   r‰   r3   r   Úconfigmanagerr   r   Úsriovr   Úovsr	   r
   r   r�   rz   ÚNetplanCommandr   © r   r   ú<module>rà      sR   ðñ( !ã Û 	Û 
Û Û Û Û Û å ß >Ý &ß SÑ Sð 4Ð à€ôK>�5×'Ñ'õ K>r   