
    g!                         d dl Z d dlZd dlZddlmZmZ dZdZdddZdd	d
dZ	 G d de
      Z G d de
      Zd Zd Zd Zd Zd Zd Zy)    N   )systemctl_is_activesystemctl_is_installedz/usr/bin/ovs-vsctlzovsdb-server.servicefalse)mcast_snooping_enablerstp_enable)del-sslzget-ssl)zdel-fail-modezget-fail-mode)zdel-controllerzget-controller)zset-sslzset-fail-modezset-controllerc                       e Zd Zy)OvsDbServerNotRunningN__name__
__module____qualname__     )/usr/share/netplan/netplan_cli/cli/ovs.pyr   r   )       r   r   c                       e Zd Zy)OvsDbServerNotInstalledNr   r   r   r   r   r   -   r   r   r   c                 n   t         j                  |      }|It        d| |||g}t        j                  ddj                  |      z         t        j                  |       y|rS||k7  rMt        d| ||d|g}t        j                  ddj                  |      z         t        j                  |       yyy)z2Cleanup values from a column (i.e. "column=value")NremoveRunning: %s set=)DEFAULTSgetOPENVSWITCH_OVS_VSCTLloggingdebugjoin
subprocess
check_call)typeifacecolumnvaluedefaultcmds         r   _del_colr*   1   s    ll6"G$heVUKmchhsm34c"	W%$eT5VW:UVmchhsm34c"	 &r   c           	          t         d| |||d|dg}t        j                  ddj                  |      z         t	        j
                  |       y)z:Cleanup values from a dictionary (i.e. "column:key=value")r   z=""r   r   N)r   r   r    r!   r"   r#   )r$   r%   r&   keyr'   r)   s         r   	_del_dictr.   @   sD     !(D%PSUZA[
\CMM-#((3-/0#r   c                 j   t         j                  |d      \  }}|dk(  rd}|rt        |g}t        |g}|r"|j                  |       |j                  |       t	        j
                  |d      t        fd|j                  d      D              rt	        j                  |       yyt        d|      )	z*Cleanup commands from the global namespace)NNr	   NTtextc              3   &   K   | ]  }|v  
 y w)Nr   ).0itemouts     r   	<genexpr>z_del_global.<locals>.<genexpr>b   s     8tts{8s   ,zReset command unknown for:)
GLOBALSr   r   appendr"   check_outputallsplitr#   	Exception)	r$   r%   r-   r'   del_cmdget_cmdargs_getargs_delr5   s	           @r   _del_globalrB   H   s    {{35GW))73)73OOE"OOE" %%hT: 8u{{3'788!!(+ 9 4c::r   c                 $   |j                  dd      }|d   }|dk(  r t        |      dkD  rt        | ||d   |       n5t        |      dkD  rt        | ||d   |d   |       nt	        | ||d   |       t        j                  t        d| |d|g       y)zDCheck if this setting is in a dict or a colum and delete accordingly/   r   globalr   external-idsN)r<   lenrB   r.   r*   r"   r#   r   )r$   r%   settingr'   r<   cols         r   clear_settingrK   h   s    MM#q!E
(C
h3u:>D%q51	Ua$uQxq59ueAh.0(D%Y`abr   c                 p    t        |t              sJ |j                  | d       }|xr |j                  dk(  S )NOpenVSwitch)
isinstancedictr   backend)r%   np_interface_dictnp_defs      r   is_ovs_interfacerS   v   s9    '...""5$/F5fnn55r   c                 ,   t        t              st        dt        z        t        t              st	        dj                  t                    | j                          t               }| j                  j                         D ]*  }t        || j                        s|j                  |       , t        j                  j                  t              rdD ]  }t!        j"                  t        dddddd	d
|d   g	d      }|j%                         D ]  }d|v s|j'                  d      d   }||v r!|d   dk(  rGt!        j(                  t        d|g      j*                  dkD  rt!        j,                  t        dd|g       pt!        j,                  t        d|d   |g         dD ]  }d}	|dk(  rd}	n|dk(  rd}	t!        j"                  t        d|	z  ddddd	d
|g	d      }|j%                         D ]  }d|v sd}|}
|dk7  r|j'                  dd      \  }}
|
j/                  d      j'                  d      D ]<  }|j1                  d      sd |v s|j'                  d d      \  }}t3        ||||       >   y"|s|rt5        j6                  d!       y"y")#aQ  
    Query OpenVSwitch state through 'ovs-vsctl' and filter for netplan=true
    tagged ports/bonds and bridges. Delete interfaces which are not defined
    in the current configuration.
    Also filter for individual settings tagged netplan/<column>[/<key]=value
    in external-ids and clear them if they have been set by netplan.
    z+Cannot apply OVS cleanup: %s is 'not-found'z{} is not running))Portzdel-port)Bridgedel-br)	InterfacerW   z--columns=name,external-idsz-fcsvz-dbarez--no-headingslistr   Tr0   znetplan=truer7   rX   z	br-existsz--if-existszdel-bond-ifacer   )rU   rV   rX   Open_vSwitch
Controllerzname,external-idsr\   rG   r]   z_uuid,external-idsz--columns=%sznetplan/.r,   r   r   zAovs-vsctl is missing, cannot tear down old OpenVSwitch interfacesN)r   OPENVSWITCH_OVSDB_SERVER_UNITr   r   r   formatparser   netdefskeysrS   addospathisfiler   r"   r:   
splitlinesr<   run
returncoder#   strip
startswithrK   r   warning)config_managerovs_oldovs_current
ovs_ifacesitr5   liner%   colsextidsentryrI   vals                 r   apply_ovs_cleanupry   |   s    ""?@%&S&C'D E 	E<=#$7$>$>?\$]^^J##((* Q 6 67NN1 
ww~~+,V 	cA))+@B_+/foW]_`ab_c+e/35C ( 	c!T) JJsOA.E
* t{*z~~?TVach>i/j/u/uxy/y"--/DmUegl.mn"--/DmUVWXUY[`.ab	c		c  O 	BA&DN"%l"+))+@.SWBW+/foW]_`+b/35C ( B%E!FN*(,

3(:v "(c!2!8!8!= B ++J7C5L+0;;sA+>LGS)!UGSABB	B0 
K[\  r   )r   re   r"   utilsr   r   r   r_   r   r8   r=   r   r   r*   r.   rB   rK   rS   ry   r   r   r   <module>r{      sz   $  	  >,  6 
 % &7:		I 		i 	#;@c6B]r   