X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_common%2Ftemporal%2Factivities%2Fpaas.py;h=6a29247cef1c3004c3836ad97060e7ac5ce91ad0;hb=63c7ce8974a2d4ae295b5d61a81386bf6af734f2;hp=a0372824abe68aad576e12bb920b0508faa37967;hpb=989602b0ef620c0b310d9dd4adeb9f387ca35023;p=osm%2Fcommon.git diff --git a/osm_common/temporal/activities/paas.py b/osm_common/temporal/activities/paas.py index a037282..6a29247 100644 --- a/osm_common/temporal/activities/paas.py +++ b/osm_common/temporal/activities/paas.py @@ -229,3 +229,117 @@ class CheckCharmStatus(BaseActivity): async def __call__(self, activity_input: Input) -> None: raise NotImplementedError() + + +class RemoveCharm(BaseActivity): + """Removes the given charm from the given model. + + Collaborators: + Juju Controller: Connect to controller and check charm status. + + Raises (Retryable): + ApplicationError If any of password, cacert, cloud_credentials is invalid + or Juju controller is not reachable + + Activity Lifecycle: + This activity should complete relatively quickly (in a few seconds). + However, it would be reasonable to wait more than 72 seconds (network timeout) + incase there are network issues. + + This activity will not report a heartbeat due to its + short-running nature. + + It is recommended, although not necessary to implement a + back-off strategy for this activity, as it will naturally block + and wait on each connection attempt. + """ + + @dataclass + class Input: + """ + Input dataclass for checking on a specific charm's removal + status + + 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 to be removed. + + force_remove : bool + If application has to be forcefully removed. + + """ + + vim_uuid: str + model_name: str + application_name: str + force_remove: bool + + def __init__(self, juju_controller): + super().__init__() + self.juju_controller = juju_controller + + async def __call__(self, activity_input: Input) -> None: + raise NotImplementedError() + + +class CheckCharmIsRemoved(BaseActivity): + """Checks the removal of the charm. This activity will block until the application + is not present in the specified model. + + Collaborators: + Juju Controller: Connect to controller and check charm status. + + 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 specified charm is removed. + Heartbeats are performed to ensure this activity does not time out. + + A start-to-close of something reasonable (such as 5 minutes) should be implemented + at the workflow level and such a timeout shall trigger workflow failure logic. + """ + + @dataclass + class Input: + """ + Input dataclass for checking on a specific charm's removal + status + + 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 whose removal is going to be + awaited. + + poll_interval : int (optional) + Time, in seconds, to wait between status checks. + """ + + 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()