diff -pruN 5.7.1-3/.zuul.yaml 5.9.0-3/.zuul.yaml
--- 5.7.1-3/.zuul.yaml	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/.zuul.yaml	2022-12-01 09:25:43.000000000 +0000
@@ -1,7 +1,6 @@
 - project:
     templates:
       - check-requirements
-      - openstack-python3-zed-jobs
+      - openstack-python3-jobs
       - release-notes-jobs-python3
-    gate:
-      queue: os-win
+    queue: os-win
diff -pruN 5.7.1-3/debian/changelog 5.9.0-3/debian/changelog
--- 5.7.1-3/debian/changelog	2022-12-01 09:09:59.000000000 +0000
+++ 5.9.0-3/debian/changelog	2023-08-21 13:02:16.000000000 +0000
@@ -1,3 +1,23 @@
+python-os-win (5.9.0-3) unstable; urgency=medium
+
+  * Cleans better (Closes: #1047819).
+
+ -- Thomas Goirand <zigo@debian.org>  Mon, 21 Aug 2023 15:02:16 +0200
+
+python-os-win (5.9.0-2) unstable; urgency=medium
+
+  * Uploading to unstable.
+
+ -- Thomas Goirand <zigo@debian.org>  Mon, 19 Jun 2023 11:11:45 +0200
+
+python-os-win (5.9.0-1) experimental; urgency=medium
+
+  * New upstream release.
+  * Removed version of oslo.utils, satisfied in Bookworm.
+  * Removed py3.11-use-getfullargspec-not-getargspec.patch applied upstream.
+
+ -- Thomas Goirand <zigo@debian.org>  Wed, 22 Feb 2023 09:33:29 +0100
+
 python-os-win (5.7.1-3) unstable; urgency=medium
 
   * Add py3.11-use-getfullargspec-not-getargspec.patch (Closes: #1025112).
diff -pruN 5.7.1-3/debian/control 5.9.0-3/debian/control
--- 5.7.1-3/debian/control	2022-12-01 09:09:59.000000000 +0000
+++ 5.9.0-3/debian/control	2023-08-21 13:02:16.000000000 +0000
@@ -23,7 +23,7 @@ Build-Depends-Indep:
  python3-oslo.config,
  python3-oslo.i18n,
  python3-oslo.log,
- python3-oslo.utils (>= 4.7.0),
+ python3-oslo.utils,
  python3-oslotest,
  python3-pep8,
  python3-stestr,
@@ -55,7 +55,7 @@ Depends:
  python3-oslo.config,
  python3-oslo.i18n,
  python3-oslo.log,
- python3-oslo.utils (>= 4.7.0),
+ python3-oslo.utils,
  python3-pbr,
  ${misc:Depends},
  ${python3:Depends},
diff -pruN 5.7.1-3/debian/patches/py3.11-use-getfullargspec-not-getargspec.patch 5.9.0-3/debian/patches/py3.11-use-getfullargspec-not-getargspec.patch
--- 5.7.1-3/debian/patches/py3.11-use-getfullargspec-not-getargspec.patch	2022-12-01 09:09:59.000000000 +0000
+++ 5.9.0-3/debian/patches/py3.11-use-getfullargspec-not-getargspec.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
-Description: Py 3.11: use getfullargspec
-Author: Thomas Goirand <zigo@debian.org>
-Bug-Debian: https://bugs.debian.org/1025112
-Forwarded: https://review.opendev.org/c/openstack/os-win/+/866306
-Last-Update: 2022-12-01
-
---- python-os-win-5.7.1.orig/os_win/tests/unit/test_utilsfactory.py
-+++ python-os-win-5.7.1/os_win/tests/unit/test_utilsfactory.py
-@@ -186,8 +186,8 @@ class TestHyperVUtilsFactory(test_base.O
-                          "public methods not listed in class %s" % baseclass)
- 
-         for name in sorted(implmethods.keys()):
--            baseargs = inspect.getargspec(basemethods[name])
--            implargs = inspect.getargspec(implmethods[name])
-+            baseargs = inspect.getfullargspec(basemethods[name])
-+            implargs = inspect.getfullargspec(implmethods[name])
- 
-             self.assertEqual(baseargs, implargs,
-                              "%s args don't match class %s" %
diff -pruN 5.7.1-3/debian/patches/series 5.9.0-3/debian/patches/series
--- 5.7.1-3/debian/patches/series	2022-12-01 09:09:59.000000000 +0000
+++ 5.9.0-3/debian/patches/series	2023-08-21 13:02:16.000000000 +0000
@@ -1,2 +1 @@
 remove-privacy-breach-in-docs.patch
-py3.11-use-getfullargspec-not-getargspec.patch
diff -pruN 5.7.1-3/debian/rules 5.9.0-3/debian/rules
--- 5.7.1-3/debian/rules	2022-12-01 09:09:59.000000000 +0000
+++ 5.9.0-3/debian/rules	2023-08-21 13:02:16.000000000 +0000
@@ -8,7 +8,9 @@ include /usr/share/openstack-pkg-tools/p
 
 override_dh_auto_clean:
 	python3 setup.py clean
-	rm -rf build
+	rm -rf build .stestr doc/source/_static *.egg-info
+	find . -iname '*.pyc' -delete
+	for i in $$(find . -type d -iname __pycache__) ; do rm -rf $$i ; done
 
 override_dh_auto_build:
 	echo "Do nothing..."
diff -pruN 5.7.1-3/os_win/tests/unit/test_utilsfactory.py 5.9.0-3/os_win/tests/unit/test_utilsfactory.py
--- 5.7.1-3/os_win/tests/unit/test_utilsfactory.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/test_utilsfactory.py	2022-12-01 09:25:43.000000000 +0000
@@ -186,8 +186,8 @@ class TestHyperVUtilsFactory(test_base.O
                          "public methods not listed in class %s" % baseclass)
 
         for name in sorted(implmethods.keys()):
-            baseargs = inspect.getargspec(basemethods[name])
-            implargs = inspect.getargspec(implmethods[name])
+            baseargs = inspect.getfullargspec(basemethods[name])
+            implargs = inspect.getfullargspec(implmethods[name])
 
             self.assertEqual(baseargs, implargs,
                              "%s args don't match class %s" %
diff -pruN 5.7.1-3/os_win/tests/unit/utils/compute/test_migrationutils.py 5.9.0-3/os_win/tests/unit/utils/compute/test_migrationutils.py
--- 5.7.1-3/os_win/tests/unit/utils/compute/test_migrationutils.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/compute/test_migrationutils.py	2022-12-01 09:25:43.000000000 +0000
@@ -114,7 +114,8 @@ class MigrationUtilsTestCase(test_base.O
                       mock.sentinel.job_path_ValidatePlannedSystem),
             mock.call(mock.sentinel.ret_val_RealizePlannedSystem,
                       mock.sentinel.job_path_RealizePlannedSystem)]
-        self._migrationutils._jobutils.check_ret_val.has_calls(expected_call)
+        self._migrationutils._jobutils.check_ret_val.assert_has_calls(
+            expected_call)
 
     @ddt.data([mock.sentinel.planned_vm], [])
     def test_get_planned_vm(self, planned_vm):
diff -pruN 5.7.1-3/os_win/tests/unit/utils/compute/test_vmutils.py 5.9.0-3/os_win/tests/unit/utils/compute/test_vmutils.py
--- 5.7.1-3/os_win/tests/unit/utils/compute/test_vmutils.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/compute/test_vmutils.py	2022-12-01 09:25:43.000000000 +0000
@@ -1272,6 +1272,13 @@ class VMUtilsTestCase(test_base.OsWinBas
         self._vmutils._jobutils.stop_jobs.assert_called_once_with(
             mock_vm, None)
 
+    @mock.patch.object(vmutils.VMUtils, '_modify_virtual_system')
+    def test_set_allow_full_scsi_command_set(self, mock_modify_virtual_system):
+        mock_vm = self._lookup_vm()
+        self._vmutils.enable_vm_full_scsi_command_set(mock.sentinel.vm_name)
+        self.assertTrue(mock_vm.AllowFullSCSICommandSet)
+        mock_modify_virtual_system.assert_called_once_with(mock_vm)
+
     def test_set_secure_boot(self):
         vs_data = mock.MagicMock()
         self._vmutils._set_secure_boot(vs_data, msft_ca_required=False)
diff -pruN 5.7.1-3/os_win/tests/unit/utils/compute/test_vmutils10.py 5.9.0-3/os_win/tests/unit/utils/compute/test_vmutils10.py
--- 5.7.1-3/os_win/tests/unit/utils/compute/test_vmutils10.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/compute/test_vmutils10.py	2022-12-01 09:25:43.000000000 +0000
@@ -212,13 +212,13 @@ class VMUtils10TestCase(test_base.OsWinB
             sec_profile_serialization)
 
         expected_call = [
-            mock.call(mock.sentinel.job_path_SetKeyProtector,
-                      mock.sentinel.ret_val_SetKeyProtector),
-            mock.call(mock.sentinel.job_path_SetSecurityPolicy,
-                      mock.sentinel.ret_val_SetSecurityPolicy),
-            mock.call(mock.sentinel.job_path_ModifySecuritySettings,
-                      mock.sentinel.ret_val_ModifySecuritySettings)]
-        self._vmutils._jobutils.check_ret_val.has_calls(expected_call)
+            mock.call(mock.sentinel.ret_val_SetKeyProtector,
+                      mock.sentinel.job_path_SetKeyProtector),
+            mock.call(mock.sentinel.ret_val_SetSecurityPolicy,
+                      mock.sentinel.job_path_SetSecurityPolicy),
+            mock.call(mock.sentinel.ret_val_ModifySecuritySettings,
+                      mock.sentinel.job_path_ModifySecuritySettings)]
+        self._vmutils._jobutils.check_ret_val.assert_has_calls(expected_call)
         self.assertTrue(security_profile.EncryptStateAndVmMigrationTraffic)
         self.assertTrue(security_profile.TpmEnabled)
         self.assertTrue(security_profile.ShieldingRequested)
diff -pruN 5.7.1-3/os_win/tests/unit/utils/io/test_namedpipe.py 5.9.0-3/os_win/tests/unit/utils/io/test_namedpipe.py
--- 5.7.1-3/os_win/tests/unit/utils/io/test_namedpipe.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/io/test_namedpipe.py	2022-12-01 09:25:43.000000000 +0000
@@ -76,11 +76,11 @@ class NamedPipeTestCase(test_base.BaseTe
         thread = namedpipe.threading.Thread
         thread.assert_has_calls(
             [mock.call(target=self._handler._read_from_pipe),
-             mock.call().setDaemon(True),
              mock.call().start(),
              mock.call(target=self._handler._write_to_pipe),
-             mock.call().setDaemon(True),
              mock.call().start()])
+        for worker in self._handler._workers:
+            self.assertIs(True, worker.daemon)
 
     @mock.patch.object(namedpipe.NamedPipeHandler, 'stop')
     @mock.patch.object(namedpipe.NamedPipeHandler, '_open_pipe')
diff -pruN 5.7.1-3/os_win/tests/unit/utils/test_hostutils10.py 5.9.0-3/os_win/tests/unit/utils/test_hostutils10.py
--- 5.7.1-3/os_win/tests/unit/utils/test_hostutils10.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/test_hostutils10.py	2022-12-01 09:25:43.000000000 +0000
@@ -90,8 +90,8 @@ class HostUtils10TestCase(test_base.OsWi
             'dev_id': mock_pci_dev.DeviceID}
         self.assertEqual([expected_pci_dev], pci_devices)
         self._hostutils._conn.Msvm_PciExpress.assert_called_once_with()
-        mock_get_pci_device_address.has_calls(
-            [mock.call(mock_pci_dev.DeviceInstancePath)] * 3)
+        mock_get_pci_device_address.assert_has_calls(
+            [mock.call(mock_pci_dev.DeviceInstancePath)] * 2)
 
     def _check_get_pci_device_address_None(self, return_code=0):
         pnp_device = mock.MagicMock()
diff -pruN 5.7.1-3/os_win/tests/unit/utils/test_jobutils.py 5.9.0-3/os_win/tests/unit/utils/test_jobutils.py
--- 5.7.1-3/os_win/tests/unit/utils/test_jobutils.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/test_jobutils.py	2022-12-01 09:25:43.000000000 +0000
@@ -252,8 +252,11 @@ class JobUtilsTestCase(test_base.OsWinBa
 
         mock_calls = [
             mock.call(ResourceSettings=[mock.sentinel.res_data])] * num_calls
-        mock_svc.ModifyResourceSettings.has_calls(mock_calls)
-        mock_sleep.has_calls(mock.call(1) * num_calls)
+        mock_svc.ModifyResourceSettings.assert_has_calls(mock_calls)
+        if num_calls > 1:
+            mock_sleep.assert_has_calls([mock.call(1)] * (num_calls - 1))
+        else:
+            mock_sleep.assert_not_called()
 
     def test_add_virt_resource(self):
         self._test_virt_method('AddResourceSettings', 3, 'add_virt_resource',
diff -pruN 5.7.1-3/os_win/tests/unit/utils/test_pathutils.py 5.9.0-3/os_win/tests/unit/utils/test_pathutils.py
--- 5.7.1-3/os_win/tests/unit/utils/test_pathutils.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/tests/unit/utils/test_pathutils.py	2022-12-01 09:25:43.000000000 +0000
@@ -254,13 +254,8 @@ class PathUtilsTestCase(test_base.OsWinB
         mock_delete.assert_called_once_with(mock.sentinel.temporary_file)
 
     @mock.patch.object(shutil, 'copytree')
-    @mock.patch('os.path.abspath')
-    def test_copy_dir(self, mock_abspath, mock_copytree):
-        mock_abspath.side_effect = [mock.sentinel.src, mock.sentinel.dest]
+    def test_copy_dir(self, mock_copytree):
         self._pathutils.copy_dir(mock.sentinel.src, mock.sentinel.dest)
-
-        mock_abspath.has_calls(
-            [mock.call(mock.sentinel.src), mock.call(mock.sentinel.dest)])
         mock_copytree.assert_called_once_with(mock.sentinel.src,
                                               mock.sentinel.dest)
 
diff -pruN 5.7.1-3/os_win/utils/compute/clusterutils.py 5.9.0-3/os_win/utils/compute/clusterutils.py
--- 5.7.1-3/os_win/utils/compute/clusterutils.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/utils/compute/clusterutils.py	2022-12-01 09:25:43.000000000 +0000
@@ -605,7 +605,7 @@ class _ClusterEventListener(object):
         # If eventlet monkey patching is used, this will actually be a
         # greenthread. We just don't want to enforce eventlet usage.
         worker = threading.Thread(target=self._listen)
-        worker.setDaemon(True)
+        worker.daemon = True
 
         self._running = True
         worker.start()
diff -pruN 5.7.1-3/os_win/utils/compute/vmutils.py 5.9.0-3/os_win/utils/compute/vmutils.py
--- 5.7.1-3/os_win/utils/compute/vmutils.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/utils/compute/vmutils.py	2022-12-01 09:25:43.000000000 +0000
@@ -880,6 +880,13 @@ class VMUtils(baseutils.BaseUtilsVirt):
         raise exceptions.HyperVException(
             _("Exceeded the maximum number of slots"))
 
+    def enable_vm_full_scsi_command_set(self, vm_name):
+        """Enables the full SCSI command set for the specified VM."""
+
+        vs_data = self._lookup_vm_check(vm_name)
+        vs_data.AllowFullSCSICommandSet = True
+        self._modify_virtual_system(vs_data)
+
     def _get_vm_serial_ports(self, vmsettings):
         rasds = _wqlutils.get_element_associated_class(
             self._compat_conn, self._SERIAL_PORT_SETTING_DATA_CLASS,
diff -pruN 5.7.1-3/os_win/utils/io/namedpipe.py 5.9.0-3/os_win/utils/io/namedpipe.py
--- 5.7.1-3/os_win/utils/io/namedpipe.py	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/os_win/utils/io/namedpipe.py	2022-12-01 09:25:43.000000000 +0000
@@ -66,7 +66,7 @@ class NamedPipeHandler(object):
 
             for job in jobs:
                 worker = threading.Thread(target=job)
-                worker.setDaemon(True)
+                worker.daemon = True
                 worker.start()
                 self._workers.append(worker)
         except Exception as err:
diff -pruN 5.7.1-3/releasenotes/source/index.rst 5.9.0-3/releasenotes/source/index.rst
--- 5.7.1-3/releasenotes/source/index.rst	2022-08-23 06:37:32.000000000 +0000
+++ 5.9.0-3/releasenotes/source/index.rst	2022-12-01 09:25:43.000000000 +0000
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   zed
    yoga
    xena
    wallaby
diff -pruN 5.7.1-3/releasenotes/source/zed.rst 5.9.0-3/releasenotes/source/zed.rst
--- 5.7.1-3/releasenotes/source/zed.rst	1970-01-01 00:00:00.000000000 +0000
+++ 5.9.0-3/releasenotes/source/zed.rst	2022-12-01 09:25:43.000000000 +0000
@@ -0,0 +1,6 @@
+========================
+Zed Series Release Notes
+========================
+
+.. release-notes::
+   :branch: stable/zed
