ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     o
    )b                      @   sv   d dl Z d dlZd dlZd dlZdZdddZddddZd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )    Nz/usr/bin/ovs-vsctlfalse)Zmcast_snooping_enableZ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              	   C   s`   t |}|du rttd| |||g dS |r,||kr.ttd| |d||f g dS dS dS )z2Cleanup values from a column (i.e. "column=value")Nremovesetz%s=%s)DEFAULTSget
subprocess
check_callOPENVSWITCH_OVS_VSCTL)typeifacecolumnvaluedefault r   %/usr/share/netplan/netplan/cli/ovs.py_del_col'   s   
 r   c              
   C   s    t td| |||t|g dS )z:Cleanup values from a dictionary (i.e. "column:key=value")r   N)r   r	   r
   _escape_colon)r   r   r   keyr   r   r   r   	_del_dict2   s    r   c                 C   s   t dd| S )Nz([^\\]):z\g<1>\:)resub)literalr   r   r   r   9   s   r   c                    s   t |d\}}|dkrd}|rBt|g}t|g}|r$|| || tj|dd t fdd|dD r@t| dS dS t	d	|)
z*Cleanup commands from the global namespace)NNr   NTuniversal_newlinesc                 3   s    | ]}| v V  qd S Nr   ).0itemoutr   r   	<genexpr>W   s    z_del_global.<locals>.<genexpr>,zReset command unkown for:)
GLOBALSr   r
   appendr   check_outputallsplitr	   	Exception)r   r   r   r   Zdel_cmdZget_cmdZargs_getZargs_delr   r   r   _del_global=   s   


r(   c                 C   s   | dd}|d }|dkrt|dkrt| ||d | nt|dkr1t| ||d |d | n	t| ||d | ttd| |d|g dS )zDCheck if this setting is in a dict or a colum and delete accordingly/      globalr   external-idsN)r&   lenr(   r   r   r   r	   r
   )r   r   settingr   r&   colr   r   r   clear_setting]   s   r1   c                    sz   t  tsJ t  | tstd|  |  dS  | i dd ur*dS t fdd | i dg D S )NzIgnoring special key: {} ({})FopenvswitchTc                 3   s    | ]}t | V  qd S r   )is_ovs_interface)r   i
interfacesr   r   r    s   s    z#is_ovs_interface.<locals>.<genexpr>r6   )
isinstancedictr   loggingdebugformatany)r   r6   r   r5   r   r3   k   s   &r3   c                 C   s  |    t }| j D ]}t|| jr|| qtjt	rdD ]Q}t
jt	ddddddd|d	 g	d
d}| D ]8}d|v rr|dd	 }||v rLq:|d	 dkrgt
t	d|gjd	krgt
t	dd|g q:t
t	d|d |g q:q"dD ]a}d}	|dkrd}	n|dkrd}	t
jt	d|	 dddddd|g	d
d}| D ]9}d|v rd}|}
|dkr|dd\}}
|
ddD ]}|drd|v r|dd\}}t|||| qqqvd S |s|rtd d S d S )!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.
    ))Portzdel-port)Bridgedel-br)	Interfacer?   z--columns=name,external-idsz-fZcsvz-dZbarez--no-headingslistr   Tr   znetplan=truer!   r@   z	br-existsz--if-existszdel-bond-ifacer+   )r=   r>   r@   Open_vSwitch
Controllerzname,external-idsrB   r-   rC   z_uuid,external-idsz--columns=%sznetplan/." =zAovs-vsctl is missing, cannot tear down old OpenVSwitch interfacesN)parser   r6   keysr3   addospathisfiler
   r   r$   
splitlinesr&   run
returncoder	   strip
startswithr1   r9   warning)config_managerovs_oldovs_currentZ
ovs_ifacesr4   tr   liner   ZcolsZextidsentryr/   valr   r   r   apply_ovs_cleanupv   sd   
"r[   )r9   rK   r   r   r
   r   r"   r   r   r   r(   r1   r3   r[   r   r   r   r   <module>   s&    