X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_common%2Ftemporal%2Factivities%2Fpaas.py;h=945e4d22e62990286f5608cef2564dd97cbef4e4;hb=e56853bb52d463573442303231094c1d109027f5;hp=fc08af2fef4759d20612f0698389a8361d77eb69;hpb=f3396eef47700e573c7540f4294f258db0f62d53;p=osm%2Fcommon.git diff --git a/osm_common/temporal/activities/paas.py b/osm_common/temporal/activities/paas.py index fc08af2..945e4d2 100644 --- a/osm_common/temporal/activities/paas.py +++ b/osm_common/temporal/activities/paas.py @@ -447,3 +447,57 @@ class CheckModelIsRemoved(BaseActivity): async def __call__(self, activity_input: Input) -> None: raise NotImplementedError() + + +class ResolveCharmErrors(BaseActivity): + """Mark the errors as resolved in all units for the given charm in the given model. + + Collaborators: + Juju Controller: Connect to controller and mark charm errors as resolved. + + Raises (Retryable): + ApplicationError If any of password, cacert, cloud_credentials is invalid + or Juju controller is not reachable + + Activity Lifecycle: + This activity will continue indefinitely until the error of specific application + is resolved. Heartbeats are performed to ensure this activity does not time out. + + A start-to-close of something reasonable (such as 2 minutes) should be implemented + at the workflow level and such a timeout shall trigger workflow failure logic. + + """ + + @dataclass + class Input: + """ + Input dataclass for marking errors as resolved on all units of a specific charm + + Attributes: + ----------- + vim_uuid : str + The UUID of the VIM as stored in the OSM vim_accounts + collection in Mongo. + + model_name : str + Name of the model in Juju where the charm is deployed. + + application_name : str + Name of the application for which unit errors have to be resolved. + + poll_interval : int (optional) + Time, in seconds, to wait between application status checks to see if error resolved or not. + + """ + + vim_uuid: str + model_name: str + application_name: str + poll_interval: int = 1 + + def __init__(self, juju_controller): + super().__init__() + self.juju_controller = juju_controller + + async def __call__(self, activity_input: Input) -> None: + raise NotImplementedError()