Bug 2214540

Summary: Cannot delete ovs bridge when it contains unmanaged port
Product: Red Hat Enterprise Linux 9 Reporter: Mingyu Shi <mshi>
Component: nmstateAssignee: Gris Ge <fge>
Status: CLOSED MIGRATED QA Contact: Mingyu Shi <mshi>
Severity: low Docs Contact:
Priority: low    
Version: 9.3CC: ferferna, jiji, jishi, network-qe, sfaye, till
Target Milestone: rcKeywords: MigratedToJIRA, Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2023-08-17 13:18:16 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Mingyu Shi 2023-06-13 09:49:26 UTC
Description of problem:
Cannot delete ovs bridge when it contains unmanaged port.
It works well when testing with linux bridge, bond etc instead of ovs bridge.

Version-Release number of selected component (if applicable):
nmstate-2.2.12-2.el9.x86_64
nispor-1.2.10-1.el9.x86_64
NetworkManager-1.43.9-1.el9.x86_64
openvswitch2.15-2.15.0-82.el9fdp.x86_64
DISTRO=RHEL-9.3.0-updates-20230611.28

How reproducible:
100%

Steps to Reproduce:
echo "
interfaces:
- name: ovsbr0
  type: ovs-bridge
  state: up
  bridge:
    port:
    - name: ovsbr0
" | nmstatectl apply

ip link add veth0 type veth peer veth0_p
ovs-vsctl add-port ovsbr0 veth0
ip link set veth0 up
ip link set veth0_p up

echo "
interfaces:
- name: ovsbr0
  type: ovs-bridge
  state: up
  bridge:
    port:
    - name: veth0
" | nmstatectl apply

nmcli dev # veth0 unmanaged

echo "
interfaces:
- name: ovsbr0
  type: ovs-bridge
  state: up
  bridge:
    port:
    - name: ovsbr0
" | nmstatectl apply

nmcli dev # veth0 unmanaged

echo "
interfaces:
- name: ovsbr0
  type: ovs-interface
  state: absent
- name: ovsbr0
  type: ovs-bridge
  state: absent
- name: veth0
  type: veth
  state: absent
- name: veth0_p
  type: veth
  state: absent
" | nmstatectl apply

Actual results:
[2023-06-13T09:47:08Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:08Z INFO  nmstate::iface] Interface ovsbr0 cannot live without controller, marking as absent as it has been detached from its original controller ovsbr0
[2023-06-13T09:47:08Z INFO  nmstate::query_apply::net_state] Created checkpoint /org/freedesktop/NetworkManager/Checkpoint/81
[2023-06-13T09:47:08Z INFO  nmstate::nm::query_apply::apply] Deleting NM connection for absent interface ovsbr0/ovs-bridge: 8c6dc71d-ae4b-4813-b1d2-30c6fab207f9
[2023-06-13T09:47:08Z INFO  nmstate::nm::query_apply::apply] Deleting NM connection for absent interface ovsbr0/ovs-interface: ca7856f7-0e1a-4203-9f77-a2a0ee5fb3e3
[2023-06-13T09:47:08Z INFO  nmstate::nm::query_apply::apply] Deleting NM OVS port connection 34bd7940-0281-4374-8cfb-5440ff4c5eef for absent OVS interface ovsbr0
[2023-06-13T09:47:08Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:08Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:08Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:09Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:09Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:09Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:10Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:10Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:10Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:11Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:11Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:11Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:12Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:12Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:12Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:14Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:14Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:14Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:15Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:15Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:15Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:16Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:16Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:16Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:17Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:17Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:17Z INFO  nmstate::query_apply::net_state] Retrying on: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:18Z WARN  nmstate::ovsdb::show] Unknown OVS interface type 
[2023-06-13T09:47:18Z ERROR nmstate::query_apply::inter_ifaces] VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })
[2023-06-13T09:47:18Z INFO  nmstate::query_apply::net_state] Rollbacked to checkpoint /org/freedesktop/NetworkManager/Checkpoint/81
NmstateError: VerificationError: Absent/Down interface ovsbr0/ovs-bridge still found as OvsBridge(OvsBridgeInterface { base: BaseInterface { name: "ovsbr0", profile_name: None, description: None, prop_list: ["ovsdb", "bridge", "iface_type", "state"], iface_type: OvsBridge, state: Up, identifier: Name, mac_address: None, permanent_mac_address: None, mtu: None, min_mtu: None, max_mtu: None, wait_ip: None, ipv4: None, ipv6: None, mptcp: None, controller: Some(""), accept_all_mac_addresses: None, copy_mac_from: None, ovsdb: Some(OvsDbIfaceConfig { external_ids: Some({}), other_config: Some({}) }), ieee8021x: None, lldp: None, ethtool: None, controller_type: None, up_priority: 0, routes: None, _other: {} }, bridge: Some(OvsBridgeConfig { options: Some(OvsBridgeOptions { stp: Some(false), rstp: Some(false), mcast_snooping_enable: Some(false), fail_mode: Some(""), datapath: Some("") }), ports: Some([OvsBridgePortConfig { name: "veth0", bond: None, vlan: None }]) }) })

Expected results:
ovs removed

Additional info: