os-vif 4.0.0__tar.gz → 4.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of os-vif might be problematic. Click here for more details.

Files changed (187) hide show
  1. os_vif-4.2.0/.pre-commit-config.yaml +22 -0
  2. {os_vif-4.0.0 → os_vif-4.2.0}/.zuul.yaml +8 -40
  3. {os_vif-4.0.0 → os_vif-4.2.0}/AUTHORS +2 -0
  4. {os_vif-4.0.0 → os_vif-4.2.0}/ChangeLog +18 -0
  5. os_vif-4.2.0/PKG-INFO +65 -0
  6. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/internal/ip/linux/test_impl_pyroute2.py +26 -17
  7. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/test_os_vif.py +14 -8
  8. os_vif-4.2.0/os_vif.egg-info/PKG-INFO +65 -0
  9. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif.egg-info/SOURCES.txt +4 -0
  10. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif.egg-info/entry_points.txt +0 -1
  11. os_vif-4.2.0/os_vif.egg-info/pbr.json +1 -0
  12. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif.egg-info/requires.txt +4 -6
  13. os_vif-4.2.0/pyproject.toml +3 -0
  14. os_vif-4.2.0/releasenotes/notes/deprecate-linuxbridge-support-d278d4bbdff8e8bc.yaml +7 -0
  15. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/fix-stevedore-entrypoints-8002ec7a5166c977.yaml +1 -1
  16. os_vif-4.2.0/releasenotes/source/2025.1.rst +6 -0
  17. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/index.rst +1 -0
  18. {os_vif-4.0.0 → os_vif-4.2.0}/tox.ini +6 -2
  19. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/linux_bridge.py +9 -0
  20. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/ovs.py +12 -7
  21. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/ovsdb/ovsdb_lib.py +22 -1
  22. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/functional/test_plugin.py +97 -0
  23. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/unit/ovsdb/test_ovsdb_lib.py +12 -2
  24. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/unit/test_plugin.py +4 -1
  25. os_vif-4.0.0/PKG-INFO +0 -53
  26. os_vif-4.0.0/os_vif.egg-info/PKG-INFO +0 -53
  27. os_vif-4.0.0/os_vif.egg-info/pbr.json +0 -1
  28. {os_vif-4.0.0 → os_vif-4.2.0}/.coveragerc +0 -0
  29. {os_vif-4.0.0 → os_vif-4.2.0}/.mailmap +0 -0
  30. {os_vif-4.0.0 → os_vif-4.2.0}/.stestr.conf +0 -0
  31. {os_vif-4.0.0 → os_vif-4.2.0}/CONTRIBUTING.rst +0 -0
  32. {os_vif-4.0.0 → os_vif-4.2.0}/HACKING.rst +0 -0
  33. {os_vif-4.0.0 → os_vif-4.2.0}/LICENSE +0 -0
  34. {os_vif-4.0.0 → os_vif-4.2.0}/README.rst +0 -0
  35. {os_vif-4.0.0 → os_vif-4.2.0}/bindep.txt +0 -0
  36. {os_vif-4.0.0 → os_vif-4.2.0}/doc/requirements.txt +0 -0
  37. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/conf.py +0 -0
  38. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/contributor/contributing.rst +0 -0
  39. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/index.rst +0 -0
  40. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/reference/glossary.rst +0 -0
  41. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/user/host-info.rst +0 -0
  42. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/user/plugins/linux-bridge.rst +0 -0
  43. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/user/plugins/noop.rst +0 -0
  44. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/user/plugins/ovs.rst +0 -0
  45. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/user/usage.rst +0 -0
  46. {os_vif-4.0.0 → os_vif-4.2.0}/doc/source/user/vif-types.rst +0 -0
  47. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/__init__.py +0 -0
  48. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/exception.py +0 -0
  49. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/i18n.py +0 -0
  50. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/internal/__init__.py +0 -0
  51. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/internal/ip/__init__.py +0 -0
  52. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/internal/ip/api.py +0 -0
  53. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/internal/ip/ip_command.py +0 -0
  54. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/internal/ip/linux/__init__.py +0 -0
  55. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/internal/ip/linux/impl_pyroute2.py +0 -0
  56. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/__init__.py +0 -0
  57. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/base.py +0 -0
  58. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/fields.py +0 -0
  59. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/fixed_ip.py +0 -0
  60. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/host_info.py +0 -0
  61. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/instance_info.py +0 -0
  62. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/network.py +0 -0
  63. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/route.py +0 -0
  64. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/subnet.py +0 -0
  65. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/objects/vif.py +0 -0
  66. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/opts.py +0 -0
  67. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/plugin.py +0 -0
  68. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/__init__.py +0 -0
  69. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/__init__.py +0 -0
  70. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/base.py +0 -0
  71. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/internal/__init__.py +0 -0
  72. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/internal/command/__init__.py +0 -0
  73. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/internal/command/ip/__init__.py +0 -0
  74. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/internal/command/ip/test_impl_pyroute2.py +0 -0
  75. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/functional/privsep.py +0 -0
  76. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/__init__.py +0 -0
  77. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/base.py +0 -0
  78. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/internal/__init__.py +0 -0
  79. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/internal/ip/__init__.py +0 -0
  80. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/internal/ip/linux/__init__.py +0 -0
  81. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/internal/ip/test_api.py +0 -0
  82. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/test_base.py +0 -0
  83. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/test_exception.py +0 -0
  84. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/test_host_info.py +0 -0
  85. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/test_objects.py +0 -0
  86. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/tests/unit/test_vif.py +0 -0
  87. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/utils.py +0 -0
  88. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif/version.py +0 -0
  89. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif.egg-info/dependency_links.txt +0 -0
  90. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif.egg-info/not-zip-safe +0 -0
  91. {os_vif-4.0.0 → os_vif-4.2.0}/os_vif.egg-info/top_level.txt +0 -0
  92. {os_vif-4.0.0 → os_vif-4.2.0}/playbooks/openstack-tox-functional-ovs-with-sudo/Debian.yaml +0 -0
  93. {os_vif-4.0.0 → os_vif-4.2.0}/playbooks/openstack-tox-functional-ovs-with-sudo/Gentoo.yaml +0 -0
  94. {os_vif-4.0.0 → os_vif-4.2.0}/playbooks/openstack-tox-functional-ovs-with-sudo/RedHat.yaml +0 -0
  95. {os_vif-4.0.0 → os_vif-4.2.0}/playbooks/openstack-tox-functional-ovs-with-sudo/Suse.yaml +0 -0
  96. {os_vif-4.0.0 → os_vif-4.2.0}/playbooks/openstack-tox-functional-ovs-with-sudo/pre.yaml +0 -0
  97. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/OVSVif-hybrid-unplug-f37bf57bc8e913de.yaml +0 -0
  98. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/add-abstract-ovsdb-api-8f04df58d4ed5b73.yaml +0 -0
  99. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/add-fast-path-vhostuser-support-fe87e558326909b6.yaml +0 -0
  100. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/add-no-op-plugin-763a6703e7328a24.yaml +0 -0
  101. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/add-ovs-representor-portprofile-5f8290e5a40bf0a4.yaml +0 -0
  102. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/add-ovs-vhostuser-support-2ba8de51c1f3a244.yaml +0 -0
  103. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/add-ovsdb-native-322fffb49c91503d.yaml +0 -0
  104. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/always-plug-vifs-for-ovs-1d033fc49a9c6c4e.yaml +0 -0
  105. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/brctl-removal-a5b0e69b865afa57.yaml +0 -0
  106. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/bug-1892132-812e6d5ce0588ebb.yaml +0 -0
  107. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/contextlib-and-nested-with-statements-2747a9ebb9a5bfd7.yaml +0 -0
  108. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/default-qos-policy-for-ovs-26f8806046a59c82.yaml +0 -0
  109. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/default-to-native-ovsdb-driver-112fb5adf6e19a30.yaml +0 -0
  110. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/deprecate-windows-support-49f5ca1b1a1f4d66.yaml +0 -0
  111. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/do-not-force-mac-ageing-c6e8d750130c5740.yaml +0 -0
  112. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/drop-py36-support-0e9b07073f6ad73f.yaml +0 -0
  113. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/drop-python2-support-7a4bc7d31253c1e5.yaml +0 -0
  114. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/ensure-ovs-bridge-a0c1b51f469c92d0.yaml +0 -0
  115. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/extend-vhostuser-object-fada14a1457d4e56.yaml +0 -0
  116. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/fix-broken-dataplane-on-nova-restart-with-isolate_vif-71617a41741b33e8.yaml +0 -0
  117. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/fix-ovs-plugin-describe-049750609559f1ba.yaml +0 -0
  118. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/fix-vif-openvswitch-fa0d19be9dd668e1.yaml +0 -0
  119. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/generic-datapath-offloads-41cabb6842b41533.yaml +0 -0
  120. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/initial-release-2c71d6bbf55f763b.yaml +0 -0
  121. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/oslo-config-opts-entrypoints-e83f907b686d774a.yaml +0 -0
  122. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/per-port-bridge-c6a50179a0256de3.yaml +0 -0
  123. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/port-profile-info-linux-bridge-4800f5a0b7328615.yaml +0 -0
  124. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/port-profile-info-ovs-63b46a3eafc11de2.yaml +0 -0
  125. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/prevent-lb-reply-arp-6459133bfb056069.yaml +0 -0
  126. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/remove-py38-e0701b3363079bbf.yaml +0 -0
  127. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/remove-windows-23df1c587d505d72.yaml +0 -0
  128. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/remove_iptools_implementation-2eb866573a680e61.yaml +0 -0
  129. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/revert-always-plug-port-for-ovs-hybrid-plug-false-dc015985cbc5443b.yaml +0 -0
  130. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/vhost-user-mtu-support-cbc7d02a6665fab1.yaml +0 -0
  131. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/notes/vhost-user-reconnect-fa4cbb731b787f71.yaml +0 -0
  132. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/2023.1.rst +0 -0
  133. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/2023.2.rst +0 -0
  134. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/2024.1.rst +0 -0
  135. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/2024.2.rst +0 -0
  136. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/_static/.placeholder +0 -0
  137. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/_templates/.placeholder +0 -0
  138. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/conf.py +0 -0
  139. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/newton.rst +0 -0
  140. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/ocata.rst +0 -0
  141. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/pike.rst +0 -0
  142. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/queens.rst +0 -0
  143. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/rocky.rst +0 -0
  144. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/stein.rst +0 -0
  145. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/train.rst +0 -0
  146. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/unreleased.rst +0 -0
  147. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/ussuri.rst +0 -0
  148. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/victoria.rst +0 -0
  149. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/wallaby.rst +0 -0
  150. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/xena.rst +0 -0
  151. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/yoga.rst +0 -0
  152. {os_vif-4.0.0 → os_vif-4.2.0}/releasenotes/source/zed.rst +0 -0
  153. {os_vif-4.0.0 → os_vif-4.2.0}/requirements.txt +0 -0
  154. {os_vif-4.0.0 → os_vif-4.2.0}/setup.cfg +0 -0
  155. {os_vif-4.0.0 → os_vif-4.2.0}/setup.py +0 -0
  156. {os_vif-4.0.0 → os_vif-4.2.0}/test-requirements.txt +0 -0
  157. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/__init__.py +0 -0
  158. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/constants.py +0 -0
  159. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/iptables.py +0 -0
  160. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/linux_net.py +0 -0
  161. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/privsep.py +0 -0
  162. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/tests/__init__.py +0 -0
  163. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/tests/unit/__init__.py +0 -0
  164. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/tests/unit/test_linux_net.py +0 -0
  165. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_linux_bridge/tests/unit/test_plugin.py +0 -0
  166. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_noop/__init__.py +0 -0
  167. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_noop/noop.py +0 -0
  168. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_noop/tests/__init__.py +0 -0
  169. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_noop/tests/unit/__init__.py +0 -0
  170. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_noop/tests/unit/test_plugin.py +0 -0
  171. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/__init__.py +0 -0
  172. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/constants.py +0 -0
  173. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/exception.py +0 -0
  174. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/linux_net.py +0 -0
  175. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/ovsdb/__init__.py +0 -0
  176. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/ovsdb/api.py +0 -0
  177. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/ovsdb/impl_idl.py +0 -0
  178. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/ovsdb/impl_vsctl.py +0 -0
  179. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/privsep.py +0 -0
  180. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/__init__.py +0 -0
  181. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/functional/__init__.py +0 -0
  182. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/functional/base.py +0 -0
  183. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/functional/ovsdb/__init__.py +0 -0
  184. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/functional/ovsdb/test_ovsdb_lib.py +0 -0
  185. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/unit/__init__.py +0 -0
  186. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/unit/ovsdb/__init__.py +0 -0
  187. {os_vif-4.0.0 → os_vif-4.2.0}/vif_plug_ovs/tests/unit/test_linux_net.py +0 -0
@@ -0,0 +1,22 @@
1
+ ---
2
+ repos:
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: v5.0.0
5
+ hooks:
6
+ - id: trailing-whitespace
7
+ - id: mixed-line-ending
8
+ args: ['--fix', 'lf']
9
+ exclude: '.*\.(svg)$'
10
+ - id: check-byte-order-marker
11
+ - id: check-executables-have-shebangs
12
+ - id: check-merge-conflict
13
+ - id: debug-statements
14
+ - id: check-yaml
15
+ files: .*\.(yaml|yml)$
16
+ exclude: '^zuul.d/.*$'
17
+ - repo: https://opendev.org/openstack/hacking
18
+ rev: 7.0.0
19
+ hooks:
20
+ - id: hacking
21
+ additional_dependencies: []
22
+ exclude: '^(doc|releasenotes)/.*$'
@@ -120,44 +120,14 @@
120
120
  os_vif_ovs:
121
121
  per_port_bridge: true
122
122
 
123
+ # TODO(gmann): As per the 2025.1 testing runtime, we need to run at least
124
+ # one job on Focal. This job can be removed in the nexy cycle (2025.2)
123
125
  - job:
124
- name: os-vif-linuxbridge
125
- parent: os-vif-tempest-base
126
+ name: os-vif-ovn-ubuntu-jammy
126
127
  description: |
