mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 23:07:42 -02:30
AC-1192 Added special tower extra_vars when running jobs.
This commit is contained in:
@@ -516,11 +516,30 @@ class RunJob(BaseTask):
|
|||||||
args.extend(['-l', job.limit])
|
args.extend(['-l', job.limit])
|
||||||
if job.verbosity:
|
if job.verbosity:
|
||||||
args.append('-%s' % ('v' * min(3, job.verbosity)))
|
args.append('-%s' % ('v' * min(3, job.verbosity)))
|
||||||
if job.extra_vars_dict:
|
|
||||||
args.extend(['-e', json.dumps(job.extra_vars_dict)])
|
|
||||||
if job.job_tags:
|
if job.job_tags:
|
||||||
args.extend(['-t', job.job_tags])
|
args.extend(['-t', job.job_tags])
|
||||||
args.append(job.playbook) # relative path to project.local_path
|
|
||||||
|
# Define special extra_vars for Tower, combine with job.extra_vars.
|
||||||
|
extra_vars = {
|
||||||
|
'tower_job_id': job.pk,
|
||||||
|
'tower_job_launch_type': job.launch_type,
|
||||||
|
}
|
||||||
|
if job.job_template and job.job_template.active:
|
||||||
|
extra_vars.update({
|
||||||
|
'tower_job_template_id': job.job_template.pk,
|
||||||
|
'tower_job_template_name': job.job_template.name,
|
||||||
|
})
|
||||||
|
if job.created_by and job.created_by.is_active:
|
||||||
|
extra_vars.update({
|
||||||
|
'tower_user_id': job.created_by.pk,
|
||||||
|
'tower_user_name': job.created_by.username,
|
||||||
|
})
|
||||||
|
if job.extra_vars_dict:
|
||||||
|
extra_vars.update(job.extra_vars_dict)
|
||||||
|
args.extend(['-e', json.dumps(extra_vars)])
|
||||||
|
|
||||||
|
# Add path to playbook (relative to project.local_path).
|
||||||
|
args.append(job.playbook)
|
||||||
|
|
||||||
# If ssh unlock password is needed, run using ssh-agent.
|
# If ssh unlock password is needed, run using ssh-agent.
|
||||||
if ssh_key_path and use_ssh_agent:
|
if ssh_key_path and use_ssh_agent:
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ from django.conf import settings
|
|||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
|
# Django-CRUM
|
||||||
|
from crum import impersonate
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.main.models import *
|
from awx.main.models import *
|
||||||
from awx.main.tests.base import BaseLiveServerTest
|
from awx.main.tests.base import BaseLiveServerTest
|
||||||
@@ -33,6 +36,20 @@ TEST_PLAYBOOK2 = '''- hosts: test-group
|
|||||||
command: test 1 = 0
|
command: test 1 = 0
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
TEST_EXTRA_VARS_PLAYBOOK = '''- hosts: test-group
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- fail: msg="{{item}} is not defined"
|
||||||
|
when: "{{item}} is not defined"
|
||||||
|
with_items:
|
||||||
|
- tower_job_id
|
||||||
|
- tower_job_launch_type
|
||||||
|
- tower_job_template_id
|
||||||
|
- tower_job_template_name
|
||||||
|
- tower_user_id
|
||||||
|
- tower_user_name
|
||||||
|
'''
|
||||||
|
|
||||||
TEST_ENV_PLAYBOOK = '''- hosts: test-group
|
TEST_ENV_PLAYBOOK = '''- hosts: test-group
|
||||||
gather_facts: False
|
gather_facts: False
|
||||||
tasks:
|
tasks:
|
||||||
@@ -273,23 +290,24 @@ class RunJobTest(BaseCeleryTest):
|
|||||||
return self.job_template
|
return self.job_template
|
||||||
|
|
||||||
def create_test_job(self, **kwargs):
|
def create_test_job(self, **kwargs):
|
||||||
job_template = kwargs.pop('job_template', None)
|
with impersonate(self.super_django_user):
|
||||||
if job_template:
|
job_template = kwargs.pop('job_template', None)
|
||||||
self.job = job_template.create_job(**kwargs)
|
if job_template:
|
||||||
else:
|
self.job = job_template.create_job(**kwargs)
|
||||||
opts = {
|
else:
|
||||||
'inventory': self.inventory,
|
opts = {
|
||||||
'project': self.project,
|
'inventory': self.inventory,
|
||||||
'credential': self.credential,
|
'project': self.project,
|
||||||
'cloud_credential': self.cloud_credential,
|
'credential': self.credential,
|
||||||
'job_type': 'run',
|
'cloud_credential': self.cloud_credential,
|
||||||
}
|
'job_type': 'run',
|
||||||
try:
|
}
|
||||||
opts['playbook'] = self.project.playbooks[0]
|
try:
|
||||||
except (AttributeError, IndexError):
|
opts['playbook'] = self.project.playbooks[0]
|
||||||
pass
|
except (AttributeError, IndexError):
|
||||||
opts.update(kwargs)
|
pass
|
||||||
self.job = Job.objects.create(**opts)
|
opts.update(kwargs)
|
||||||
|
self.job = Job.objects.create(**opts)
|
||||||
return self.job
|
return self.job
|
||||||
|
|
||||||
def check_job_result(self, job, expected='successful', expect_stdout=True,
|
def check_job_result(self, job, expected='successful', expect_stdout=True,
|
||||||
@@ -707,7 +725,7 @@ class RunJobTest(BaseCeleryTest):
|
|||||||
self.assertFalse(job.signal_start())
|
self.assertFalse(job.signal_start())
|
||||||
|
|
||||||
def test_extra_job_options(self):
|
def test_extra_job_options(self):
|
||||||
self.create_test_project(TEST_PLAYBOOK)
|
self.create_test_project(TEST_EXTRA_VARS_PLAYBOOK)
|
||||||
# Test with extra_vars containing misc whitespace.
|
# Test with extra_vars containing misc whitespace.
|
||||||
job_template = self.create_test_job_template(forks=3, verbosity=2,
|
job_template = self.create_test_job_template(forks=3, verbosity=2,
|
||||||
extra_vars=u'{\n\t"abc": 1234\n}')
|
extra_vars=u'{\n\t"abc": 1234\n}')
|
||||||
@@ -736,7 +754,7 @@ class RunJobTest(BaseCeleryTest):
|
|||||||
self.check_job_result(job3, 'successful')
|
self.check_job_result(job3, 'successful')
|
||||||
|
|
||||||
def test_lots_of_extra_vars(self):
|
def test_lots_of_extra_vars(self):
|
||||||
self.create_test_project(TEST_PLAYBOOK)
|
self.create_test_project(TEST_EXTRA_VARS_PLAYBOOK)
|
||||||
extra_vars = dict(('var_%d' % x, x) for x in xrange(200))
|
extra_vars = dict(('var_%d' % x, x) for x in xrange(200))
|
||||||
job_template = self.create_test_job_template(extra_vars=extra_vars)
|
job_template = self.create_test_job_template(extra_vars=extra_vars)
|
||||||
job = self.create_test_job(job_template=job_template)
|
job = self.create_test_job(job_template=job_template)
|
||||||
|
|||||||
Reference in New Issue
Block a user