mirror of
https://github.com/ansible/awx.git
synced 2026-03-25 21:05:03 -02:30
Merge pull request #432 from ryanpetrello/fix-7513
add awx meta variables to adhoc command extra_vars
This commit is contained in:
@@ -2138,14 +2138,27 @@ class RunAdHocCommand(BaseTask):
|
|||||||
if ad_hoc_command.verbosity:
|
if ad_hoc_command.verbosity:
|
||||||
args.append('-%s' % ('v' * min(5, ad_hoc_command.verbosity)))
|
args.append('-%s' % ('v' * min(5, ad_hoc_command.verbosity)))
|
||||||
|
|
||||||
|
# Define special extra_vars for AWX, combine with ad_hoc_command.extra_vars
|
||||||
|
extra_vars = {
|
||||||
|
'tower_job_id': ad_hoc_command.pk,
|
||||||
|
'awx_job_id': ad_hoc_command.pk,
|
||||||
|
}
|
||||||
|
if ad_hoc_command.created_by:
|
||||||
|
extra_vars.update({
|
||||||
|
'tower_user_id': ad_hoc_command.created_by.pk,
|
||||||
|
'tower_user_name': ad_hoc_command.created_by.username,
|
||||||
|
'awx_user_id': ad_hoc_command.created_by.pk,
|
||||||
|
'awx_user_name': ad_hoc_command.created_by.username,
|
||||||
|
})
|
||||||
|
|
||||||
if ad_hoc_command.extra_vars_dict:
|
if ad_hoc_command.extra_vars_dict:
|
||||||
redacted_extra_vars, removed_vars = extract_ansible_vars(ad_hoc_command.extra_vars_dict)
|
redacted_extra_vars, removed_vars = extract_ansible_vars(ad_hoc_command.extra_vars_dict)
|
||||||
if removed_vars:
|
if removed_vars:
|
||||||
raise ValueError(_(
|
raise ValueError(_(
|
||||||
"{} are prohibited from use in ad hoc commands."
|
"{} are prohibited from use in ad hoc commands."
|
||||||
).format(", ".join(removed_vars)))
|
).format(", ".join(removed_vars)))
|
||||||
|
extra_vars.update(ad_hoc_command.extra_vars_dict)
|
||||||
args.extend(['-e', json.dumps(ad_hoc_command.extra_vars_dict)])
|
args.extend(['-e', json.dumps(extra_vars)])
|
||||||
|
|
||||||
args.extend(['-m', ad_hoc_command.module_name])
|
args.extend(['-m', ad_hoc_command.module_name])
|
||||||
args.extend(['-a', ad_hoc_command.module_args])
|
args.extend(['-a', ad_hoc_command.module_args])
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ from django.conf import settings
|
|||||||
|
|
||||||
|
|
||||||
from awx.main.models import (
|
from awx.main.models import (
|
||||||
|
AdHocCommand,
|
||||||
Credential,
|
Credential,
|
||||||
CredentialType,
|
CredentialType,
|
||||||
Inventory,
|
Inventory,
|
||||||
@@ -26,6 +27,7 @@ from awx.main.models import (
|
|||||||
Project,
|
Project,
|
||||||
ProjectUpdate,
|
ProjectUpdate,
|
||||||
UnifiedJob,
|
UnifiedJob,
|
||||||
|
User
|
||||||
)
|
)
|
||||||
|
|
||||||
from awx.main import tasks
|
from awx.main import tasks
|
||||||
@@ -292,6 +294,18 @@ class TestGenericRun(TestJobExecution):
|
|||||||
assert '--ro-bind %s %s' % (settings.ANSIBLE_VENV_PATH, settings.ANSIBLE_VENV_PATH) in ' '.join(args) # noqa
|
assert '--ro-bind %s %s' % (settings.ANSIBLE_VENV_PATH, settings.ANSIBLE_VENV_PATH) in ' '.join(args) # noqa
|
||||||
assert '--ro-bind %s %s' % (settings.AWX_VENV_PATH, settings.AWX_VENV_PATH) in ' '.join(args) # noqa
|
assert '--ro-bind %s %s' % (settings.AWX_VENV_PATH, settings.AWX_VENV_PATH) in ' '.join(args) # noqa
|
||||||
|
|
||||||
|
def test_created_by_extra_vars(self):
|
||||||
|
self.instance.created_by = User(pk=123, username='angry-spud')
|
||||||
|
self.task.run(self.pk)
|
||||||
|
|
||||||
|
assert self.run_pexpect.call_count == 1
|
||||||
|
call_args, _ = self.run_pexpect.call_args_list[0]
|
||||||
|
args, cwd, env, stdout = call_args
|
||||||
|
assert '"tower_user_id": 123,' in ' '.join(args)
|
||||||
|
assert '"tower_user_name": "angry-spud"' in ' '.join(args)
|
||||||
|
assert '"awx_user_id": 123,' in ' '.join(args)
|
||||||
|
assert '"awx_user_name": "angry-spud"' in ' '.join(args)
|
||||||
|
|
||||||
def test_awx_task_env(self):
|
def test_awx_task_env(self):
|
||||||
patch = mock.patch('awx.main.tasks.settings.AWX_TASK_ENV', {'FOO': 'BAR'})
|
patch = mock.patch('awx.main.tasks.settings.AWX_TASK_ENV', {'FOO': 'BAR'})
|
||||||
patch.start()
|
patch.start()
|
||||||
@@ -304,6 +318,35 @@ class TestGenericRun(TestJobExecution):
|
|||||||
assert env['FOO'] == 'BAR'
|
assert env['FOO'] == 'BAR'
|
||||||
|
|
||||||
|
|
||||||
|
class TestAdhocRun(TestJobExecution):
|
||||||
|
|
||||||
|
TASK_CLS = tasks.RunAdHocCommand
|
||||||
|
|
||||||
|
def get_instance(self):
|
||||||
|
return AdHocCommand(
|
||||||
|
pk=1,
|
||||||
|
created=datetime.utcnow(),
|
||||||
|
inventory=Inventory(pk=1),
|
||||||
|
status='new',
|
||||||
|
cancel_flag=False,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars={'awx_foo': 'awx-bar'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_created_by_extra_vars(self):
|
||||||
|
self.instance.created_by = User(pk=123, username='angry-spud')
|
||||||
|
self.task.run(self.pk)
|
||||||
|
|
||||||
|
assert self.run_pexpect.call_count == 1
|
||||||
|
call_args, _ = self.run_pexpect.call_args_list[0]
|
||||||
|
args, cwd, env, stdout = call_args
|
||||||
|
assert '"tower_user_id": 123,' in ' '.join(args)
|
||||||
|
assert '"tower_user_name": "angry-spud"' in ' '.join(args)
|
||||||
|
assert '"awx_user_id": 123,' in ' '.join(args)
|
||||||
|
assert '"awx_user_name": "angry-spud"' in ' '.join(args)
|
||||||
|
assert '"awx_foo": "awx-bar' in ' '.join(args)
|
||||||
|
|
||||||
|
|
||||||
class TestIsolatedExecution(TestJobExecution):
|
class TestIsolatedExecution(TestJobExecution):
|
||||||
|
|
||||||
REMOTE_HOST = 'some-isolated-host'
|
REMOTE_HOST = 'some-isolated-host'
|
||||||
|
|||||||
Reference in New Issue
Block a user