mirror of https://github.com/jumpserver/jumpserver
feat: 运行job 支持动态参数
parent
49a4ceba85
commit
24ed11e2a5
|
@ -4,7 +4,7 @@
|
|||
from rest_framework import viewsets
|
||||
from ..models import AdHoc
|
||||
from ..serializers import (
|
||||
AdHocSerializer, AdhocListSerializer,
|
||||
AdHocSerializer
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
|
@ -14,9 +14,4 @@ __all__ = [
|
|||
|
||||
class AdHocViewSet(viewsets.ModelViewSet):
|
||||
queryset = AdHoc.objects.all()
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action != 'list':
|
||||
return AdhocListSerializer
|
||||
return AdHocSerializer
|
||||
|
||||
serializer_class = AdHocSerializer
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# Generated by Django 3.2.14 on 2022-11-17 10:48
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ops', '0031_auto_20221116_2024'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='job',
|
||||
name='variables',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='job',
|
||||
name='parameters_define',
|
||||
field=models.JSONField(default=dict, verbose_name='Parameters define'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='jobexecution',
|
||||
name='parameters',
|
||||
field=models.JSONField(default=dict, verbose_name='Parameters'),
|
||||
),
|
||||
]
|
|
@ -45,7 +45,7 @@ class Job(BaseCreateUpdateModel):
|
|||
runas = models.CharField(max_length=128, default='root', verbose_name=_('Runas'))
|
||||
runas_policy = models.CharField(max_length=128, choices=RunasPolicies.choices, default=RunasPolicies.skip,
|
||||
verbose_name=_('Runas policy'))
|
||||
variables = models.JSONField(default=dict, verbose_name=_('Variables'))
|
||||
parameters_define = models.JSONField(default=dict, verbose_name=_('Parameters define'))
|
||||
comment = models.CharField(max_length=1024, default='', verbose_name=_('Comment'), null=True, blank=True)
|
||||
|
||||
@property
|
||||
|
@ -55,15 +55,13 @@ class Job(BaseCreateUpdateModel):
|
|||
def create_execution(self):
|
||||
return self.executions.create()
|
||||
|
||||
def get_variables(self):
|
||||
return json.loads(self.variables)
|
||||
|
||||
|
||||
class JobExecution(BaseCreateUpdateModel):
|
||||
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||
task_id = models.UUIDField(null=True)
|
||||
status = models.CharField(max_length=16, verbose_name=_('Status'), default='running')
|
||||
job = models.ForeignKey(Job, on_delete=models.CASCADE, related_name='executions', null=True)
|
||||
parameters = models.JSONField(default=dict, verbose_name=_('Parameters'))
|
||||
result = models.JSONField(blank=True, null=True, verbose_name=_('Result'))
|
||||
summary = models.JSONField(default=dict, verbose_name=_('Summary'))
|
||||
creator = models.ForeignKey('users.User', verbose_name=_("Creator"), on_delete=models.SET_NULL, null=True)
|
||||
|
@ -74,11 +72,12 @@ class JobExecution(BaseCreateUpdateModel):
|
|||
def get_runner(self):
|
||||
inv = self.job.inventory
|
||||
inv.write_to_file(self.inventory_path)
|
||||
extra_vars = json.loads(self.parameters)
|
||||
|
||||
if self.job.type == 'adhoc':
|
||||
runner = AdHocRunner(
|
||||
self.inventory_path, self.job.module, module_args=self.job.args,
|
||||
pattern="all", project_dir=self.private_dir, extra_vars=self.job.get_variables()
|
||||
pattern="all", project_dir=self.private_dir, extra_vars=extra_vars,
|
||||
)
|
||||
elif self.job.type == 'playbook':
|
||||
runner = PlaybookRunner(
|
||||
|
|
|
@ -14,15 +14,6 @@ class AdHocSerializer(serializers.ModelSerializer):
|
|||
row_count = serializers.IntegerField(read_only=True)
|
||||
size = serializers.IntegerField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = AdHoc
|
||||
fields = ["id", "name", "module", "owner", "row_count", "size", "date_created", "date_updated"]
|
||||
|
||||
|
||||
class AdhocListSerializer(AdHocSerializer):
|
||||
row_count = serializers.IntegerField(read_only=True)
|
||||
size = serializers.IntegerField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = AdHoc
|
||||
fields = ["id", "name", "module", "row_count", "size", "args", "owner", "date_created", "date_updated"]
|
||||
|
|
|
@ -14,7 +14,7 @@ class JobSerializer(serializers.ModelSerializer):
|
|||
model = Job
|
||||
fields = [
|
||||
"id", "name", "instant", "type", "module", "args", "playbook", "assets", "runas_policy", "runas", "owner",
|
||||
"variables",
|
||||
"parameters_define",
|
||||
"timeout",
|
||||
"chdir",
|
||||
"comment",
|
||||
|
@ -29,5 +29,5 @@ class JobExecutionSerializer(serializers.ModelSerializer):
|
|||
read_only_fields = ["id", "task_id", "timedelta", "time_cost", 'is_finished', 'date_start', 'date_created',
|
||||
'is_success', 'task_id', 'short_id']
|
||||
fields = read_only_fields + [
|
||||
"job"
|
||||
"job", "parameters"
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue