Merge "add pyproject.toml to support pip 23.1"
diff --git a/.zuul.yaml b/.zuul.yaml
index e01c993..12109ba 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -113,10 +113,10 @@
     parent: telemetry-tempest-base
     branches:
       # TODO: We should switch to more recent version
-      - stable/2023.2
+      - unmaintained/2023.1
     required-projects:
       - name: gnocchixyz/gnocchi
-        override-checkout: stable/4.6
+        override-checkout: stable/4.5
     vars: &no_prometheus_vars
       devstack_localrc:
         GLOBAL_VENV: False
@@ -131,17 +131,6 @@
               autoscaling_instance_grouping: prefix
 
 - job:
-    name: telemetry-dsvm-integration
-    parent: telemetry-tempest-base
-    branches:
-      # TODO: We should switch to more recent version
-      - stable/2023.1
-    required-projects:
-      - name: gnocchixyz/gnocchi
-        override-checkout: stable/4.5
-    vars: *no_prometheus_vars
-
-- job:
     name: telemetry-dsvm-integration-ipv6-only-base
     parent: devstack-tempest-ipv6
     description: |
@@ -174,20 +163,8 @@
     description: |
       Telemetry devstack tempest tests job for IPv6-only deployment
     branches:
-      - stable/2023.2
-    required-projects:
-      - name: gnocchixyz/gnocchi
-        override-checkout: stable/4.6
-    vars: *no_prometheus_vars
-
-- job:
-    name: telemetry-dsvm-integration-ipv6-only
-    parent: telemetry-dsvm-integration-ipv6-only-base
-    description: |
-      Telemetry devstack tempest tests job for IPv6-only deployment
-    branches:
       # TODO: We should switch to more recent version
-      - stable/2023.1
+      - unmaintained/2023.1
     required-projects:
       - name: gnocchixyz/gnocchi
         override-checkout: stable/4.5
@@ -213,6 +190,65 @@
     vars:
       nslookup_target: "opendev.org"
 
+- job:
+    name: telemetry-dsvm-integration-aetos
+    parent: telemetry-tempest-base
+    # NOTE(jwysogla): Let's keep the job non-voting for now. Before switching
+    # to voting, we should:
+    # - run this job in Aetos
+    # - have Aodh do tenancy modification of queries
+    # - have a few runs of the job to ensure stability
+    voting: false
+    description: This is a job to test telemetry with Aetos
+    required-projects: &aetos_required_projects
+      - openstack/aodh
+      - openstack/ceilometer
+      - openstack/devstack-plugin-prometheus
+      - openstack/telemetry-tempest-plugin
+      - openstack/heat-tempest-plugin
+      - openstack/heat
+      - openstack/diskimage-builder
+      - openstack/tempest
+      - openstack/python-observabilityclient
+      - openstack/aetos
+      - openstack-k8s-operators/sg-core
+    vars: &aetos_vars
+      devstack_plugins:
+        heat: https://opendev.org/openstack/heat
+        ceilometer: https://opendev.org/openstack/ceilometer
+        aodh: https://opendev.org/openstack/aodh
+        sg-core: https://github.com/openstack-k8s-operators/sg-core
+        devstack-plugin-prometheus: https://opendev.org/openstack/devstack-plugin-prometheus
+        aetos: https://opendev.org/openstack/aetos
+      devstack_localrc:
+        TEMPEST_PLUGINS: '"/opt/stack/telemetry-tempest-plugin /opt/stack/heat-tempest-plugin"'
+        CEILOMETER_BACKENDS: "sg-core"
+        CEILOMETER_PIPELINE_INTERVAL: 15
+        CEILOMETER_ALARM_THRESHOLD: 6000000000
+        AODH_DEPLOY: uwsgi
+        PROMETHEUS_CUSTOM_SCRAPE_TARGETS: "localhost:3000"
+        SG_CORE_CONFIGURE_OBSERVABILITYCLIENT: false
+      devstack_local_conf:
+        test-config:
+          $TEMPEST_CONFIG:
+            service_available:
+              gnocchi: False
+
+- job:
+    name: telemetry-dsvm-integration-aetos-ipv6-only
+    parent: telemetry-dsvm-integration-ipv6-only-base
+    voting: false
+    description: |
+      Telemetry devstack tempest tests job with Aetos for IPv6-only deployment
+    irrelevant-files:
+      - ^(test-|)requirements.txt$
+      - ^setup.cfg$
+      - ^doc/.*$
+      - ^.*\.rst$
+      - ^releasenotes/.*$
+    required-projects: *aetos_required_projects
+    vars: *aetos_vars
+
 - project:
     queue: telemetry
     templates:
@@ -227,6 +263,8 @@
         - telemetry-dsvm-integration-ipv6-only
         - telemetry-dsvm-integration-centos-9s
         - telemetry-dsvm-integration-centos-9s-fips
+        - telemetry-dsvm-integration-aetos
+        - telemetry-dsvm-integration-aetos-ipv6-only
     gate:
       jobs:
         - telemetry-dsvm-integration
diff --git a/requirements.txt b/requirements.txt
index 17f694d..6a74e48 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,3 +3,5 @@
 oslo.utils>=3.37.0 # Apache-2.0
 tempest>=17.1.0 # Apache-2.0
 gabbi>=2.7.0 # Apache-2.0
+requests>=2.14.2 # Apache-2.0
+testtools>=2.2.0 # MIT
diff --git a/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api.py b/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api.py
index 0fd826b..f39960f 100644
--- a/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api.py
+++ b/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api.py
@@ -29,8 +29,13 @@
         """
 
         super(TelemetryAlarmingAPIGnocchiTest, cls).skip_checks()
+        if not CONF.service_available.gnocchi:
+            msg = ("%s: Skipping Gnocchi specific tests without Gnocchi" %
+                   cls.__name__)
+            raise cls.skipException(msg)
+
         if 'gnocchi' not in CONF.telemetry_services.metric_backends:
-            msg = ("%s: Skipping Gnocchi specific tests withouth Gnocchi" %
+            msg = ("%s: Gnocchi is not one of the configured metric backends" %
                    cls.__name__)
             raise cls.skipException(msg)
 
diff --git a/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api_negative.py b/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api_negative.py
index 240dd3a..bf55dfe 100644
--- a/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api_negative.py
+++ b/telemetry_tempest_plugin/aodh/api/gnocchi/test_alarming_api_negative.py
@@ -39,8 +39,13 @@
         """
 
         super(TelemetryAlarmingNegativeGnocchiTest, cls).skip_checks()
+        if not CONF.service_available.gnocchi:
+            msg = ("%s: Skipping Gnocchi specific tests without Gnocchi" %
+                   cls.__name__)
+            raise cls.skipException(msg)
+
         if 'gnocchi' not in CONF.telemetry_services.metric_backends:
-            msg = ("%s: Skipping Gnocchi specific tests withouth Gnocchi" %
+            msg = ("%s: Gnocchi is not one of the configured metric backends" %
                    cls.__name__)
             raise cls.skipException(msg)
 
diff --git a/telemetry_tempest_plugin/scenario/test_telemetry_integration.py b/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
index 44a6dff..0f3e18b 100644
--- a/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
+++ b/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
@@ -11,9 +11,9 @@
 #    under the License.
 
 import os
-import requests
 import time
 
+import requests
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.scenario import manager
diff --git a/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py b/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
index 49ce5e8..6f9e3f6 100644
--- a/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
+++ b/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
@@ -11,9 +11,9 @@
 #    under the License.
 
 import os
-import requests
 import time
 
+import requests
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.scenario import manager