127
- os-vif linux bridge job derived from neutron-tempest-linuxbridge
128
- vars:
129
- devstack_services:
130
- # Disable OVN services
131
- br-ex-tcpdump: false
132
- br-int-flows: false
133
- ovn-controller: false
134
- ovn-northd: false
135
- ovs-vswitchd: false
136
- ovsdb-server: false
137
- q-ovn-metadata-agent: false
138
- # Neutron services
139
- q-agt: true
140
- q-dhcp: true
141
- q-l3: true
142
- q-meta: true
143
- q-metering: true
144
- devstack_localrc:
145
- Q_AGENT: linuxbridge
146
- Q_ML2_PLUGIN_MECHANISM_DRIVERS: linuxbridge
147
- Q_ML2_TENANT_NETWORK_TYPE: vxlan
148
- devstack_local_conf:
149
- post-config:
150
- "/$NEUTRON_CORE_PLUGIN_CONF":
151
- experimental:
152
- linuxbridge: true
153
- ml2:
154
- type_drivers: flat,vlan,local,vxlan
155
- ml2_type_vlan:
156
- network_vlan_ranges: foo:1:10
157
- agent:
158
- tunnel_types: vxlan
159
- securitygroup:
160
- firewall_driver: iptables
128
+ os-vif ovn job (tests hybrid-plug=false) testing on Ubuntu Focal(20.04)
129
+ parent: os-vif-ovn
130
+ nodeset: openstack-single-node-jammy
161
131
 
162
132
  - project:
163
133
  templates:
@@ -168,15 +138,13 @@
168
138
  - openstack-cover-jobs
169
139
  check:
170
140
  jobs:
