From 9074b05b797b591eeb9b86b54c5a699b30454906 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Wed, 26 May 2021 13:16:51 +0200 Subject: [PATCH] Wait for cloud-init to finish before provisioning Before provisioning a native charm, a script is executed to wait until cloud-init finishes. This will avoid some racing conditions. Fixes bug 1184 Change-Id: Icc87f90f5941cf7b13bdd7dd01e5544122fb769e Signed-off-by: David Garcia --- n2vc/provisioner.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/n2vc/provisioner.py b/n2vc/provisioner.py index e2b51b9..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.""" @@ -299,6 +304,12 @@ 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 -- 2.17.1