Merge "Cleanup leftover stacks."
diff --git a/telemetry_tempest_plugin/scenario/test_telemetry_integration.py b/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
index 3cd7301..035c138 100644
--- a/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
+++ b/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
@@ -11,6 +11,8 @@
# under the License.
import os
+import requests
+import time
from tempest import config
from tempest.lib.common.utils import data_utils
@@ -28,6 +30,10 @@
TIMEOUT_SCALING_FACTOR = 5
@classmethod
+ def resource_setup(cls):
+ cls.stack_name = data_utils.rand_name("telemetry")
+
+ @classmethod
def skip_checks(cls):
super(TestTelemetryIntegration, cls).skip_checks()
for name in ["aodh", "gnocchi", "nova", "heat",
@@ -74,6 +80,29 @@
opt_section.catalog_type)
return endpoints[0]['endpoints'][0][endpoint_type].rstrip('/')
+ @classmethod
+ def resource_cleanup(cls):
+ headers = {'X-Auth-Token': cls.os_primary.auth_provider.get_auth()[0]}
+ url = os.environ['HEAT_SERVICE_URL'] + "/stacks/" + cls.stack_name
+ r = requests.get(url, headers=headers)
+
+ if r.status_code == 200 and \
+ "stack" in r.json():
+ stack = r.json()["stack"]
+ stack_url = (f'{os.environ["HEAT_SERVICE_URL"]}/stacks/'
+ f'{stack["stack_name"]}/{stack["id"]}')
+ requests.delete(stack_url, headers=headers)
+
+ repeats = 0
+ r = requests.get(stack_url, headers=headers)
+ while r.json()["stack"]["stack_status"] == \
+ "DELETE_IN_PROGRESS" and repeats < 30:
+ time.sleep(2)
+ r = requests.get(stack_url, headers=headers)
+ repeats += 1
+
+ super(TestTelemetryIntegration, cls).resource_cleanup()
+
def _prep_test(self, filename):
admin_auth = self.os_admin.auth_provider.get_auth()
auth = self.os_primary.auth_provider.get_auth()
@@ -99,7 +128,7 @@
"GLANCE_IMAGE_NAME": self.image_create(),
"NOVA_FLAVOR_REF": config.CONF.compute.flavor_ref,
"NEUTRON_NETWORK": networks[0].get('id'),
- "STACK_NAME": data_utils.rand_name('telemetry'),
+ "STACK_NAME": self.stack_name,
})
diff --git a/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py b/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
index 0d6637b..63b4661 100644
--- a/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
+++ b/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
@@ -11,6 +11,8 @@
# under the License.
import os
+import requests
+import time
from tempest import config
from tempest.lib.common.utils import data_utils
@@ -29,6 +31,10 @@
TIMEOUT_SCALING_FACTOR = 5
@classmethod
+ def resource_setup(cls):
+ cls.stack_name = data_utils.rand_name("telemetry")
+
+ @classmethod
def skip_checks(cls):
super(PrometheusGabbiTest, cls).skip_checks()
for name in ["aodh", "nova", "heat",
@@ -75,15 +81,37 @@
opt_section.catalog_type)
return endpoints[0]['endpoints'][0][endpoint_type].rstrip('/')
+ @classmethod
+ def resource_cleanup(cls):
+ headers = {'X-Auth-Token': cls.os_primary.auth_provider.get_auth()[0]}
+ url = os.environ['HEAT_SERVICE_URL'] + "/stacks/" + cls.stack_name
+ r = requests.get(url, headers=headers)
+
+ if r.status_code == 200 and \
+ "stack" in r.json():
+ stack = r.json()["stack"]
+ stack_url = (f'{os.environ["HEAT_SERVICE_URL"]}/stacks/'
+ f'{stack["stack_name"]}/{stack["id"]}')
+ requests.delete(stack_url, headers=headers)
+
+ repeats = 0
+ r = requests.get(stack_url, headers=headers)
+ while r.json()["stack"]["stack_status"] == \
+ "DELETE_IN_PROGRESS" and repeats < 30:
+ time.sleep(2)
+ r = requests.get(stack_url, headers=headers)
+ repeats += 1
+
+ super(PrometheusGabbiTest, cls).resource_cleanup()
+
def _prep_test(self, filename):
auth = self.os_primary.auth_provider.get_auth()
networks = self.os_primary.networks_client.list_networks(
**{'router:external': False, 'fields': 'id'})['networks']
- stack_name = data_utils.rand_name('telemetry')
# NOTE(marihan): This is being used in prometheus query as heat is
# using the last 7 digits from stack_name to create the autoscaling
# resources.
- resource_prefix = stack_name[-7:]
+ resource_prefix = self.stack_name[-7:]
prometheus_rate_duration = (
config.CONF.telemetry.ceilometer_polling_interval
+ config.CONF.telemetry.prometheus_scrape_interval)
@@ -104,7 +132,7 @@
"GLANCE_IMAGE_NAME": self.image_create(),
"NOVA_FLAVOR_REF": config.CONF.compute.flavor_ref,
"NEUTRON_NETWORK": networks[0].get('id'),
- "STACK_NAME": stack_name,
+ "STACK_NAME": self.stack_name,
"RESOURCE_PREFIX": resource_prefix,
"PROMETHEUS_RATE_DURATION": str(prometheus_rate_duration),
})