o ed @sddlZddlZddlZddlZddlmZdZdZdddZddd d Z Gd d d e Z d dZ ddZ ddZddZddZddZddZdS)N)systemctl_is_activez/usr/bin/ovs-vsctlzovsdb-server.servicefalse)mcast_snooping_enable rstp_enable)del-sslzget-ssl)z del-fail-modez get-fail-mode)zdel-controllerzget-controller)zset-sslz set-fail-modezset-controllerc@s eZdZdS)OvsDbServerNotRunningN)__name__ __module__ __qualname__r r %/usr/share/netplan/netplan/cli/ovs.pyr*src Cs`t|}|durttd||||gdS|r,||kr.ttd||d||fgdSdSdS)z2Cleanup values from a column (i.e. "column=value")Nremovesetz%s=%s)DEFAULTSget subprocess check_callOPENVSWITCH_OVS_VSCTL)typeifacecolumnvaluedefaultr r r _del_col.s   rc Cs ttd||||t|gdS)z:Cleanup values from a dictionary (i.e. "column:key=value")r N)rrr _escape_colon)rrrkeyrr r r _del_dict9s rcCstdd|S)Nz([^\\]):z\g<1>\:)resub)literalr r r r@srcst|d\}}|dkrd}|rBt|g}t|g}|r$||||tj|ddtfdd|dDr@t|dSdSt d |) z*Cleanup commands from the global namespace)NNrNTtextc3s|]}|vVqdS)Nr ).0itemoutr r ^sz_del_global..,zReset command unknown for:) GLOBALSrrappendr check_outputallsplitr Exception)rrrrdel_cmdget_cmdargs_getargs_delr r$r _del_globalDs    r2cCs|dd}|d}|dkrt|dkrt|||d|nt|dkr1t|||d|d|n t|||d|ttd||d|gdS)zDCheck if this setting is in a dict or a colum and delete accordingly/globalr external-idsN)r,lenr2rrrrr)rrsettingrr,colr r r clear_settingds  r;cCs(t|tsJ||d}|o|jdkS)N OpenVSwitch) isinstancedictrbackend)rnp_interface_dictnp_defr r r is_ovs_interfacers rBc Cstts tdt|t}|jD] }t||jr$| |qt j t rdD]Q}tjt ddddddd |d g d d }|D]8}d |vr}|dd }||vrWqE|d dkrrtt d|gjd krrtt dd|gqEtt d|d|gqEq-dD]a}d} |dkrd} n|dkrd} tjt d| dddddd |g d d }|D]9}d|vrd}|} |dkr|dd\}} | ddD]} | drd| vr| dd\} } t||| | qqqd!S|s|rtd d!Sd!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/[/s,