diff options
Diffstat (limited to 'cloudinit/sources/helpers')
| -rw-r--r-- | cloudinit/sources/helpers/vultr.py | 40 | 
1 files changed, 25 insertions, 15 deletions
| diff --git a/cloudinit/sources/helpers/vultr.py b/cloudinit/sources/helpers/vultr.py index eb504eba..9848f8fd 100644 --- a/cloudinit/sources/helpers/vultr.py +++ b/cloudinit/sources/helpers/vultr.py @@ -16,23 +16,33 @@ LOG = log.getLogger(__name__)  @lru_cache()  def get_metadata(url, timeout, retries, sec_between, agent): -    # Bring up interface -    try: -        with EphemeralDHCPv4(connectivity_url_data={"url": url}): -            # Set metadata route -            set_route() - -            # Fetch the metadata -            v1 = read_metadata(url, timeout, retries, sec_between, agent) -    except (NoDHCPLeaseError) as exc: -        LOG.error("Bailing, DHCP Exception: %s", exc) -        raise - -    return json.loads(v1) +    # Bring up interface (and try untill one works) +    exception = RuntimeError("Failed to DHCP") + +    # Seek iface with DHCP +    for iface in net.get_interfaces(): +        # Skip dummy interfaces +        if "dummy" in iface[0]: +            continue +        try: +            with EphemeralDHCPv4( +                iface=iface[0], connectivity_url_data={"url": url} +            ): +                # Set metadata route +                set_route(iface[0]) + +                # Fetch the metadata +                v1 = read_metadata(url, timeout, retries, sec_between, agent) +        except (NoDHCPLeaseError) as exc: +            LOG.error("DHCP Exception: %s", exc) +            exception = exc + +        return json.loads(v1) +    raise exception  # Set route for metadata -def set_route(): +def set_route(iface):      # Get routes, confirm entry does not exist      routes = netinfo.route_info() @@ -67,7 +77,7 @@ def set_route():                  "add",                  "169.254.169.254/32",                  "dev", -                net.find_fallback_nic(), +                iface,              ]          )      elif subp.which("route"): | 