171
- - kuryr-kubernetes-tempest:
172
- voting: false
173
141
  - openstack-tox-functional-ovs-with-sudo
174
142
  - os-vif-ovn
143
+ - os-vif-ovn-ubuntu-jammy
175
144
  - os-vif-ovs-iptables
176
- - os-vif-linuxbridge
177
145
  gate:
178
146
  jobs:
179
147
  - openstack-tox-functional-ovs-with-sudo
180
148
  - os-vif-ovn
149
+ - os-vif-ovn-ubuntu-jammy
181
150
  - os-vif-ovs-iptables
182
- - os-vif-linuxbridge
@@ -2,6 +2,7 @@ Adrian Chiris <adrianc@mellanox.com>
2
2
  Alin Balutoiu <abalutoiu@cloudbasesolutions.com>
3
3
  Andreas Jaeger <aj@suse.com>
4
4
  Balazs Gibizer <gibi@redhat.com>
5
+ Bence Romsics <bence.romsics@gmail.com>
5
6
  Brian Haley <brian.haley@hpe.com>
6
7
  Cao Xuan Hoang <hoangcx@vn.fujitsu.com>
7
8
  Carlos Goncalves <cgoncalves@redhat.com>
@@ -68,6 +69,7 @@ YAMAMOTO Takashi <yamamoto@midokura.com>
68
69
  ZhijunWei <wzj334965317@outlook.com>
69
70
  blue55 <yllan@fiberhome.com>
70
71
  caoyuan <cao.yuan@99cloud.net>
72
+ elajkat <lajos.katona@est.tech>
71
73
  ericxiett <eric_xiett@163.com>
72
74
  gecong1973 <ge.cong@zte.com.cn>
73
75
  jacky06 <zhang.min@99cloud.net>
@@ -1,12 +1,30 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ 4.2.0
5
+ -----
6
+
7
+ * OVS Trunk: Add bridge\_name to external\_ids
8
+ * add pyproject.toml to support pip 23.1
9
+ * Adapt unit tests to pyroute2 0.9.1
10
+ * Update master for stable/2025.1
11
+
12
+ 4.1.0
13
+ -----
14
+
15
+ * Update gate jobs as per the 2025.1 cycle testing runtime
16
+ * Deprecate linux bridge plugin
17
+ * Drop kuryr-kubernetes-tempest
18
+ * Remove os-vif-linuxbridge
19
+ * Do not add taps in trunk bridges to the dead vlan
20
+
4
21
  4.0.0
5
22
  -----
6
23
 
7
24
  * Clean up Windows support
8
25
  * address test stablity under load
9
26
  * reno: Update master for unmaintained/2023.1
27
+ * Integrate pre-commit
10
28
  * Remove Python 3.8 support
11
29
  * Update master for stable/2024.2
12
30
 
os_vif-4.2.0/PKG-INFO ADDED
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.1
2
+ Name: os_vif
3
+ Version: 4.2.0
4
+ Summary: A library for plugging and unplugging virtual interfaces in OpenStack.
5
+ Home-page: https://docs.openstack.org/os-vif/latest/
6
+ Author: OpenStack
7
+ Author-email: openstack-discuss@lists.openstack.org
8
+ Classifier: Environment :: OpenStack
9
+ Classifier: Intended Audience :: Information Technology
10
+ Classifier: Intended Audience :: System Administrators
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: Implementation :: CPython
21
+ Requires-Python: >=3.9
22
+ License-File: LICENSE
23
+ Requires-Dist: pbr>=3.0.0
24
+ Requires-Dist: oslo.concurrency>=3.20.0
25
+ Requires-Dist: oslo.config>=5.1.0
26
+ Requires-Dist: oslo.log>=3.30.0
27
+ Requires-Dist: oslo.i18n>=3.15.3
28
+ Requires-Dist: oslo.privsep>=1.23.0
29
+ Requires-Dist: oslo.serialization>=2.20.0
30
+ Requires-Dist: oslo.utils>=2.0.0
31
+ Requires-Dist: oslo.versionedobjects>=1.28.0
32
+ Requires-Dist: ovsdbapp>=0.12.1
33
+ Requires-Dist: pyroute2>=0.5.2
34
+ Requires-Dist: stevedore>=1.20.0
35
+ Requires-Dist: debtcollector>=1.19.0
36
+
37
+ ========================
38
+ Team and repository tags
39
+ ========================
40
+
41
+ .. image:: https://governance.openstack.org/tc/badges/os-vif.svg
42
+ :target: https://governance.openstack.org/tc/reference/tags/index.html
43
+
44
+ .. Change things from this point on
45
+
46
+ ======
47
+ os-vif
48
+ ======
49
+
50
+ .. image:: https://img.shields.io/pypi/v/os-vif.svg
51
+ :target: https://pypi.org/project/os-vif/
52
+ :alt: Latest Version
53
+
54
+ .. image:: https://img.shields.io/pypi/dm/os-vif.svg
55
+ :target: https://pypi.org/project/os-vif/
56
+ :alt: Downloads
57
+
58
+ A library for plugging and unplugging virtual interfaces in OpenStack.
59
+
60
+ * License: Apache License, Version 2.0
61
+ * Documentation: https://docs.openstack.org/os-vif/latest/
62
+ * Source: https://opendev.org/openstack/os-vif
63
+ * Bugs: https://bugs.launchpad.net/os-vif
64
+ * Release Notes: https://docs.openstack.org/releasenotes/os-vif
65
+
@@ -38,12 +38,14 @@ class TestIpCommand(base.TestCase):
38
38
  def setUp(self):
