X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fprovisioner.py;h=ab25993f2b00129c07a0418d9b23f8c0f786437f;hp=91d5c0443ca0a79a513755993f775d3c8096edff;hb=9074b05b797b591eeb9b86b54c5a699b30454906;hpb=f97b231c021d082f5f56ac88804af3d73be2caa9 diff --git a/n2vc/provisioner.py b/n2vc/provisioner.py index 91d5c04..ab25993 100644 --- a/n2vc/provisioner.py +++ b/n2vc/provisioner.py @@ -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: