mirror of
https://github.com/ansible/awx.git
synced 2024-10-28 19:25:40 +03:00
HAify job schedules and more task_manager renaming
This commit is contained in:
parent
87dd91e849
commit
13c89ab78c
24
awx/main/migrations/0046_v310_tower_state.py
Normal file
24
awx/main/migrations/0046_v310_tower_state.py
Normal file
@ -0,0 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('main', '0045_v310_job_event_stdout'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TowerState',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('schedule_last_run', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
@ -5,13 +5,15 @@ from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from solo.models import SingletonModel
|
||||
|
||||
from awx.main.managers import InstanceManager
|
||||
from awx.main.models.inventory import InventoryUpdate
|
||||
from awx.main.models.jobs import Job
|
||||
from awx.main.models.projects import ProjectUpdate
|
||||
from awx.main.models.unified_jobs import UnifiedJob
|
||||
|
||||
__all__ = ('Instance', 'JobOrigin')
|
||||
__all__ = ('Instance', 'JobOrigin', 'TowerState',)
|
||||
|
||||
|
||||
class Instance(models.Model):
|
||||
@ -33,6 +35,8 @@ class Instance(models.Model):
|
||||
# NOTE: TODO: Likely to repurpose this once standalone ramparts are a thing
|
||||
return "tower"
|
||||
|
||||
class TowerState(SingletonModel):
|
||||
schedule_last_run = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class JobOrigin(models.Model):
|
||||
"""A model representing the relationship between a unified job and
|
||||
|
@ -28,7 +28,7 @@ def run_job_complete(job_id):
|
||||
TaskManager().schedule()
|
||||
|
||||
@task
|
||||
def run_scheduler():
|
||||
def run_task_manager():
|
||||
TaskManager().schedule()
|
||||
|
||||
@task
|
||||
|
@ -21,7 +21,6 @@ import traceback
|
||||
import urlparse
|
||||
import uuid
|
||||
from distutils.version import LooseVersion as Version
|
||||
import dateutil.parser
|
||||
import yaml
|
||||
try:
|
||||
import psutil
|
||||
@ -137,30 +136,12 @@ def cluster_node_heartbeat(self):
|
||||
|
||||
@task(bind=True, queue='default')
|
||||
def tower_periodic_scheduler(self):
|
||||
def get_last_run():
|
||||
if not os.path.exists(settings.SCHEDULE_METADATA_LOCATION):
|
||||
return None
|
||||
fd = open(settings.SCHEDULE_METADATA_LOCATION)
|
||||
try:
|
||||
last_run = dateutil.parser.parse(fd.read())
|
||||
return last_run
|
||||
except Exception as exc:
|
||||
logger.error("get_last_run failed: {}".format(exc))
|
||||
return None
|
||||
|
||||
def write_last_run(last_run):
|
||||
fd = open(settings.SCHEDULE_METADATA_LOCATION, 'w')
|
||||
fd.write(last_run.isoformat())
|
||||
fd.close()
|
||||
|
||||
run_now = now()
|
||||
last_run = get_last_run()
|
||||
if not last_run:
|
||||
logger.debug("First run time")
|
||||
write_last_run(run_now)
|
||||
return
|
||||
state = TowerState.get_solo()
|
||||
last_run = state.schedule_last_run
|
||||
logger.debug("Last run was: %s", last_run)
|
||||
write_last_run(run_now)
|
||||
state.schedule_last_run = run_now
|
||||
state.save()
|
||||
|
||||
old_schedules = Schedule.objects.enabled().before(last_run)
|
||||
for schedule in old_schedules:
|
||||
@ -180,6 +161,7 @@ def tower_periodic_scheduler(self):
|
||||
new_unified_job.save(update_fields=['status', 'job_explanation'])
|
||||
new_unified_job.websocket_emit_status("failed")
|
||||
emit_channel_notification('schedules-changed', dict(id=schedule.id, group_name="schedules"))
|
||||
state.save()
|
||||
|
||||
def _send_notification_templates(instance, status_str):
|
||||
if status_str not in ['succeeded', 'failed']:
|
||||
|
@ -201,6 +201,7 @@ INSTALLED_APPS = (
|
||||
'awx.ui',
|
||||
'awx.fact',
|
||||
'awx.sso',
|
||||
'solo',
|
||||
)
|
||||
|
||||
INTERNAL_IPS = ('127.0.0.1',)
|
||||
@ -392,9 +393,9 @@ CELERYBEAT_SCHEDULE = {
|
||||
'task': 'awx.main.tasks.cluster_node_heartbeat',
|
||||
'schedule': timedelta(seconds=60)
|
||||
},
|
||||
'task_scheduler': {
|
||||
'task': 'awx.main.scheduler.tasks.run_scheduler',
|
||||
'schedule': timedelta(seconds=10)
|
||||
'task_manager': {
|
||||
'task': 'awx.main.scheduler.tasks.run_task_manager',
|
||||
'schedule': timedelta(seconds=20)
|
||||
},
|
||||
'task_fail_inconsistent_running_jobs': {
|
||||
'task': 'awx.main.scheduler.tasks.run_fail_inconsistent_running_jobs',
|
||||
|
@ -24,6 +24,7 @@ django-polymorphic==0.7.2
|
||||
django-radius==1.0.0
|
||||
djangorestframework==3.3.2
|
||||
djangorestframework-yaml==1.0.2
|
||||
django-solo==1.1.2
|
||||
django-split-settings==0.1.1
|
||||
django-transaction-hooks==0.2
|
||||
django-taggit==0.17.6
|
||||
|
Loading…
Reference in New Issue
Block a user