39
39
  super(TestIpCommand, self).setUp()
40
40
  self.ip = impl_pyroute2.PyRoute2()
41
- self.ip_link_p = mock.patch.object(iproute.IPRoute, 'link')
41
+ self.ip_link_p = mock.patch.object(iproute.IPRoute, 'link',
42
+ create=True)
42
43
  self.ip_link = self.ip_link_p.start()
43
44
 
44
45
  def test_set(self):
45
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
46
- return_value=[1]) as mock_link_lookup:
46
+ with mock.patch.object(
47
+ iproute.IPRoute, 'link_lookup', return_value=[1],
48
+ create=True) as mock_link_lookup:
47
49
  self.ip_link.return_value = [{'flags': 0x4000}]
48
50
  self.ip.set(self.DEVICE, state=self.UP, mtu=self.MTU,
49
51
  address=self.MAC, promisc=True)
@@ -57,8 +59,9 @@ class TestIpCommand(base.TestCase):
57
59
  self.ip_link.assert_has_calls(calls)
58
60
 
59
61
  def test_set_exit_code(self):
60
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
61
- return_value=[1]) as mock_link_lookup:
62
+ with mock.patch.object(
63
+ iproute.IPRoute, 'link_lookup', return_value=[1],
64
+ create=True) as mock_link_lookup:
62
65
  self.ip_link.side_effect = ipexc.NetlinkError(self.ERROR_CODE,
63
66
  msg="Error message")
64
67
 
@@ -70,8 +73,9 @@ class TestIpCommand(base.TestCase):
70
73
  check_exit_code=[self.OTHER_ERROR_CODE])
71
74
 
72
75
  def test_set_no_interface_found(self):
73
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
74
- return_value=[]) as mock_link_lookup:
76
+ with mock.patch.object(
77
+ iproute.IPRoute, 'link_lookup', return_value=[],
78
+ create=True) as mock_link_lookup:
75
79
  self.assertRaises(exception.NetworkInterfaceNotFound, self.ip.set,
76
80
  self.DEVICE)
77
81
  mock_link_lookup.assert_called_once_with(ifname=self.DEVICE)
@@ -83,8 +87,9 @@ class TestIpCommand(base.TestCase):
83
87
  'add', ifname=self.DEVICE, kind=self.TYPE_VETH, peer='peer')
84
88
 
85
89
  def test_add_vlan(self):
86
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
87
- return_value=[1]) as mock_link_lookup:
90
+ with mock.patch.object(
91
+ iproute.IPRoute, 'link_lookup', return_value=[1],
92
+ create=True) as mock_link_lookup:
88
93
  self.ip.add(self.DEVICE, self.TYPE_VLAN, link=self.LINK,
89
94
  vlan_id=self.VLAN_ID)
90
95
  mock_link_lookup.assert_called_once_with(ifname=self.LINK)
@@ -114,8 +119,9 @@ class TestIpCommand(base.TestCase):
114
119
  self.ip_link.assert_called_once_with('add', **args)
115
120
 
116
121
  def test_add_vlan_no_interface_found(self):
117
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
118
- return_value=[]) as mock_link_lookup:
122
+ with mock.patch.object(
123
+ iproute.IPRoute, 'link_lookup', return_value=[],
124
+ create=True) as mock_link_lookup:
119
125
  self.assertRaises(exception.NetworkInterfaceNotFound, self.ip.add,
120
126
  self.DEVICE, self.TYPE_VLAN, link=self.LINK)
121
127
  mock_link_lookup.assert_called_once_with(ifname=self.LINK)
@@ -141,22 +147,25 @@ class TestIpCommand(base.TestCase):
141
147
  check_exit_code=[self.OTHER_ERROR_CODE])
142
148
 
143
149
  def test_delete(self):
144
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
145
- return_value=[1]) as mock_link_lookup:
150
+ with mock.patch.object(
151
+ iproute.IPRoute, 'link_lookup', return_value=[1],
152
+ create=True) as mock_link_lookup:
146
153
  self.ip.delete(self.DEVICE)
147
154
  mock_link_lookup.assert_called_once_with(ifname=self.DEVICE)
148
155
  self.ip_link.assert_called_once_with('del', index=1)
149
156
 
150
157
  def test_delete_no_interface_found(self):
151
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
152
- return_value=[]) as mock_link_lookup:
158
+ with mock.patch.object(
159
+ iproute.IPRoute, 'link_lookup', return_value=[],
160
+ create=True) as mock_link_lookup:
153
161
  self.assertRaises(exception.NetworkInterfaceNotFound,
154
162
  self.ip.delete, self.DEVICE)
155
163
  mock_link_lookup.assert_called_once_with(ifname=self.DEVICE)
156
164
 
157
165
  def test_delete_exit_code(self):
158
- with mock.patch.object(iproute.IPRoute, 'link_lookup',
159
- return_value=[1]) as mock_link_lookup:
166
+ with mock.patch.object(
167
+ iproute.IPRoute, 'link_lookup', return_value=[1],
168
+ create=True) as mock_link_lookup:
160
169
  self.ip_link.side_effect = ipexc.NetlinkError(self.ERROR_CODE,
161
170
  msg="Error message")
