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):
name = serializers.CharField(source='name', read_only=True)
class Meta:
model = AdHocCommand
fields = ('*', 'job_type', 'inventory', 'limit', 'credential',
'module_name', 'module_args', 'forks', 'verbosity',
'privilege_escalation')
exclude = ('unified_job_template', 'name', 'description')
exclude = ('unified_job_template', 'description')
def get_related(self, obj):
res = super(AdHocCommandSerializer, self).get_related(obj)

View File

@ -1232,6 +1232,15 @@ class AdHocCommandAccess(BaseAccess):
def can_delete(self, obj):
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):
'''
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.db import models
from django.db.models import Q
from django.utils.text import Truncator
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
@ -199,11 +200,20 @@ class AdHocCommand(UnifiedJob):
return dependencies
def copy(self):
raise NotImplementedError
presets = {}
for kw in self.job_template._get_unified_job_field_names():
presets[kw] = getattr(self, kw)
return self.job_template.create_unified_job(**presets)
data = {}
for field in ('job_type', 'inventory_id', 'limit', 'credential_id',
'module_name', 'module_args', 'forks', 'verbosity',
'privilege_escalation'):
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):