From 55b6e22c561d390592807e0efe34479fd8ed09ef Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Wed, 20 Nov 2024 15:50:00 +0100 Subject: [PATCH 1/3] bump dev --- Squest/version.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Squest/version.py b/Squest/version.py index 31204f6e8..16aa1733b 100644 --- a/Squest/version.py +++ b/Squest/version.py @@ -1,2 +1,2 @@ -__version__ = "2.6.1" +__version__ = "2.7.0b" VERSION = __version__ diff --git a/pyproject.toml b/pyproject.toml index 5b160ba85..836797f33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "squest" -version = "2.6.1" +version = "2.7.0b" description = "Service catalog on top of Red Hat Ansible Automation Platform(RHAAP)/AWX (formerly known as Ansible Tower)" authors = ["Nicolas Marcq ", "Elias Boulharts "] license = "MIT" From c3cfd90ca5868cb4e4720b203a8c6a0175712c6f Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Wed, 20 Nov 2024 15:48:18 +0100 Subject: [PATCH 2/3] Fix: Credential id set in operation was not sent to AWX Closes #790 --- service_catalog/models/request.py | 20 ++++++++++ .../test_models/test_request.py | 39 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/service_catalog/models/request.py b/service_catalog/models/request.py index 5b090d7b4..f64570dcc 100644 --- a/service_catalog/models/request.py +++ b/service_catalog/models/request.py @@ -233,6 +233,26 @@ def perform_processing(self, inventory_override=None, credentials_override=None, "squest_host": settings.SQUEST_HOST, "request": AdminRequestSerializer(self).data } + + # load default override from the operation + if inventory_override is None: + inventory_override = self.operation.default_inventory_id + if credentials_override is None: + if self.operation.default_credentials_ids is not None: + credentials_override = self.operation.default_credentials_ids.split(",") + if tags_override is None and self.operation.default_tags is not None: + tags_override = self.operation.default_tags.split(",") + if skip_tags_override is None and self.operation.default_skip_tags is not None: + skip_tags_override = self.operation.default_skip_tags.split(",") + if limit_override is None and self.operation.default_limits is not None: + limit_override = self.operation.default_limits.split(",") + if verbosity_override is None: + verbosity_override = self.operation.default_verbosity + if job_type_override is None: + job_type_override = self.operation.default_job_type + if diff_mode_override is None: + diff_mode_override = self.operation.default_diff_mode + tower_job_id = None try: tower_job_id, error_message = self.operation.job_template.execute(extra_vars=tower_extra_vars, diff --git a/tests/test_service_catalog/test_models/test_request.py b/tests/test_service_catalog/test_models/test_request.py index b3dbaaa38..2f80e7280 100644 --- a/tests/test_service_catalog/test_models/test_request.py +++ b/tests/test_service_catalog/test_models/test_request.py @@ -537,3 +537,42 @@ def test_date_submitted_not_update_on_save(self): old_submitted_date = new_request.date_submitted new_request.save() self.assertEqual(old_submitted_date, new_request.date_submitted) + + def setup_default_on_operation(self): + self.create_operation_test.default_inventory_id = 1 + self.create_operation_test.default_limits = "machine_one,machine_two" + self.create_operation_test.default_tags = "tag1,tag2" + self.create_operation_test.default_skip_tags = "skipped_tag1,skipped_tag2" + self.create_operation_test.default_credentials_ids = "4,5" + self.create_operation_test.default_verbosity = "3" + self.create_operation_test.default_diff_mode = "new_diff" + self.create_operation_test.default_job_type = "new_job" + self.create_operation_test.save() + + def test_perform_processing_uses_default_from_operation(self): + self.create_operation_test.auto_process = True + self.setup_default_on_operation() + + with mock.patch("service_catalog.models.job_templates.JobTemplate.execute") as mock_job_execute: + mock_job_execute.return_value = 10, "" + self.test_request.accept(user=self.superuser) + args, called_args = mock_job_execute.call_args + self.assertEqual(called_args["inventory_override"],1) + self.assertEqual(called_args["credentials_override"],['4','5']) + self.assertEqual(called_args["tags_override"],["tag1", "tag2"]) + self.assertEqual(called_args["skip_tags_override"],["skipped_tag1","skipped_tag2"]) + self.assertEqual(called_args["limit_override"],["machine_one", "machine_two"]) + self.assertEqual(called_args["verbosity_override"],"3") + self.assertEqual(called_args["job_type_override"],"new_job") + self.assertEqual(called_args["diff_mode_override"],"new_diff") + + def test_perform_processing_uses_default_from_operation_override_on_accept(self): + # in this test we've set default credentials on the operation, but we override them on the process request page + self.setup_default_on_operation() + self.test_request.state = RequestState.PROCESSING + self.test_request.save() + with mock.patch("service_catalog.models.job_templates.JobTemplate.execute") as mock_job_execute: + mock_job_execute.return_value = 10, "" + self.test_request.perform_processing(inventory_override=3) + args, called_args = mock_job_execute.call_args + self.assertEqual(called_args["inventory_override"], 3) From 40103ac557f12f673446cc9d2ca34d586a29fd6f Mon Sep 17 00:00:00 2001 From: Nicolas Marcq Date: Wed, 20 Nov 2024 16:02:02 +0100 Subject: [PATCH 3/3] Add multiple workers to gunicorn --- docker/entrypoint.sh | 2 +- docker/environment_variables/squest.env | 2 ++ docs/configuration/squest_settings.md | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 2f56e81b0..29ad6e697 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -13,4 +13,4 @@ echo "Inserting default data" python manage.py insert_default_data echo "Starting web server" -gunicorn --bind 0.0.0.0:8000 --pythonpath /app/squest Squest.wsgi +gunicorn --bind 0.0.0.0:8000 --workers ${GUNICORN_WORKERS:-4} --pythonpath /app/squest Squest.wsgi diff --git a/docker/environment_variables/squest.env b/docker/environment_variables/squest.env index 1a208afd7..851fa86e8 100644 --- a/docker/environment_variables/squest.env +++ b/docker/environment_variables/squest.env @@ -33,3 +33,5 @@ REDIS_CACHE_HOST=redis-cache WAIT_HOSTS=db:3306,rabbitmq:5672 WAIT_TIMEOUT=60 + +GUNICORN_WORKERS=4 diff --git a/docs/configuration/squest_settings.md b/docs/configuration/squest_settings.md index 061901ba5..8df50dd60 100644 --- a/docs/configuration/squest_settings.md +++ b/docs/configuration/squest_settings.md @@ -208,6 +208,12 @@ Set to `True` to enable email notifications. Set to `True` to change the navbar and footer color to visually identify a testing instance of Squest. +### GUNICORN_WORKERS + +**Default:** `4` + +Number of workers used by Gunicorn process in charge of serving client connection. Increase the number of worker threads to serve more clients concurrently + ## SMTP ### EMAIL_HOST