summaryrefslogtreecommitdiff
path: root/cloudinit/net/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/net/__init__.py')
-rw-r--r--cloudinit/net/__init__.py172
1 files changed, 92 insertions, 80 deletions
diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py
index 36f07a02..b45153f4 100644
--- a/cloudinit/net/__init__.py
+++ b/cloudinit/net/__init__.py
@@ -283,86 +283,6 @@ def parse_net_config(path):
return ns
-def generate_fallback_config():
- """Determine which attached net dev is most likely to have a connection and
- generate network state to run dhcp on that interface"""
- # by default use eth0 as primary interface
- nconf = {'config': {'interfaces': {},
- 'dns': {'search': [], 'nameservers': []}, 'routes': []
- },
- 'version': 1
- }
-
- # get list of interfaces that could have connections
- invalid_interfaces = set(['lo'])
- potential_interfaces = set(os.listdir(SYS_CLASS_NET))
- potential_interfaces = potential_interfaces.difference(invalid_interfaces)
- # sort into interfaces with carrier, interfaces which could have carrier,
- # and ignore interfaces that are definitely disconnected
- connected = []
- possibly_connected = []
- for interface in potential_interfaces:
- try:
- sysfs_carrier = os.path.join(SYS_CLASS_NET, interface, 'carrier')
- carrier = int(util.load_file(sysfs_carrier).strip())
- if carrier:
- connected.append(interface)
- continue
- except OSError:
- pass
- # check if nic is dormant or down, as this may make a nick appear to
- # not have a carrier even though it could acquire one when brought
- # online by dhclient
- try:
- sysfs_dormant = os.path.join(SYS_CLASS_NET, interface, 'dormant')
- dormant = int(util.load_file(sysfs_dormant).strip())
- if dormant:
- possibly_connected.append(interface)
- continue
- except OSError:
- pass
- try:
- sysfs_operstate = os.path.join(SYS_CLASS_NET, interface,
- 'operstate')
- operstate = util.load_file(sysfs_operstate).strip()
- if operstate in ['dormant', 'down', 'lowerlayerdown', 'unknown']:
- possibly_connected.append(interface)
- continue
- except OSError:
- pass
-
- # don't bother with interfaces that might not be connected if there are
- # some that definitely are
- if connected:
- potential_interfaces = connected
- else:
- potential_interfaces = possibly_connected
- # if there are no interfaces, give up
- if not potential_interfaces:
- return
- # if eth0 exists use it above anything else, otherwise get the interface
- # that looks 'first'
- if DEFAULT_PRIMARY_INTERFACE in potential_interfaces:
- name = DEFAULT_PRIMARY_INTERFACE
- else:
- potential_interfaces.sort(
- key=lambda x: int(''.join(i for i in x if i in string.digits)))
- name = potential_interfaces[0]
-
- sysfs_mac = os.path.join(SYS_CLASS_NET, name, 'address')
- mac = util.load_file(sysfs_mac).strip()
- target_name = name
-
- # generate net config for interface
- nconf['config']['interfaces'][target_name] = {
- 'mac_address': mac, 'name': target_name, 'type': 'physical',
- 'mode': 'manual', 'inet': 'inet',
- 'subnets': [{'type': 'dhcp4'}, {'type': 'dhcp6'}]
- }
-
- return nconf
-
-
def render_persistent_net(network_state):
''' Given state, emit udev rules to map
mac to ifname
@@ -517,4 +437,96 @@ def render_network_state(target, network_state):
with open(netrules, 'w+') as f:
f.write(render_persistent_net(network_state))
+
+def is_disabled_cfg(cfg):
+ if not cfg or not isinstance(cfg, dict):
+ return False
+ return cfg.get('config') == "disabled"
+
+
+def generate_fallback_config():
+ """Determine which attached net dev is most likely to have a connection and
+ generate network state to run dhcp on that interface"""
+ # by default use eth0 as primary interface
+ nconf = {'config': {'interfaces': {},
+ 'dns': {'search': [], 'nameservers': []}, 'routes': []
+ },
+ 'version': 1
+ }
+
+ # get list of interfaces that could have connections
+ invalid_interfaces = set(['lo'])
+ potential_interfaces = set(os.listdir(SYS_CLASS_NET))
+ potential_interfaces = potential_interfaces.difference(invalid_interfaces)
+ # sort into interfaces with carrier, interfaces which could have carrier,
+ # and ignore interfaces that are definitely disconnected
+ connected = []
+ possibly_connected = []
+ for interface in potential_interfaces:
+ try:
+ sysfs_carrier = os.path.join(SYS_CLASS_NET, interface, 'carrier')
+ carrier = int(util.load_file(sysfs_carrier).strip())
+ if carrier:
+ connected.append(interface)
+ continue
+ except OSError:
+ pass
+ # check if nic is dormant or down, as this may make a nick appear to
+ # not have a carrier even though it could acquire one when brought
+ # online by dhclient
+ try:
+ sysfs_dormant = os.path.join(SYS_CLASS_NET, interface, 'dormant')
+ dormant = int(util.load_file(sysfs_dormant).strip())
+ if dormant:
+ possibly_connected.append(interface)
+ continue
+ except OSError:
+ pass
+ try:
+ sysfs_operstate = os.path.join(SYS_CLASS_NET, interface,
+ 'operstate')
+ operstate = util.load_file(sysfs_operstate).strip()
+ if operstate in ['dormant', 'down', 'lowerlayerdown', 'unknown']:
+ possibly_connected.append(interface)
+ continue
+ except OSError:
+ pass
+
+ # don't bother with interfaces that might not be connected if there are
+ # some that definitely are
+ if connected:
+ potential_interfaces = connected
+ else:
+ potential_interfaces = possibly_connected
+ # if there are no interfaces, give up
+ if not potential_interfaces:
+ return
+ # if eth0 exists use it above anything else, otherwise get the interface
+ # that looks 'first'
+ if DEFAULT_PRIMARY_INTERFACE in potential_interfaces:
+ name = DEFAULT_PRIMARY_INTERFACE
+ else:
+ potential_interfaces.sort(
+ key=lambda x: int(''.join(i for i in x if i in string.digits)))
+ name = potential_interfaces[0]
+
+ sysfs_mac = os.path.join(SYS_CLASS_NET, name, 'address')
+ mac = util.load_file(sysfs_mac).strip()
+ target_name = name
+
+ # generate net config for interface
+ nconf['config']['interfaces'][target_name] = {
+ 'mac_address': mac, 'name': target_name, 'type': 'physical',
+ 'mode': 'manual', 'inet': 'inet',
+ 'subnets': [{'type': 'dhcp4'}, {'type': 'dhcp6'}]
+ }
+
+ return nconf
+
+
+def read_kernel_cmdline_config():
+ # FIXME: add implementation here
+ return None
+
+
# vi: ts=4 expandtab syntax=python