162
171
 
@@ -105,10 +105,13 @@ class TestOSVIF(base.TestCase):
105
105
  entry_point="os-vif",
106
106
  plugin=DemoPlugin,
107
107
  obj=None)
108
- with mock.patch('stevedore.extension.ExtensionManager.names',
109
- return_value=['foobar']),\
110
- mock.patch('stevedore.extension.ExtensionManager.__getitem__',
111
- return_value=plg):
108
+ with mock.patch(
109
+ 'stevedore.extension.ExtensionManager.names',
110
+ return_value=['foobar'],
111
+ ), mock.patch(
112
+ 'stevedore.extension.ExtensionManager.__getitem__',
113
+ return_value=plg,
114
+ ):
112
115
  os_vif.initialize()
113
116
  info = objects.instance_info.InstanceInfo()
114
117
  vif = objects.vif.VIFBridge(
@@ -123,10 +126,13 @@ class TestOSVIF(base.TestCase):
123
126
  entry_point="os-vif",
124
127
  plugin=DemoPlugin,
125
128
  obj=None)
126
- with mock.patch('stevedore.extension.ExtensionManager.names',
127
- return_value=['foobar']),\
128
- mock.patch('stevedore.extension.ExtensionManager.__getitem__',
129
- return_value=plg):
129
+ with mock.patch(
130
+ 'stevedore.extension.ExtensionManager.names',
131
+ return_value=['foobar']
132
+ ), mock.patch(
133
+ 'stevedore.extension.ExtensionManager.__getitem__',
134
+ return_value=plg,
135
+ ):
130
136
  os_vif.initialize()
131
137
  info = objects.instance_info.InstanceInfo()
