Merge "Vmedia advanced ops: Clarify config drive and don't ping after rebuild"
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 6a29daa..a94eee0 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,4 +1,4 @@
-sphinx>=2.0.0,!=2.1.0 # BSD
+sphinx>=2.0.0 # BSD
 openstackdocstheme>=2.2.1 # Apache-2.0
 
 reno>=3.1.0 # Apache-2.0
diff --git a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
index 453ccfa..5901d20 100644
--- a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
+++ b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
@@ -25,96 +25,6 @@
 CONF = config.CONF
 
 
-class BaremetalAgentIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'agent_ipmitool'
-    image_ref = CONF.baremetal.whole_disk_image_ref
-    wholedisk_image = True
-
-    @decorators.idempotent_id('defff515-a6ff-44f6-9d8d-2ded51196d98')
-    @utils.services('image', 'network', 'object_storage')
-    def test_ip_access_to_server(self):
-        self.boot_and_verify_node()
-
-
-class BaremetalAgentIpmitoolWholediskHttpLink(
-        bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'agent_ipmitool'
-    image_ref = CONF.baremetal.whole_disk_image_url
-    image_checksum = CONF.baremetal.whole_disk_image_checksum
-    wholedisk_image = True
-
-    @classmethod
-    def skip_checks(cls):
-        super(BaremetalAgentIpmitoolWholediskHttpLink, cls).skip_checks()
-        if not CONF.baremetal_feature_enabled.ipxe_enabled:
-            skip_msg = ("HTTP server is not available when ipxe is disabled.")
-            raise cls.skipException(skip_msg)
-
-    @decorators.idempotent_id('d926c683-1a32-44df-afd0-e60134346fd0')
-    @utils.services('network')
-    def test_ip_access_to_server(self):
-        self.boot_and_verify_node()
-
-
-class BaremetalAgentIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'agent_ipmitool'
-    image_ref = CONF.baremetal.partition_image_ref
-    wholedisk_image = False
-
-    @decorators.idempotent_id('27b86130-d8dc-419d-880a-fbbbe4ce3f8c')
-    @utils.services('image', 'network', 'object_storage')
-    def test_ip_access_to_server(self):
-        self.boot_and_verify_node()
-
-
-class BaremetalPxeIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'pxe_ipmitool'
-    image_ref = CONF.baremetal.whole_disk_image_ref
-    wholedisk_image = True
-
-    @decorators.idempotent_id('d8c5badd-45db-4d05-bbe8-35babbed6e86')
-    @utils.services('image', 'network')
-    def test_ip_access_to_server(self):
-        self.boot_and_verify_node()
-
-
-class BaremetalPxeIpmitoolWholediskHttpLink(
-        bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'pxe_ipmitool'
-    image_ref = CONF.baremetal.whole_disk_image_url
-    image_checksum = CONF.baremetal.whole_disk_image_checksum
-    wholedisk_image = True
-
-    @classmethod
-    def skip_checks(cls):
-        super(BaremetalPxeIpmitoolWholediskHttpLink, cls).skip_checks()
-        if not CONF.baremetal_feature_enabled.ipxe_enabled:
-            skip_msg = ("HTTP server is not available when ipxe is disabled.")
-            raise cls.skipException(skip_msg)
-
-    @decorators.idempotent_id('71ccf06f-6765-40fd-8252-1b1bfa423b9b')
-    @utils.services('network')
-    def test_ip_access_to_server(self):
-        self.boot_and_verify_node()
-
-
-class BaremetalPxeIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'pxe_ipmitool'
-    image_ref = CONF.baremetal.partition_image_ref
-    wholedisk_image = False
-
-    @decorators.idempotent_id('ea85e19c-6869-4577-b9bb-2eb150f77c90')
-    @utils.services('image', 'network')
-    def test_ip_access_to_server(self):
-        self.boot_and_verify_node()
-
-
 class BaremetalDriverIscsiWholedisk(bsm.BaremetalStandaloneScenarioTest):
 
     api_microversion = '1.31'  # to set the deploy_interface
diff --git a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py
index 7496cf8..a18f8e9 100644
--- a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py
+++ b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py
@@ -33,36 +33,6 @@
 CONF = config.CONF
 
 
-class BaremetalCleaningAgentIpmitoolWholedisk(
-        bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'agent_ipmitool'
-    image_ref = CONF.baremetal.whole_disk_image_ref
-    wholedisk_image = True
-    delete_node = False
-    api_microversion = '1.28'
-
-    @decorators.idempotent_id('0d82cedd-9697-4cf7-8e4a-80d510f53615')
-    @utils.services('image', 'network')
-    def test_manual_cleaning(self):
-        self.check_manual_partition_cleaning(self.node)
-
-
-class BaremetalCleaningPxeIpmitoolWholedisk(
-        bsm.BaremetalStandaloneScenarioTest):
-
-    driver = 'pxe_ipmitool'
-    image_ref = CONF.baremetal.whole_disk_image_ref
-    wholedisk_image = True
-    delete_node = False
-    api_microversion = '1.28'
-
-    @decorators.idempotent_id('fb03abfa-cdfc-41ec-aaa8-c70402786a85')
-    @utils.services('image', 'network')
-    def test_manual_cleaning(self):
-        self.check_manual_partition_cleaning(self.node)
-
-
 class BaremetalCleaningIpmiWholedisk(
         bsm.BaremetalStandaloneScenarioTest):
 
diff --git a/requirements.txt b/requirements.txt
index cde72ba..bfafa58 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,11 +1,7 @@
-# The order of packages is significant, because pip processes them in the order
-# of appearance. Changing the order has an impact on the overall integration
-# process, which may cause wedges in the gate later.
-
-pbr!=2.1.0,>=2.0.0 # Apache-2.0
+pbr>=2.0.0 # Apache-2.0
 oslo.config>=5.2.0 # Apache-2.0
 oslo.log>=3.36.0 # Apache-2.0
-oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
+oslo.serialization>=2.18.0 # Apache-2.0
 oslo.utils>=3.33.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
 tempest>=27.0.0 # Apache-2.0
diff --git a/test-requirements.txt b/test-requirements.txt
index 33a724b..0ce003e 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,6 +1,2 @@
-# The order of packages is significant, because pip processes them in the order
-# of appearance. Changing the order has an impact on the overall integration
-# process, which may cause wedges in the gate later.
-
 stestr>=1.0.0 # Apache-2.0
-coverage!=4.4,>=4.0 # Apache-2.0
+coverage>=4.0 # Apache-2.0
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index c261a70..7720986 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -7,65 +7,68 @@
       jobs:
         # NOTE(dtantsur): keep N-3 and older non-voting for these jobs.
         - ironic-standalone
+        - ironic-standalone-2024.1
         - ironic-standalone-2023.2
-        - ironic-standalone-2023.1
-        - ironic-standalone-zed:
+        - ironic-standalone-2023.1:
             voting: false
         - ironic-tempest-functional-python3
-        - ironic-tempest-functional-python3-2023.2
-        - ironic-tempest-functional-python3-2023.1
-        - ironic-tempest-functional-python3-zed:
+        - ironic-tempest-functional-python3-2024.1
+        - ironic-tempest-functional-python3-2023.2:
             voting: false
         - ironic-tempest-functional-rbac-scope-enforced
+        - ironic-tempest-functional-rbac-scope-enforced-2024.1
         - ironic-tempest-functional-rbac-scope-enforced-2023.2
         # Enable these *once* we have the policy fix backported
         # for making own node changes.
         # - ironic-tempest-functional-rbac-scope-enforced-2023.1
-        # - ironic-tempest-functional-rbac-scope-enforced-zed
         - ironic-inspector-tempest
+        - ironic-inspector-tempest-2024.1
         - ironic-inspector-tempest-2023.2
-        - ironic-inspector-tempest-2023.1
-        - ironic-inspector-tempest-zed:
+        - ironic-inspector-tempest-2023.1:
             voting: false
         - ironic-standalone-anaconda
+        - ironic-standalone-anaconda-2024.1
         - ironic-standalone-anaconda-2023.2
-        - ironic-standalone-anaconda-2023.1
+        - ironic-standalone-anaconda-2023.1:
+            voting: false
         - ironic-standalone-redfish
+        - ironic-standalone-redfish-2024.1
         - ironic-standalone-redfish-2023.2
-        - ironic-standalone-redfish-2023.1
-        - ironic-standalone-redfish-zed:
+        - ironic-standalone-redfish-2023.1:
             voting: false
         # NOTE(dtantsur): these jobs cover rarely changed tests and are quite
         # unstable, so keep them non-voting.
         - ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode:
             voting: false
+        - ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-2024.1:
+            voting: false
         - ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-2023.2:
             voting: false
         - ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-2023.1:
             voting: false
-        - ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-zed:
-            voting: false
         - ironic-inspector-tempest-discovery
+        - ironic-inspector-tempest-discovery-2024.1
         - ironic-inspector-tempest-discovery-2023.2
-        - ironic-inspector-tempest-discovery-2023.1
-        - ironic-inspector-tempest-discovery-zed:
+        - ironic-inspector-tempest-discovery-2023.1:
             voting: false
     gate:
       jobs:
         - ironic-standalone
+        - ironic-standalone-2024.1
         - ironic-standalone-2023.2
-        - ironic-standalone-2023.1
         - ironic-tempest-functional-python3
+        - ironic-tempest-functional-python3-2024.1
         - ironic-tempest-functional-python3-2023.2
-        - ironic-tempest-functional-python3-2023.1
+        - ironic-tempest-functional-rbac-scope-enforced-2024.1
         - ironic-tempest-functional-rbac-scope-enforced-2023.2
         - ironic-tempest-functional-rbac-scope-enforced
         - ironic-inspector-tempest
+        - ironic-inspector-tempest-2024.1
         - ironic-inspector-tempest-2023.2
-        - ironic-inspector-tempest-2023.1
         - ironic-inspector-tempest-rbac-scope-enforced
+        - ironic-inspector-tempest-rbac-scope-enforced-2024.1
         - ironic-inspector-tempest-rbac-scope-enforced-2023.2
         - ironic-standalone-redfish
+        - ironic-standalone-redfish-2024.1
         - ironic-standalone-redfish-2023.2
-        - ironic-standalone-redfish-2023.1
         - ironic-inspector-tempest-discovery
diff --git a/zuul.d/stable-jobs.yaml b/zuul.d/stable-jobs.yaml
index bbbe8c6..3643bf4 100644
--- a/zuul.d/stable-jobs.yaml
+++ b/zuul.d/stable-jobs.yaml
@@ -1,4 +1,9 @@
 - job:
+    name: ironic-standalone-2024.1
+    parent: ironic-standalone
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-standalone-2023.2
     parent: ironic-standalone
     override-checkout: stable/2023.2
@@ -47,6 +52,11 @@
         USE_PYTHON3: True
 
 - job:
+    name: ironic-standalone-redfish-2024.1
+    parent: ironic-standalone
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-standalone-redfish-2023.2
     parent: ironic-standalone
     override-checkout: stable/2023.2
@@ -99,6 +109,11 @@
         USE_PYTHON3: True
 
 - job:
+    name: ironic-standalone-anaconda-2024.1
+    parent: ironic-standalone-anaconda
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-standalone-anaconda-2023.2
     parent: ironic-standalone-anaconda
     override-checkout: stable/2023.2
@@ -109,6 +124,11 @@
     override-checkout: stable/2023.1
 
 - job:
+    name: ironic-tempest-functional-python3-2024.1
+    parent: ironic-tempest-functional-python3
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-tempest-functional-python3-2023.2
     parent: ironic-tempest-functional-python3
     override-checkout: stable/2023.2
@@ -154,6 +174,11 @@
     override-checkout: stable/train
 
 - job:
+    name: ironic-tempest-functional-rbac-scope-enforced-2024.1
+    parent: ironic-tempest-functional-rbac-scope-enforced
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-tempest-functional-rbac-scope-enforced-2023.2
     parent: ironic-tempest-functional-rbac-scope-enforced
     override-checkout: stable/2023.2
@@ -174,6 +199,11 @@
     override-checkout: stable/zed
 
 - job:
+    name: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-2024.1
+    parent: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-2023.2
     parent: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode
     override-checkout: stable/2023.2
@@ -217,6 +247,11 @@
         USE_PYTHON3: True
 
 - job:
+    name: ironic-inspector-tempest-2024.1
+    parent: ironic-inspector-tempest
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-inspector-tempest-2023.2
     parent: ironic-inspector-tempest
     override-checkout: stable/2023.2
@@ -274,6 +309,11 @@
         USE_PYTHON3: True
 
 - job:
+    name: ironic-inspector-tempest-rbac-scope-enforced-2024.1
+    parent: ironic-inspector-tempest-rbac-scope-enforced
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-inspector-tempest-rbac-scope-enforced-2023.2
     parent: ironic-inspector-tempest-rbac-scope-enforced
     override-checkout: stable/2023.2
@@ -289,6 +329,11 @@
     override-checkout: stable/zed
 
 - job:
+    name: ironic-inspector-tempest-discovery-2024.1
+    parent: ironic-inspector-tempest-discovery
+    override-checkout: stable/2024.1
+
+- job:
     name: ironic-inspector-tempest-discovery-2023.2
     parent: ironic-inspector-tempest-discovery
     override-checkout: stable/2023.2