summaryrefslogtreecommitdiff
path: root/cloudinit/sources/helpers/vultr.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/sources/helpers/vultr.py')
-rw-r--r--cloudinit/sources/helpers/vultr.py127
1 files changed, 32 insertions, 95 deletions
diff --git a/cloudinit/sources/helpers/vultr.py b/cloudinit/sources/helpers/vultr.py
index 190a5640..88a21034 100644
--- a/cloudinit/sources/helpers/vultr.py
+++ b/cloudinit/sources/helpers/vultr.py
@@ -7,7 +7,7 @@ from functools import lru_cache
from cloudinit import dmi
from cloudinit import log as log
-from cloudinit import net, netinfo, subp, url_helper, util
+from cloudinit import net, subp, url_helper, util
from cloudinit.net.dhcp import EphemeralDHCPv4, NoDHCPLeaseError
# Get LOG
@@ -30,9 +30,6 @@ def get_metadata(url, timeout, retries, sec_between, agent):
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)
@@ -43,49 +40,6 @@ def get_metadata(url, timeout, retries, sec_between, agent):
raise exception
-# Set route for metadata
-def set_route(iface):
- # Get routes, confirm entry does not exist
- routes = netinfo.route_info()
-
- # If no tools exist and empty dict is returned
- if "ipv4" not in routes:
- return
-
- # We only care about IPv4
- routes = routes["ipv4"]
-
- # Searchable list
- dests = []
-
- # Parse each route into a more searchable format
- for route in routes:
- dests.append(route["destination"])
-
- gw_present = "100.64.0.0" in dests or "100.64.0.0/10" in dests
- dest_present = "169.254.169.254" in dests
-
- # If not IPv6 only (No link local)
- # or the route is already present
- if not gw_present or dest_present:
- return
-
- # Set metadata route
- if subp.which("ip"):
- subp.subp(
- [
- "ip",
- "route",
- "add",
- "169.254.169.254/32",
- "dev",
- iface,
- ]
- )
- elif subp.which("route"):
- subp.subp(["route", "add", "-net", "169.254.169.254/32", "100.64.0.1"])
-
-
# Read the system information from SMBIOS
def get_sysinfo():
return {
@@ -165,19 +119,18 @@ def generate_network_config(interfaces):
# Prepare interface 0, public
if len(interfaces) > 0:
- public = generate_public_network_interface(interfaces[0])
+ public = generate_interface(interfaces[0], primary=True)
network["config"].append(public)
# Prepare additional interfaces, private
for i in range(1, len(interfaces)):
- private = generate_private_network_interface(interfaces[i])
+ private = generate_interface(interfaces[i])
network["config"].append(private)
return network
-# Input Metadata and generate public network config part
-def generate_public_network_interface(interface):
+def generate_interface(interface, primary=False):
interface_name = get_interface_name(interface["mac"])
if not interface_name:
raise RuntimeError(
@@ -188,13 +141,33 @@ def generate_public_network_interface(interface):
"name": interface_name,
"type": "physical",
"mac_address": interface["mac"],
- "accept-ra": 1,
- "subnets": [
+ }
+
+ if primary:
+ netcfg["accept-ra"] = 1
+ netcfg["subnets"] = [
{"type": "dhcp", "control": "auto"},
{"type": "ipv6_slaac", "control": "auto"},
- ],
- }
+ ]
+
+ if not primary:
+ netcfg["subnets"] = [
+ {
+ "type": "static",
+ "control": "auto",
+ "address": interface["ipv4"]["address"],
+ "netmask": interface["ipv4"]["netmask"],
+ }
+ ]
+ generate_interface_routes(interface, netcfg)
+ generate_interface_additional_addresses(interface, netcfg)
+
+ # Add config to template
+ return netcfg
+
+
+def generate_interface_routes(interface, netcfg):
# Options that may or may not be used
if "mtu" in interface:
netcfg["mtu"] = interface["mtu"]
@@ -205,6 +178,8 @@ def generate_public_network_interface(interface):
if "routes" in interface:
netcfg["subnets"][0]["routes"] = interface["routes"]
+
+def generate_interface_additional_addresses(interface, netcfg):
# Check for additional IP's
additional_count = len(interface["ipv4"]["additional"])
if "ipv4" in interface and additional_count > 0:
@@ -228,8 +203,8 @@ def generate_public_network_interface(interface):
add = {
"type": "static6",
"control": "auto",
- "address": additional["address"],
- "netmask": additional["netmask"],
+ "address": "%s/%s"
+ % (additional["network"], additional["prefix"]),
}
if "routes" in additional:
@@ -237,44 +212,6 @@ def generate_public_network_interface(interface):
netcfg["subnets"].append(add)
- # Add config to template
- return netcfg
-
-
-# Input Metadata and generate private network config part
-def generate_private_network_interface(interface):
- interface_name = get_interface_name(interface["mac"])
- if not interface_name:
- raise RuntimeError(
- "Interface: %s could not be found on the system" % interface["mac"]
- )
-
- netcfg = {
- "name": interface_name,
- "type": "physical",
- "mac_address": interface["mac"],
- "subnets": [
- {
- "type": "static",
- "control": "auto",
- "address": interface["ipv4"]["address"],
- "netmask": interface["ipv4"]["netmask"],
- }
- ],
- }
-
- # Options that may or may not be used
- if "mtu" in interface:
- netcfg["mtu"] = interface["mtu"]
-
- if "accept-ra" in interface:
- netcfg["accept-ra"] = interface["accept-ra"]
-
- if "routes" in interface:
- netcfg["subnets"][0]["routes"] = interface["routes"]
-
- return netcfg
-
# Make required adjustments to the network configs provided
def add_interface_names(interfaces):