132
138
  vif = objects.vif.VIFBridge(
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.1
2
+ Name: os_vif
3
+ Version: 4.2.0
4
+ Summary: A library for plugging and unplugging virtual interfaces in OpenStack.
5
+ Home-page: https://docs.openstack.org/os-vif/latest/
6
+ Author: OpenStack
7
+ Author-email: openstack-discuss@lists.openstack.org
8
+ Classifier: Environment :: OpenStack
9
+ Classifier: Intended Audience :: Information Technology
10
+ Classifier: Intended Audience :: System Administrators
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: Implementation :: CPython
21
+ Requires-Python: >=3.9
22
+ License-File: LICENSE
23
+ Requires-Dist: pbr>=3.0.0
24
+ Requires-Dist: oslo.concurrency>=3.20.0
25
+ Requires-Dist: oslo.config>=5.1.0
26
+ Requires-Dist: oslo.log>=3.30.0
27
+ Requires-Dist: oslo.i18n>=3.15.3
28
+ Requires-Dist: oslo.privsep>=1.23.0
29
+ Requires-Dist: oslo.serialization>=2.20.0
30
+ Requires-Dist: oslo.utils>=2.0.0
31
+ Requires-Dist: oslo.versionedobjects>=1.28.0
32
+ Requires-Dist: ovsdbapp>=0.12.1
33
+ Requires-Dist: pyroute2>=0.5.2
34
+ Requires-Dist: stevedore>=1.20.0
35
+ Requires-Dist: debtcollector>=1.19.0
36
+
37
+ ========================
38
+ Team and repository tags
39
+ ========================
40
+
41
+ .. image:: https://governance.openstack.org/tc/badges/os-vif.svg
42
+ :target: https://governance.openstack.org/tc/reference/tags/index.html
43
+
44
+ .. Change things from this point on
45
+
46
+ ======
47
+ os-vif
48
+ ======
49
+
50
+ .. image:: https://img.shields.io/pypi/v/os-vif.svg
51
+ :target: https://pypi.org/project/os-vif/
52
+ :alt: Latest Version
53
+
54
+ .. image:: https://img.shields.io/pypi/dm/os-vif.svg
55
+ :target: https://pypi.org/project/os-vif/
56
+ :alt: Downloads
57
+
58
+ A library for plugging and unplugging virtual interfaces in OpenStack.
59
+
60
+ * License: Apache License, Version 2.0
61
+ * Documentation: https://docs.openstack.org/os-vif/latest/
62
+ * Source: https://opendev.org/openstack/os-vif
63
+ * Bugs: https://bugs.launchpad.net/os-vif
64
+ * Release Notes: https://docs.openstack.org/releasenotes/os-vif
65
+
@@ -1,5 +1,6 @@
1
1
  .coveragerc
2
2
  .mailmap
3
+ .pre-commit-config.yaml
3
4
  .stestr.conf
4
5
  .zuul.yaml
5
6
  AUTHORS
@@ -9,6 +10,7 @@ HACKING.rst
9
10
  LICENSE
10
11
  README.rst
11
12
  bindep.txt
13
+ pyproject.toml
12
14
  requirements.txt
13
15
  setup.cfg
14
16
  setup.py
@@ -95,6 +97,7 @@ releasenotes/notes/bug-1892132-812e6d5ce0588ebb.yaml
95
97
  releasenotes/notes/contextlib-and-nested-with-statements-2747a9ebb9a5bfd7.yaml
96
98
  releasenotes/notes/default-qos-policy-for-ovs-26f8806046a59c82.yaml
97
99
  releasenotes/notes/default-to-native-ovsdb-driver-112fb5adf6e19a30.yaml
100
+ releasenotes/notes/deprecate-linuxbridge-support-d278d4bbdff8e8bc.yaml
98
101
  releasenotes/notes/deprecate-windows-support-49f5ca1b1a1f4d66.yaml
99
102
  releasenotes/notes/do-not-force-mac-ageing-c6e8d750130c5740.yaml
100
103
  releasenotes/notes/drop-py36-support-0e9b07073f6ad73f.yaml
@@ -122,6 +125,7 @@ releasenotes/source/2023.1.rst
122
125
  releasenotes/source/2023.2.rst
123
126
  releasenotes/source/2024.1.rst
124
127
  releasenotes/source/2024.2.rst
128
+ releasenotes/source/2025.1.rst
125
129
  releasenotes/source/conf.py
126
130
  releasenotes/source/index.rst
127
131
  releasenotes/source/newton.rst
@@ -5,4 +5,3 @@ ovs = vif_plug_ovs.ovs:OvsPlugin
5
5
 
6
6
  [oslo.config.opts]
7
7
  os_vif = os_vif.opts:list_plugins_opts
8
-
@@ -0,0 +1 @@
1
+ {"git_version": "6b078f4", "is_release": true}
@@ -1,15 +1,13 @@
1
- debtcollector>=1.19.0
1
+ pbr>=3.0.0
2
2
  oslo.concurrency>=3.20.0
3
3
  oslo.config>=5.1.0
4
- oslo.i18n>=3.15.3
5
4
  oslo.log>=3.30.0
5
+ oslo.i18n>=3.15.3
6
6
  oslo.privsep>=1.23.0
7
7
  oslo.serialization>=2.20.0
8
8
  oslo.utils>=2.0.0
9
9
  oslo.versionedobjects>=1.28.0
10
10
  ovsdbapp>=0.12.1
11
- pbr>=3.0.0
12
- stevedore>=1.20.0
13
-
14
- [:(sys_platform!='win32')]
15
11
  pyroute2>=0.5.2
12
+ stevedore>=1.20.0
13
+ debtcollector>=1.19.0
@@ -0,0 +1,3 @@
1
+ [build-system]
2
+ requires = ["pbr>=5.7.0", "setuptools>=64.0.0", "wheel"]
3
+ build-backend = "pbr.build"
@@ -0,0 +1,7 @@
1
+ ---
2
+ deprecations:
3
+ - |
4
+ The LinuxBridge mechanism driver has been removed in neutron. os-vif has a
5
+ policy of only shipping plugins for in-tree neutron ml2 drivers. As a result
6
+ the linux_bridge os-vif plugin is now deprecated and will be removed in
7
+ a future openstack release.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  fixes:
3
- - os-vif plugins were previously incorrectly registered
3
+ - os-vif plugins were previously incorrectly registered
4
4
  in both the setup.py and setup.cfg. All plugin registration
5
5
  have been removed form the setup.py as they were not used
6
6
  and may have blocked registration of out of tree plugins.
@@ -0,0 +1,6 @@
1
+ ===========================
2
+ 2025.1 Series Release Notes
3
+ ===========================
4
+
5
+ .. release-notes::
6
+ :branch: stable/2025.1
@@ -6,6 +6,7 @@ Release Notes
6
6
  :maxdepth: 1
7
7
 
8
8
  unreleased
9
+ 2025.1
9
10
  2024.2
10
11
  2024.1
11
12
  2023.2
@@ -57,9 +57,13 @@ commands =
57
57
  coverage report
58
58
 
59
59
  [testenv:pep8]
60
+ description =
61
+ Run style checks.
62
+ skip_install = true
60
63
  deps =
61
- hacking>=3.0.1,<3.1.0
62
- commands = flake8
64
+ pre-commit
65
+ commands =
66
+ pre-commit run --all-files --show-diff-on-failure
63
67
 
64
68
  [flake8]
65
69
  # E123, E125 skipped as they are invalid PEP-8.
@@ -17,6 +17,7 @@
17
17
  # License for the specific language governing permissions and limitations
18
18
  # under the License.
19
19
 
20
+ import debtcollector.removals
20
21
  from os_vif import objects
21
22
  from os_vif import plugin
22
23
  from oslo_config import cfg
@@ -94,6 +95,10 @@ class LinuxBridgePlugin(plugin.PluginBase):
94
95
  supported_port_profiles=[]),
95
96
  ])
96
97
 
98
+ @debtcollector.removals.remove(
99
+ message="LinuxBridgePlugin is deprecated and will be removed in "
100
+ "a future release",
101
+ category=DeprecationWarning)
97
102
  def plug(self, vif, instance_info):
98
103
  """Ensure that the bridge exists, and add VIF to it."""
99
104
  network = vif.network
@@ -111,6 +116,10 @@ class LinuxBridgePlugin(plugin.PluginBase):
111
116
  linux_net.ensure_bridge(bridge_name, iface,
112
117
  filtering=install_filters, mtu=mtu)
113
118
 
119
+ @debtcollector.removals.remove(
120
+ message="LinuxBridgePlugin is deprecated and will be removed in "
121
+ "a future release",
122
+ category=DeprecationWarning)
114
123
  def unplug(self, vif, instance_info):
115
124
  # Nothing required to unplug a port for a VIF using standard
116
125
  # Linux bridge device...
@@ -34,6 +34,10 @@ from vif_plug_ovs.ovsdb import ovsdb_lib
34
34
  LOG = logging.getLogger(__name__)
