diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 0215ecb80c..9643f9cdf9 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1918,7 +1918,7 @@ class AdHocCommandSerializer(UnifiedJobSerializer): class Meta: model = AdHocCommand fields = ('*', 'job_type', 'inventory', 'limit', 'credential', - 'module_name', 'module_args', 'forks', 'verbosity', + 'module_name', 'module_args', 'forks', 'verbosity', 'extra_vars', 'become_enabled', '-unified_job_template', '-description') extra_kwargs = { 'name': { diff --git a/awx/main/migrations/0021_v300_adhoc_extravars.py b/awx/main/migrations/0021_v300_adhoc_extravars.py new file mode 100644 index 0000000000..c9fdf29963 --- /dev/null +++ b/awx/main/migrations/0021_v300_adhoc_extravars.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0020_v300_labels_changes'), + ] + + operations = [ + migrations.AddField( + model_name='adhoccommand', + name='extra_vars', + field=models.TextField(default=b'', blank=True), + ), + migrations.AlterField( + model_name='credential', + name='kind', + field=models.CharField(default=b'ssh', max_length=32, choices=[(b'ssh', 'Machine'), (b'net', 'Network'), (b'scm', 'Source Control'), (b'aws', 'Amazon Web Services'), (b'rax', 'Rackspace'), (b'vmware', 'VMware vCenter'), (b'foreman', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'openstack', 'OpenStack')]), + ), + migrations.AlterField( + model_name='inventorysource', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'vmware', 'VMware vCenter'), (b'foreman', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + migrations.AlterField( + model_name='inventoryupdate', + name='source', + field=models.CharField(default=b'', max_length=32, blank=True, choices=[(b'', 'Manual'), (b'file', 'Local File, Directory or Script'), (b'rax', 'Rackspace Cloud Servers'), (b'ec2', 'Amazon EC2'), (b'gce', 'Google Compute Engine'), (b'azure', 'Microsoft Azure Classic (deprecated)'), (b'azure_rm', 'Microsoft Azure Resource Manager'), (b'vmware', 'VMware vCenter'), (b'foreman', 'Red Hat Satellite 6'), (b'cloudforms', 'Red Hat CloudForms'), (b'openstack', 'OpenStack'), (b'custom', 'Custom Script')]), + ), + ] diff --git a/awx/main/models/ad_hoc_commands.py b/awx/main/models/ad_hoc_commands.py index 6efac2ec63..8694f56537 100644 --- a/awx/main/models/ad_hoc_commands.py +++ b/awx/main/models/ad_hoc_commands.py @@ -84,6 +84,12 @@ class AdHocCommand(UnifiedJob): editable=False, through='AdHocCommandEvent', ) + extra_vars = models.TextField( + blank=True, + default='', + ) + + extra_vars_dict = VarsDictProperty('extra_vars', True) def clean_inventory(self): inv = self.inventory diff --git a/awx/main/tasks.py b/awx/main/tasks.py index db47f3eaec..444e557d40 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1615,6 +1615,9 @@ class RunAdHocCommand(BaseTask): if ad_hoc_command.verbosity: args.append('-%s' % ('v' * min(5, ad_hoc_command.verbosity))) + if ad_hoc_command.extra_vars_dict: + args.extend(['-e', json.dumps(ad_hoc_command.extra_vars_dict)]) + args.extend(['-m', ad_hoc_command.module_name]) args.extend(['-a', ad_hoc_command.module_args])