Feature 8720: Add scale support 25/8725/20
authorDavid Garcia <david.garcia@canonical.com>
Wed, 25 Mar 2020 17:19:02 +0000 (18:19 +0100)
committerDavid Garcia <david.garcia@canonical.com>
Fri, 26 Jun 2020 14:36:47 +0000 (16:36 +0200)
Change-Id: Ie94521fb6a1ce0a765f9558de749f4f438cf8b93
Signed-off-by: David Garcia <david.garcia@canonical.com>
n2vc/libjuju.py
n2vc/n2vc_juju_conn.py

index 0bd917d..b0e1358 100644 (file)
@@ -251,6 +251,7 @@ class Libjuju:
         progress_timeout: float = None,
         total_timeout: float = None,
         series: str = "xenial",
+        wait: bool = True,
     ) -> (Machine, bool):
         """
         Create machine
@@ -260,6 +261,8 @@ class Libjuju:
         :param: db_dict:            Dictionary with data of the DB to write the updates
         :param: progress_timeout:   Maximum time between two updates in the model
         :param: total_timeout:      Timeout for the entity to be active
+        :param: series:             Series of the machine (xenial, bionic, focal, ...)
+        :param: wait:               Wait until machine is ready
 
         :return: (juju.machine.Machine, bool):  Machine object and a boolean saying
                                                 if the machine is new or it already existed
@@ -311,14 +314,15 @@ class Libjuju:
                         machine.entity_id, model_name
                     )
                 )
-                await JujuModelWatcher.wait_for(
-                    model=model,
-                    entity=machine,
-                    progress_timeout=progress_timeout,
-                    total_timeout=total_timeout,
-                    db_dict=db_dict,
-                    n2vc=self.n2vc,
-                )
+                if wait:
+                    await JujuModelWatcher.wait_for(
+                        model=model,
+                        entity=machine,
+                        progress_timeout=progress_timeout,
+                        total_timeout=total_timeout,
+                        db_dict=db_dict,
+                        n2vc=self.n2vc,
+                    )
         finally:
             await self.disconnect_model(model)
             await self.disconnect_controller(controller)
@@ -453,6 +457,7 @@ class Libjuju:
         total_timeout: float = None,
         config: dict = None,
         series: str = None,
+        num_units: int = 1,
     ):
         """Deploy charm
 
@@ -465,6 +470,7 @@ class Libjuju:
         :param: total_timeout:      Timeout for the entity to be active
         :param: config:             Config for the charm
         :param: series:             Series of the charm
+        :param: num_units:          Number of units
 
         :return: (juju.application.Application): Juju application
         """
@@ -508,6 +514,11 @@ class Libjuju:
                         application_name, model_name
                     )
                 )
+                if num_units > 1:
+                    for _ in range(num_units - 1):
+                        m, _ = await self.create_machine(model_name, wait=False)
+                        await application.add_unit(to=m.entity_id)
+
                 await JujuModelWatcher.wait_for(
                     model=model,
                     entity=application,
@@ -712,9 +723,7 @@ class Libjuju:
             await self.disconnect_model(model)
             await self.disconnect_controller(controller)
 
-    async def destroy_model(
-        self, model_name: str, total_timeout: float,
-    ):
+    async def destroy_model(self, model_name: str, total_timeout: float):
         """
         Destroy model
 
index 4545af2..75194aa 100644 (file)
@@ -410,6 +410,7 @@ class N2VCJujuConnector(N2VCConnector):
         progress_timeout: float = None,
         total_timeout: float = None,
         config: dict = None,
+        num_units: int = 1,
     ):
 
         self.log.info(
@@ -476,6 +477,7 @@ class N2VCJujuConnector(N2VCConnector):
                 progress_timeout=progress_timeout,
                 total_timeout=total_timeout,
                 config=config,
+                num_units=num_units,
             )
         except Exception as e:
             raise N2VCException(