35
35
 
36
36
 
37
+ def is_trunk_bridge(bridge_name):
38
+ return bridge_name.startswith(constants.TRUNK_BR_PREFIX)
39
+
40
+
37
41
  class OvsPlugin(plugin.PluginBase):
38
42
  """An OVS plugin that can setup VIFs in many ways
39
43
 
@@ -202,8 +206,12 @@ class OvsPlugin(plugin.PluginBase):
202
206
  # bound the interface in the vif binding details so isolation
203
207
  # can be enabled automatically in the future.
204
208
  bridge = kwargs.pop('bridge', vif.network.bridge)
205
- if self._isolate_vif(vif_name, bridge):
209
+ # See bug #2069543.
210
+ if (self._isolate_vif(vif_name, bridge) and
211
+ not is_trunk_bridge(bridge)):
206
212
  kwargs['tag'] = constants.DEAD_VLAN
213
+ kwargs['vlan_mode'] = 'trunk'
214
+ kwargs['trunks'] = constants.DEAD_VLAN
207
215
  qos_type = self._get_qos_type(vif)
208
216
  if qos_type is not None:
209
217
  # NOTE(sean-k-mooney): If the port is not already created
@@ -303,8 +311,8 @@ class OvsPlugin(plugin.PluginBase):
303
311
  instance_id = instance_info.uuid
304
312
  LOG.debug(
305
313
  'creating patch port pair \n'
306
- f'{port_bridge_name}:({port_bridge_patch}) -> '
307
- f'{int_bridge_name}:({int_bridge_patch})'
314
+ f'{port_bridge_name}: ({port_bridge_patch}) -> '
315
+ f'{int_bridge_name}: ({int_bridge_patch})'
308
316
  )
309
317
  self.ovsdb.create_patch_port_pair(
310
318
  port_bridge_name, port_bridge_patch, int_bridge_name,
@@ -384,11 +392,8 @@ class OvsPlugin(plugin.PluginBase):
384
392
  vif=vif,
385
393
  err="This vif type is not supported by this plugin")
386
394
 
387
- def _is_trunk_bridge(self, bridge_name):
388
- return bridge_name.startswith(constants.TRUNK_BR_PREFIX)
389
-
390
395
  def _delete_bridge_if_trunk(self, vif):
391
- if self._is_trunk_bridge(vif.network.bridge):
396
+ if is_trunk_bridge(vif.network.bridge):
392
397
  self.ovsdb.delete_ovs_bridge(vif.network.bridge)
393
398
 
394
399
  def _unplug_vhostuser(self, vif, instance_info):
@@ -16,6 +16,7 @@ from oslo_log import log as logging
16
16
 
17
17
  from vif_plug_ovs import constants
18
18
  from vif_plug_ovs import linux_net
19
+ from vif_plug_ovs import ovs
19
20
  from vif_plug_ovs.ovsdb import api as ovsdb_api
20
21
 
21
22
 
@@ -139,7 +140,7 @@ class BaseOVS(object):
139
140
  self, bridge, dev, iface_id, mac, instance_id,
140
141
  mtu=None, interface_type=None, vhost_server_path=None,
141
142
  tag=None, pf_pci=None, vf_num=None, set_ids=True, datapath_type=None,
142
- qos_type=None
143
+ qos_type=None, vlan_mode=None, trunks=None
143
144
  ):
144
145
  """Create OVS port
145
146
 
@@ -167,6 +168,21 @@ class BaseOVS(object):
167
168
  'iface-status': 'active',
168
169
  'attached-mac': mac,
169
170
  'vm-uuid': instance_id}
171
+
172
+ # Note(lajoskatona): Neutron fills external_ids for trunk, see:
173
+ # https://opendev.org/openstack/neutron/src/commit/
174
+ # 1bc4b526e9c743423069ab4cf6ef3883d5e48217/neutron/services/trunk/
175
+ # drivers/openvswitch/agent/ovsdb_handler.py#L418
176
+ # The following keys are added there: bridge_name, trunk_id and
177
+ # subport_ids. These values are used during the cleanup after the
178
+ # deletion of the trunk. It can happen that Neutron can't fill these
179
+ # fields.
180
+ # In os-vif when the plug happens we can use the same transaction to
181
+ # add bridge_name to external_ids in case of it is a trunk.
182
+ # By this Neutron can do the cleanup of trunk related interfaces.
183
+ if ovs.is_trunk_bridge(bridge):
184
+ external_ids['bridge_name'] = bridge
185
+
170
186
  col_values = [('external_ids', external_ids)] if set_ids else []
171
187
  if interface_type:
172
188
  col_values.append(('type', interface_type))
@@ -204,6 +220,11 @@ class BaseOVS(object):
204
220
  txn.add(self.ovsdb.add_port(bridge, dev))
205
221
  if tag:
206
222
  txn.add(self.ovsdb.db_set('Port', dev, ('tag', tag)))
223
+ if vlan_mode:
224
+ txn.add(self.ovsdb.db_set('Port', dev,
225
+ ('vlan_mode', vlan_mode)))
226
+ if trunks:
227
+ txn.add(self.ovsdb.db_set('Port', dev, ('trunks', trunks)))
207
228
  if qid:
208
229
  txn.add(self.ovsdb.db_set('Port', dev, ('qos', qid)))
209
230
  if col_values: