diff --git a/awx/main/tasks.py b/awx/main/tasks.py index da9dbdb202..ede7e04de9 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -819,7 +819,7 @@ class BaseTask(object): private_data_files['credentials'][credential] = path for credential, data in private_data.get('certificates', {}).items(): name = 'credential_%d-cert.pub' % credential.pk - path = os.path.join(kwargs['private_data_dir'], name) + path = os.path.join(private_data_dir, name) with open(path, 'w') as f: f.write(data) f.close() @@ -1290,7 +1290,7 @@ class RunJob(BaseTask): } ''' private_data = {'credentials': {}} - for credential in job.credentials.all(): + for credential in job.credentials.prefetch_related('input_sources__source_credential').all(): # If we were sent SSH credentials, decrypt them and send them # back (they will be written to a temporary file). if credential.has_input('ssh_key_data'): @@ -1521,7 +1521,7 @@ class RunJob(BaseTask): return self._write_extra_vars_file(private_data_dir, extra_vars, safe_dict) def build_credentials_list(self, job): - return job.credentials.all() + return job.credentials.prefetch_related('input_sources__source_credential').all() def get_password_prompts(self, passwords={}): d = super(RunJob, self).get_password_prompts(passwords) diff --git a/awx/main/tests/unit/test_tasks.py b/awx/main/tests/unit/test_tasks.py index ca4172cc67..07a6959f58 100644 --- a/awx/main/tests/unit/test_tasks.py +++ b/awx/main/tests/unit/test_tasks.py @@ -700,7 +700,8 @@ class TestJobCredentials(TestJobExecution): __iter__ = lambda *args: iter(job._credentials), first = lambda: job._credentials[0] ), - 'spec_set': ['all', 'add', 'filter'] + 'prefetch_related': lambda _: credentials_mock, + 'spec_set': ['all', 'add', 'filter', 'prefetch_related'], }) with mock.patch.object(UnifiedJob, 'credentials', credentials_mock):