Add name field for ad hoc commands, get relaunch working.

This commit is contained in:
Chris Church
2015-03-31 16:42:26 -04:00
parent d48fbaa6b4
commit 02eda72bd9
3 changed files with 27 additions and 6 deletions

View File

@@ -1483,12 +1483,14 @@ class JobCancelSerializer(JobSerializer):
class AdHocCommandSerializer(UnifiedJobSerializer): class AdHocCommandSerializer(UnifiedJobSerializer):
name = serializers.CharField(source='name', read_only=True)
class Meta: class Meta:
model = AdHocCommand model = AdHocCommand
fields = ('*', 'job_type', 'inventory', 'limit', 'credential', fields = ('*', 'job_type', 'inventory', 'limit', 'credential',
'module_name', 'module_args', 'forks', 'verbosity', 'module_name', 'module_args', 'forks', 'verbosity',
'privilege_escalation') 'privilege_escalation')
exclude = ('unified_job_template', 'name', 'description') exclude = ('unified_job_template', 'description')
def get_related(self, obj): def get_related(self, obj):
res = super(AdHocCommandSerializer, self).get_related(obj) res = super(AdHocCommandSerializer, self).get_related(obj)

View File

@@ -1232,6 +1232,15 @@ class AdHocCommandAccess(BaseAccess):
def can_delete(self, obj): def can_delete(self, obj):
return False return False
def can_start(self, obj):
return self.can_add({
'credential': obj.credential_id,
'inventory': obj.inventory_id,
})
def can_cancel(self, obj):
return self.can_read(obj) and obj.can_cancel
class AdHocCommandEventAccess(BaseAccess): class AdHocCommandEventAccess(BaseAccess):
''' '''
I can see ad hoc command event records whenever I can read both ad hoc I can see ad hoc command event records whenever I can read both ad hoc

View File

@@ -10,6 +10,7 @@ import logging
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.utils.text import Truncator
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@@ -199,11 +200,20 @@ class AdHocCommand(UnifiedJob):
return dependencies return dependencies
def copy(self): def copy(self):
raise NotImplementedError data = {}
presets = {} for field in ('job_type', 'inventory_id', 'limit', 'credential_id',
for kw in self.job_template._get_unified_job_field_names(): 'module_name', 'module_args', 'forks', 'verbosity',
presets[kw] = getattr(self, kw) 'privilege_escalation'):
return self.job_template.create_unified_job(**presets) data[field] = getattr(self, field)
return AdHocCommand.objects.create(**data)
def save(self, *args, **kwargs):
update_fields = kwargs.get('update_fields', [])
if not self.name:
self.name = Truncator(u'%s: %s' % (self.module_name, self.module_args)).chars(512)
if 'name' not in update_fields:
update_fields.append('name')
super(AdHocCommand, self).save(*args, **kwargs)
class AdHocCommandEvent(CreatedModifiedModel): class AdHocCommandEvent(CreatedModifiedModel):