diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 5eab0bea9a..572b4246ad 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2234,8 +2234,9 @@ class JobLaunchSerializer(BaseSerializer): except (ValueError, TypeError): try: extra_vars = yaml.safe_load(extra_vars) - except (yaml.YAMLError, TypeError, AttributeError): - errors['extra_vars'] = 'Must be valid JSON or YAML' + assert isinstance(extra_vars, dict) + except (yaml.YAMLError, TypeError, AttributeError, AssertionError): + errors['extra_vars'] = 'Must be a valid JSON or YAML dictionary' if not isinstance(extra_vars, dict): extra_vars = {} diff --git a/awx/main/tests/functional/api/test_job_runtime_params.py b/awx/main/tests/functional/api/test_job_runtime_params.py index a1069da198..6f76fdf1b6 100644 --- a/awx/main/tests/functional/api/test_job_runtime_params.py +++ b/awx/main/tests/functional/api/test_job_runtime_params.py @@ -159,7 +159,7 @@ def test_job_reject_invalid_prompted_extra_vars(runtime_data, job_template_promp dict(extra_vars='{"unbalanced brackets":'), user('admin', True)) assert response.status_code == 400 - assert response.data['extra_vars'] == ['Must be valid JSON or YAML'] + assert response.data['extra_vars'] == ['Must be a valid JSON or YAML dictionary'] @pytest.mark.django_db @pytest.mark.job_runtime_vars