mirror of https://github.com/jumpserver/jumpserver
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
![]() |
# ~*~ coding: utf-8 ~*~
|
||
|
from __future__ import unicode_literals, absolute_import
|
||
|
|
||
|
import logging
|
||
|
|
||
|
from uuid import uuid4
|
||
|
from assets.models import Asset
|
||
|
from ops.models import TaskRecord
|
||
|
from ops.utils.ansible_api import ADHocRunner, Config
|
||
|
|
||
|
from django.db import models
|
||
|
from django.utils.translation import ugettext_lazy as _
|
||
|
|
||
|
__all__ = ["Task", "SubTask"]
|
||
|
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
class Task(models.Model):
|
||
|
record = models.OneToOneField(TaskRecord)
|
||
|
name = models.CharField(max_length=128, blank=True, verbose_name=_('Name'))
|
||
|
is_gather_facts = models.BooleanField(default=False,verbose_name=_('Is Gather Ansible Facts'))
|
||
|
assets = models.ManyToManyField(Asset, related_name='tasks')
|
||
|
|
||
|
def __unicode__(self):
|
||
|
return "%s" % self.name
|
||
|
|
||
|
@property
|
||
|
def ansible_assets(self):
|
||
|
return []
|
||
|
|
||
|
def run(self):
|
||
|
conf = Config()
|
||
|
gather_facts = "yes" if self.is_gather_facts else "no"
|
||
|
play_source = {
|
||
|
"name": "Ansible Play",
|
||
|
"hosts": "default",
|
||
|
"gather_facts": gather_facts,
|
||
|
"tasks": [
|
||
|
dict(action=dict(module='ping')),
|
||
|
]
|
||
|
}
|
||
|
hoc = ADHocRunner(conf, play_source, *self.ansible_assets)
|
||
|
uuid = "tasker-" + uuid4().hex
|
||
|
ext_code, result = hoc.run("test_task", uuid)
|
||
|
print(ext_code)
|
||
|
print(result)
|
||
|
|
||
|
|
||
|
class SubTask(models.Model):
|
||
|
task = models.ForeignKey(Task, related_name='sub_tasks', verbose_name=_('Ansible Task'))
|
||
|
module_name = models.CharField(max_length=128, verbose_name=_('Ansible Module Name'))
|
||
|
module_args = models.CharField(max_length=512, blank=True, verbose_name=_("Ansible Module Args"))
|
||
|
register = models.CharField(max_length=128, blank=True, verbose_name=_('Ansible Task Register'))
|
||
|
|
||
|
def __unicode__(self):
|
||
|
return "%s %s" % (self.module_name, self.module_args)
|