feat: 运行job 支持动态参数

pull/9115/head
Aaron3S 2022-11-17 20:10:13 +08:00
parent 49a4ceba85
commit 24ed11e2a5
5 changed files with 35 additions and 23 deletions

View File

@ -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

View File

@ -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'),
),
]

View File

@ -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(

View File

@ -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"]

View File

@ -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"
]