from django.db import models from django.utils.translation import gettext_lazy as _ from orgs.mixins.models import JMSOrgBaseModel from .base import BaseAnsibleExecution, BaseAnsibleJob class PlaybookTemplate(JMSOrgBaseModel): name = models.CharField(max_length=128, verbose_name=_("Name")) path = models.FilePathField(verbose_name=_("Path")) comment = models.TextField(verbose_name=_("Comment"), blank=True) def __str__(self): return self.name class Meta: ordering = ['name'] verbose_name = _("Playbook template") unique_together = [('org_id', 'name')] class Playbook(BaseAnsibleJob): path = models.FilePathField(max_length=1024, verbose_name=_("Playbook")) owner = models.ForeignKey('users.User', verbose_name=_("Owner"), on_delete=models.SET_NULL, null=True) comment = models.TextField(blank=True, verbose_name=_("Comment")) template = models.ForeignKey('PlaybookTemplate', verbose_name=_("Template"), on_delete=models.SET_NULL, null=True) last_execution = models.ForeignKey('PlaybookExecution', verbose_name=_("Last execution"), on_delete=models.SET_NULL, null=True, blank=True) def get_register_task(self): name = "automation_strategy_period_{}".format(str(self.id)[:8]) task = execute_automation_strategy.name args = (str(self.id), Trigger.timing) kwargs = {} return name, task, args, kwargs class PlaybookExecution(BaseAnsibleExecution): task = models.ForeignKey('Playbook', verbose_name=_("Task"), on_delete=models.CASCADE) path = models.FilePathField(max_length=1024, verbose_name=_("Run dir"))