From 597ea32e426b7a879cd5969b7d2d03535efe8ae2 Mon Sep 17 00:00:00 2001 From: Philip Kalinsky Date: Thu, 23 Jan 2020 10:14:22 -0500 Subject: [PATCH] portfolio provision process. add logging, __repr___ method, fix broken tests --- atst/domain/csp/cloud.py | 14 ++++++-- atst/models/mixins/state_machines.py | 4 +++ atst/models/portfolio_state_machine.py | 29 ++++++++++------- tests/domain/test_portfolio_state_machine.py | 34 ++++++++++---------- 4 files changed, 50 insertions(+), 31 deletions(-) diff --git a/atst/domain/csp/cloud.py b/atst/domain/csp/cloud.py index 9643dc7b..5d9a8397 100644 --- a/atst/domain/csp/cloud.py +++ b/atst/domain/csp/cloud.py @@ -4,6 +4,8 @@ from uuid import uuid4 from pydantic import BaseModel, validator +from flask import current_app as app + from atst.models.user import User from atst.models.application import Application from atst.models.environment import Environment @@ -754,6 +756,7 @@ class AzureSDKProvider(object): self.graphrbac = graphrbac self.credentials = credentials self.identity = identity + self.exceptions = exceptions self.secrets = secrets self.requests = requests # may change to a JEDI cloud @@ -781,14 +784,21 @@ class AzureCloudProvider(CloudProviderInterface): secret_client = self.secrets.SecretClient( vault_url=self.vault_url, credential=credential, ) - return secret_client.set_secret(secret_key, secret_value) + try: + return secret_client.set_secret(secret_key, secret_value) + except self.exceptions.HttpResponseError as exc: + app.logger.error(f"Could not SET secret in Azure keyvault for key {secret_key}.", exc_info=1) + def get_secret(secret_key): credential = self._get_client_secret_credential_obj() secret_client = self.secrets.SecretClient( vault_url=self.vault_url, credential=credential, ) - return secret_client.get_secret(secret_key).value + try: + return secret_client.get_secret(secret_key).value + except self.exceptions.HttpResponseError as exc: + app.logger.error(f"Could not GET secret in Azure keyvault for key {secret_key}.", exc_info=1) def create_environment( self, auth_credentials: Dict, user: User, environment: Environment diff --git a/atst/models/mixins/state_machines.py b/atst/models/mixins/state_machines.py index 8d50eb15..29f7a877 100644 --- a/atst/models/mixins/state_machines.py +++ b/atst/models/mixins/state_machines.py @@ -1,5 +1,7 @@ from enum import Enum +from flask import current_app as app + class StageStates(Enum): CREATED = "created" @@ -107,10 +109,12 @@ class FSMMixin: fail_trigger = "fail" + stage if fail_trigger in self.machine.get_triggers(self.current_state.name): self.trigger(fail_trigger) + app.logger.info(f"calling fail trigger '{fail_trigger}' for '{self.__repr__()}'") def finish_stage(self, stage): finish_trigger = "finish_" + stage if finish_trigger in self.machine.get_triggers(self.current_state.name): + app.logger.info(f"calling finish trigger '{finish_trigger}' for '{self.__repr__()}'") self.trigger(finish_trigger) def prepare_init(self, event): diff --git a/atst/models/portfolio_state_machine.py b/atst/models/portfolio_state_machine.py index 89dc073b..04d09bd6 100644 --- a/atst/models/portfolio_state_machine.py +++ b/atst/models/portfolio_state_machine.py @@ -64,6 +64,10 @@ class PortfolioStateMachine( db.session.add(self) db.session.commit() + def __repr__(self): + return f"