From a17bb5677b1b2da50dc551cd36841391101d8e38 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Tue, 3 May 2016 12:02:27 -0400 Subject: [PATCH 1/2] Implement extra vars on ad-hoc commands --- awx/api/serializers.py | 2 +- awx/main/models/ad_hoc_commands.py | 6 ++++++ awx/main/tasks.py | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index a889896c39..c0b5e028bc 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1917,7 +1917,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/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]) From db541b4e5e36d4dc5a2d43f923d2d428b30721f3 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Tue, 3 May 2016 14:04:59 -0400 Subject: [PATCH 2/2] Add ad-hoc extra vars migration --- .../migrations/0021_v300_adhoc_extravars.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 awx/main/migrations/0021_v300_adhoc_extravars.py 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')]), + ), + ]