Remove unsecure and unused function
[osm/N2VC.git] / n2vc / provisioner.py
index 91d5c04..ab25993 100644 (file)
@@ -85,6 +85,11 @@ firewall-cmd --direct --permanent --add-rule ipv4 nat OUTPUT 0 -d {} -p tcp \
 firewall-cmd --reload
 """
 
+CLOUD_INIT_WAIT_SCRIPT = """#!/bin/bash
+set -e
+cloud-init status --wait
+"""
+
 
 class AsyncSSHProvisioner:
     """Provision a manually created machine via SSH."""
@@ -250,7 +255,8 @@ class AsyncSSHProvisioner:
             params.series = hw["series"]
             params.instance_id = "manual:{}".format(self.host)
             params.nonce = "manual:{}:{}".format(
-                self.host, str(uuid.uuid4()),
+                self.host,
+                str(uuid.uuid4()),
             )  # a nop for Juju w/manual machines
             params.hardware_characteristics = {
                 "arch": hw["arch"],
@@ -261,7 +267,9 @@ class AsyncSSHProvisioner:
 
         return params
 
-    async def install_agent(self, connection, nonce, machine_id, proxy=None, series=None):
+    async def install_agent(
+        self, connection, nonce, machine_id, proxy=None, series=None
+    ):
         """
         :param object connection: Connection to Juju API
         :param str nonce: The nonce machine specification
@@ -296,8 +304,16 @@ class AsyncSSHProvisioner:
             - 127.0.0.1:17070
             - '[::1]:17070'
         """
+        try:
+            # Wait until cloud-init finish
+            await self._run_configure_script(CLOUD_INIT_WAIT_SCRIPT)
+        except Exception:
+            self.log.debug("cloud-init not present in machine {}".format(machine_id))
+
         if proxy:
-            m = re.search(r"apiaddresses:\n- (\d+\.\d+\.\d+\.\d+):17070", results.script)
+            m = re.search(
+                r"apiaddresses:\n- (\d+\.\d+\.\d+\.\d+):17070", results.script
+            )
             apiaddress = m.group(1)
 
             """Add IP Table rule
@@ -326,8 +342,10 @@ class AsyncSSHProvisioner:
                     stdout, stderr = await self._run_configure_script(script)
                     break
                 except Exception as e:
-                    self.log.debug("Waiting for DNAT rules to be applied and saved, "
-                                   "sleeping {} seconds".format(delay))
+                    self.log.debug(
+                        "Waiting for DNAT rules to be applied and saved, "
+                        "sleeping {} seconds".format(delay)
+                    )
                     if attempts > retry:
                         raise e
                     else: