Fix and test environment dispatch tasks

This commit is contained in:
richard-dds
2019-09-10 15:48:23 -04:00
parent 6b7db2ca46
commit 1a9c34d856
5 changed files with 132 additions and 21 deletions

View File

@@ -1,5 +1,7 @@
from sqlalchemy import text
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm import load_only
from typing import List
from atst.database import db
from atst.models import Environment, Application, Portfolio, TaskOrder, CLIN
@@ -107,35 +109,44 @@ class Environments(object):
@classmethod
def base_provision_query(cls, now):
return (
db.session.query(Environment.id)
db.session.query(Environment)
.join(Application)
.join(Portfolio)
.join(TaskOrder)
.join(CLIN)
.filter(CLIN.start_date <= now)
.filter(CLIN.end_date > now)
# select only these columns
.options(load_only("id", "creator_id"))
)
@classmethod
def get_environments_pending_creation(cls, now) -> [str]:
query = cls.base_provision_query(now).filter(Environment.cloud_id == None)
return [environment_id for (environment_id,) in query.all()]
def get_environments_pending_creation(cls, now) -> List[Environment]:
"""
Any environment with an active CLIN that doesn't yet have a `cloud_id`.
"""
return cls.base_provision_query(now).filter(Environment.cloud_id == None).all()
@classmethod
def get_environments_pending_atat_user_creation(cls, now) -> [str]:
query = (
def get_environments_pending_atat_user_creation(cls, now) -> List[Environment]:
"""
Any environment with an active CLIN that has a cloud_id but no `root_user_info`.
"""
return (
cls.base_provision_query(now)
.filter(Environment.cloud_id != None)
.filter(Environment.root_user_info == text("'null'"))
)
return [environment_id for (environment_id,) in query.all()]
).all()
@classmethod
def get_environments_pending_baseline_creation(cls, now) -> [str]:
query = (
def get_environments_pending_baseline_creation(cls, now) -> List[Environment]:
"""
Any environment with an active CLIN that has a `cloud_id` and `root_user_info`
but no `baseline_info`.
"""
return (
cls.base_provision_query(now)
.filter(Environment.cloud_id != None)
.filter(Environment.root_user_info != text("'null'"))
.filter(Environment.baseline_info == text("'null'"))
)
return [environment_id for (environment_id,) in query.all()]
).all()

View File

@@ -1,4 +1,5 @@
from flask import current_app as app
import pendulum
from atst.database import db
from atst.queue import celery
@@ -121,15 +122,23 @@ def create_environment_baseline(self, environment_id=None):
@celery.task(bind=True)
def dispatch_create_environment(self):
for environment_id in Environments.get_environments_pending_creation(
pendulum.now()
):
create_environment.delay(environment_id=environment_id, atat_user_id="TODO")
for environment in Environments.get_environments_pending_creation(pendulum.now()):
create_environment.delay(
environment_id=environment.id, atat_user_id=environment.creator_id
)
@celery.task(bind=True)
def dispatch_create_atat_admin_user(self):
for environment_id in Environments.get_environments_pending_atat_user_creation(
for environment in Environments.get_environments_pending_atat_user_creation(
pendulum.now()
):
create_atat_admin_user.delay(environment_id=environment_id, atat_user_id="TODO")
create_atat_admin_user.delay(environment_id=environment.id)
@celery.task(bind=True)
def dispatch_create_environment_baseline(self):
for environment in Environments.get_environments_pending_baseline_creation(
pendulum.now()
):
create_environment_baseline.delay(environment_id=environment.id)