mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.2 KiB
48 lines
1.2 KiB
# -*- coding: utf-8 -*-
|
|
#
|
|
import uuid
|
|
|
|
from celery import current_task
|
|
|
|
from common.const.choices import Trigger
|
|
from orgs.utils import current_org
|
|
|
|
|
|
def generate_automation_execution_data(task_name, tp, task_snapshot=None):
|
|
task_snapshot = task_snapshot or {}
|
|
from assets.models import BaseAutomation
|
|
try:
|
|
eid = current_task.request.id
|
|
except AttributeError:
|
|
eid = str(uuid.uuid4())
|
|
|
|
data = {
|
|
'type': tp,
|
|
'name': task_name,
|
|
'org_id': str(current_org.id)
|
|
}
|
|
|
|
automation_instance = BaseAutomation()
|
|
snapshot = automation_instance.to_attr_json()
|
|
snapshot.update(data)
|
|
snapshot.update(task_snapshot)
|
|
return {'id': eid, 'snapshot': snapshot}
|
|
|
|
|
|
def quickstart_automation(task_name, tp, task_snapshot=None):
|
|
from assets.models import AutomationExecution
|
|
data = generate_automation_execution_data(task_name, tp, task_snapshot)
|
|
|
|
while True:
|
|
try:
|
|
_id = data['id']
|
|
AutomationExecution.objects.get(id=_id)
|
|
data['id'] = str(uuid.uuid4())
|
|
except AutomationExecution.DoesNotExist:
|
|
break
|
|
|
|
execution = AutomationExecution.objects.create(
|
|
trigger=Trigger.manual, **data
|
|
)
|
|
execution.start()
|