firewall-cmd --reload
"""
+CLOUD_INIT_WAIT_SCRIPT = """#!/bin/bash
+set -e
+cloud-init status --wait
+"""
+
class AsyncSSHProvisioner:
"""Provision a manually created machine via SSH."""
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"],
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
- 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
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: