From 60743d6ba61a68f0b40e6af75ad527fe70fc5c53 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Thu, 4 Jan 2018 15:13:48 -0500 Subject: [PATCH] add the `vault_id` to the response payload on the JT launch endpoint see: https://github.com/ansible/awx/issues/914 --- awx/api/serializers.py | 9 +++++---- .../functional/api/test_job_runtime_params.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 07e6af7f64..1ca84dce6b 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -3646,15 +3646,16 @@ class JobLaunchSerializer(BaseSerializer): id=getattrd(obj, '%s.pk' % field_name, None)) elif field_name == 'credentials': if self.version > 1: - defaults_dict[field_name] = [ - dict( + for cred in obj.credentials.all(): + cred_dict = dict( id=cred.id, name=cred.name, credential_type=cred.credential_type.pk, passwords_needed=cred.passwords_needed ) - for cred in obj.credentials.all() - ] + if cred.credential_type.managed_by_tower and 'vault_id' in cred.credential_type.defined_fields: + cred_dict['vault_id'] = cred.inputs.get('vault_id') or None + defaults_dict.setdefault(field_name, []).append(cred_dict) else: defaults_dict[field_name] = getattr(obj, field_name) return defaults_dict 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 402547b1a6..7cfd0a3871 100644 --- a/awx/main/tests/functional/api/test_job_runtime_params.py +++ b/awx/main/tests/functional/api/test_job_runtime_params.py @@ -403,6 +403,22 @@ def test_job_launch_fails_with_missing_multivault_password(machine_credential, v url = reverse('api:job_template_launch', kwargs={'pk': deploy_jobtemplate.pk}) resp = get(url, rando, expect=200) + + assert { + 'credential_type': vault_cred_first.credential_type_id, + 'passwords_needed': ['vault_password.abc'], + 'vault_id': u'abc', + 'name': u'Vault #1', + 'id': vault_cred_first.id + } in resp.data['defaults']['credentials'] + assert { + 'credential_type': vault_cred_second.credential_type_id, + 'passwords_needed': ['vault_password.xyz'], + 'vault_id': u'xyz', + 'name': u'Vault #2', + 'id': vault_cred_second.id + } in resp.data['defaults']['credentials'] + assert resp.data['passwords_needed_to_start'] == ['vault_password.abc', 'vault_password.xyz'] assert sum([ cred['passwords_needed'] for cred in resp.data['defaults']['credentials']