SHA256
1
0
forked from pool/cloud-init
cloud-init/dataSourceOpenNebula.patch

99 lines
3.6 KiB
Diff

--- cloudinit/sources/DataSourceOpenNebula.py.orig
+++ cloudinit/sources/DataSourceOpenNebula.py
@@ -121,7 +121,7 @@ class BrokenContextDiskDir(Exception):
class OpenNebulaNetwork(object):
REG_DEV_MAC = re.compile(
- r'^\d+: (eth\d+):.*?link\/ether (..:..:..:..:..:..) ?',
+ r'^\d+: (eth\d+):.*?link\/\W+ (..:..:..:..:..:..) ?',
re.MULTILINE | re.DOTALL)
def __init__(self, ip, context):
@@ -130,12 +130,24 @@ class OpenNebulaNetwork(object):
self.ifaces = self.get_ifaces()
def get_ifaces(self):
- return self.REG_DEV_MAC.findall(self.ip)
+ list = self.REG_DEV_MAC.findall(self.ip)
+ ifaces = dict()
+ for l in list:
+ ifaces[l[1]] = l[0]
+ return ifaces
def mac2ip(self, mac):
components = mac.split(':')[2:]
return [str(int(c, 16)) for c in components]
+ def get_context_interfaces(self):
+
+ def device_mac(t): return re.match(r"ETH\d+_MAC", t)
+
+ mac_vars = filter(device_mac, self.context.keys())
+ context_interfaces = [v.split('_')[0] for v in mac_vars]
+ return context_interfaces
+
def get_ip(self, dev, components):
var_name = dev.upper() + '_IP'
if var_name in self.context:
@@ -188,27 +200,39 @@ class OpenNebulaNetwork(object):
conf.append('iface lo inet loopback')
conf.append('')
- for i in self.ifaces:
- dev = i[0]
- mac = i[1]
+ context_interfaces = self.get_context_interfaces()
+
+ if len(context_interfaces):
+ try:
+ (out, _err) = util.subp(["systemctl", "stop", "NetworkManager"])
+ (out, _err) = util.subp(["systemctl", "disable", "NetworkManager"])
+ except util.ProcessExecutionError:
+ util.logexc(LOG, "Disable NetworkManager command failed")
+
+ for interface in context_interfaces:
+ mac = self.context[interface+"_MAC"]
+ dev = self.ifaces.get(mac)
+ if dev is None:
+ continue
+
ip_components = self.mac2ip(mac)
conf.append('auto ' + dev)
conf.append('iface ' + dev + ' inet static')
- conf.append(' address ' + self.get_ip(dev, ip_components))
- conf.append(' network ' + self.get_network(dev, ip_components))
- conf.append(' netmask ' + self.get_mask(dev))
+ conf.append(' address ' + self.get_ip(nterface, ip_components))
+ conf.append(' network ' + self.get_network(interface, ip_components))
+ conf.append(' netmask ' + self.get_mask(interface))
- gateway = self.get_gateway(dev)
+ gateway = self.get_gateway(interface)
if gateway:
conf.append(' gateway ' + gateway)
- domain = self.get_domain(dev)
+ domain = self.get_domain(interface)
if domain:
conf.append(' dns-search ' + domain)
# add global DNS servers to all interfaces
- dns = self.get_dns(dev)
+ dns = self.get_dns(interface)
if global_dns or dns:
all_dns = global_dns
if dns:
@@ -375,9 +399,8 @@ def read_context_disk_dir(source_dir, as
if ssh_key_var:
lines = context.get(ssh_key_var).splitlines()
- results['metadata']['public-keys'] = [l for l in lines
- if len(l) and not
- l.startswith("#")]
+ ssh_keys = [l for l in lines if len(l) and not l.startswith("#")]
+ results['metadata']['public-keys'] = ssh_keys
# custom hostname -- try hostname or leave cloud-init
# itself create hostname from IP address later