
    g!                         S SK r S SKrS SKrSSKJrJr  SrSrSSS.rSS	S
S.r	 " S S\
5      r " S S\
5      rS rS rS rS rS rS rg)    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                       \ rS rSrSrg)OvsDbServerNotRunning)    N__name__
__module____qualname____firstlineno____static_attributes__r       )/usr/share/netplan/netplan_cli/cli/ovs.pyr   r   )       r   r   c                       \ rS rSrSrg)OvsDbServerNotInstalled-   r   Nr   r   r   r   r   r   -   r   r   r   c                    [         R                  U5      nUcI  [        SXX#/n[        R                  " SSR                  U5      -  5        [        R                  " U5        gU(       aV  XC:w  aP  [        SXU< SU< 3/n[        R                  " SSR                  U5      -  5        [        R                  " U5        ggg)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VKmchhsm34c"	W%$eTVW:UVmchhsm34c"	 &r   c           	          [         SXX#< SU< S3/n[        R                  " SSR                  U5      -  5        [        R
                  " U5        g)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_dictr2   @   sB     !(DPSUZA[
\CMM-#((3-/0#r   c                   ^ [         R                  US5      u  pEUS:X  a  SnU(       a  [        U/n[        U/nU(       a"  UR                  U5        UR                  U5        [        R
                  " USS9m[        U4S jUR                  S5       5       5      (       a  [        R                  " U5        gg[        SU5      e)	z*Cleanup commands from the global namespace)NNr	   NTtextc              3   ,   >#    U  H	  oT;   v   M     g 7f)Nr   ).0itemouts     r   	<genexpr>_del_global.<locals>.<genexpr>b   s     8'7ts{'7s   ,zReset command unknown for:)
GLOBALSr!   r"   appendr&   check_outputallsplitr'   	Exception)	r(   r)   r1   r+   del_cmdget_cmdargs_getargs_delr9   s	           @r   _del_globalrG   H   s    {{35G))73)73OOE"OOE" %%hT: 8u{{3'7888!!(+ 9 4c::r   c                 $   UR                  SS5      nUS   nUS:X  a   [        U5      S:  a  [        XUS   U5        O4[        U5      S:  a  [        XUS   US   U5        O[	        XUS   U5        [
        R                  " [        SXSU/5        g)zDCheck if this setting is in a dict or a colum and delete accordingly/   r   globalr   external-idsN)rA   lenrG   r2   r.   r&   r'   r"   )r(   r)   settingr+   rA   cols         r   clear_settingrP   h   s    MM#q!E
(C
h3u:>Dq51	Ua$uQxq59eAh.0(DY`abr   c                     [        U[        5      (       d   eUR                  U S 5      nU=(       a    UR                  S:H  $ )NOpenVSwitch)
isinstancedictr!   backend)r)   np_interface_dictnp_defs      r   is_ovs_interfacerX   v   s<    '....""5$/F5fnn55r   c                    [        [        5      (       d  [        S[        -  5      e[        [        5      (       d  [	        SR                  [        5      5      eU R                  5         [        5       nU R                  R                  5        H0  n[        X@R                  5      (       d  M  UR                  U5        M2     [        R                  R                  [        5      (       Ga  S H  n[         R"                  " [        SSSSSS	S
US   /	SS9nUR%                  5        H  nSU;   d  M  UR'                  S5      S   nX;   a  M&  US   S:X  aK  [         R(                  " [        SU/5      R*                  S:  a   [         R,                  " [        SSU/5        Mz  [         R,                  " [        SUS   U/5        M     M     S H  nSn	US:X  a  Sn	OUS:X  a  Sn	[         R"                  " [        SU	-  SSSSS	S
U/	SS9nUR%                  5        H  nSU;   d  M  SnUn
US:w  a  UR'                  SS5      u  pU
R/                  S5      R'                  S5       HC  nUR1                  S5      (       d  M  S U;   d  M#  UR'                  S S5      u  p[3        XXX5        ME     M     M     g"U(       d  U(       a  [4        R6                  " S!5        g"g")#a9  
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)	Interfacer\   z--columns=name,external-idsz-fcsvz-dbarez--no-headingslistr   Tr4   znetplan=truer<   r]   z	br-existsz--if-existszdel-bond-ifacer   )rZ   r[   r]   Open_vSwitch
Controllerzname,external-idsra   rL   rb   z_uuid,external-idsz--columns=%sznetplan/.r0   r   r   zAovs-vsctl is missing, cannot tear down old OpenVSwitch interfacesN)r   OPENVSWITCH_OVSDB_SERVER_UNITr   r   r   formatparser   netdefskeysrX   addospathisfiler"   r&   r?   
splitlinesrA   run
returncoder'   strip
startswithrP   r#   warning)config_managerovs_oldovs_current
ovs_ifacesitr9   liner)   colsextidsentryrN   vals                 r   apply_ovs_cleanupr~   |   s    ""?@@%&S&C'D E 	E<==#$7$>$>?\$]^^J##((*Q 6 677NN1 + 
ww~~+,,VA))+@B_+/foW]_`ab_c+e/35C (!T) JJsOA.E* t{*z~~?TVach>i/j/u/uxy/y"--/DmUegl.mn"--/DmUVWXUY[`.ab )	 W  OA&DN"%l"+))+@.SWBW+/foW]_`+b/35C (%E!FN*(,

3(: "(c!2!8!8!= ++J77C5L+0;;sA+>LG)!GA "> ) O0 
K[\  r   )r#   rj   r&   utilsr   r   r"   rd   r    r=   rB   r   r   r.   r2   rG   rP   rX   r~   r   r   r   <module>r      sz   $  	  >,  6 
 % &7:		I 		i 	#;@c6B]r   