Implement dispatch query for provision_user

This commit is contained in:
richard-dds
2019-09-20 11:37:18 -04:00
parent 1ef4e437d7
commit 2fca542100
6 changed files with 82 additions and 18 deletions

View File

@@ -1,7 +1,7 @@
from sqlalchemy.orm.exc import NoResultFound
from atst.database import db
from atst.models import EnvironmentRole, ApplicationRole
from atst.models import EnvironmentRole, ApplicationRole, Environment
from atst.domain.exceptions import NotFoundError
from uuid import UUID
from typing import List
@@ -73,7 +73,10 @@ class EnvironmentRoles(object):
def get_environment_roles_pending_creation(cls) -> List[UUID]:
results = (
db.session.query(EnvironmentRole.id)
# TODO
.filter(EnvironmentRole.status == "PENDING").all()
.join(Environment)
.filter(Environment.deleted == False)
.filter(Environment.baseline_info != None)
.filter(EnvironmentRole.status == EnvironmentRole.Status.PENDING)
.all()
)
return [id_ for id_, in results]

View File

@@ -102,14 +102,14 @@ def do_create_environment_baseline(csp: CloudProviderInterface, environment_id=N
db.session.commit()
def do_create_user(csp: CloudProviderInterface, environment_role_id=None):
def do_provision_user(csp: CloudProviderInterface, environment_role_id=None):
environment_role = EnvironmentRoles.get_by_id(environment_role_id)
with claim_for_update(environment_role) as environment_role:
credentials = environment_role.environment.root_user_info["credentials"]
credentials = environment_role.environment.csp_credentials
csp_user_id = csp.create_or_update_user(
credentials, environment_role, "role_id"
credentials, environment_role, environment_role.role
)
environment_role.csp_user_id = csp_user_id
db.session.add(environment_role)
@@ -146,9 +146,9 @@ def create_environment_baseline(self, environment_id=None):
@celery.task(bind=True)
def create_user(self, environment_role_id=None):
def provision_user(self, environment_role_id=None):
do_work(
do_create_user, self, app.csp.cloud, environment_role_id=environment_role_id
do_provision_user, self, app.csp.cloud, environment_role_id=environment_role_id
)
@@ -181,4 +181,4 @@ def dispatch_provision_user(self):
for (
environment_role_id
) in EnvironmentRoles.get_environment_roles_pending_creation():
create_user.delay(environment_role_id=environment_role_id)
provision_user.delay(environment_role_id=environment_role_id)

View File

@@ -84,3 +84,11 @@ class Environment(
@property
def history(self):
return self.get_changes()
@property
def csp_credentials(self):
return (
self.root_user_info.get("credentials")
if self.root_user_info is not None
else None
)

View File

@@ -1,5 +1,5 @@
from enum import Enum
from sqlalchemy import Index, ForeignKey, Column, String, TIMESTAMP
from sqlalchemy import Index, ForeignKey, Column, String, TIMESTAMP, Enum as SQLAEnum
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
@@ -36,6 +36,13 @@ class EnvironmentRole(
csp_user_id = Column(String())
claimed_until = Column(TIMESTAMP(timezone=True))
class Status(Enum):
PENDING = "pending"
COMPLETED = "completed"
PENDING_DELETE = "pending_delete"
status = Column(SQLAEnum(Status, native_enum=False), default=Status.PENDING)
def __repr__(self):
return "<EnvironmentRole(role='{}', user='{}', environment='{}', id='{}')>".format(
self.role, self.application_role.user_name, self.environment.name, self.id