OSMENG-1098: Perform unit resolve without retry 42/13642/9
authorDario Faccin <dario.faccin@canonical.com>
Thu, 6 Jul 2023 07:50:56 +0000 (09:50 +0200)
committerbeierlm <mark.beierl@canonical.com>
Thu, 13 Jul 2023 17:24:34 +0000 (19:24 +0200)
Add class stub

Change-Id: I17bbc03106954cd78355a2508d43db5370e3d27c
Signed-off-by: Dario Faccin <dario.faccin@canonical.com>
osm_common/temporal/activities/paas.py

index fc08af2..945e4d2 100644 (file)
@@ -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()