Print this page
Handle routes_data better
Handle 'routes' being empty (missing bits)
Handle 'routes' being empty
IMAGE-1097 cloud-init doesn't use sdc:routes metadata

*** 292,301 **** --- 292,302 ---- self.metadata = util.mergemanydict([md, self.metadata]) self.userdata_raw = ud self.vendordata_raw = md['vendor-data'] self.network_data = md['network-data'] + self.routes_data = md['routes'] self._set_provisioned() return True def device_name_to_device(self, name):
*** 315,325 **** if self.network_data is not None: self._network_config = ( convert_smartos_network_data( network_data=self.network_data, dns_servers=self.metadata['dns_servers'], ! dns_domain=self.metadata['dns_domain'])) return self._network_config class JoyentMetadataFetchException(Exception): pass --- 316,327 ---- if self.network_data is not None: self._network_config = ( convert_smartos_network_data( network_data=self.network_data, dns_servers=self.metadata['dns_servers'], ! dns_domain=self.metadata['dns_domain'], ! routes=self.routes_data)) return self._network_config class JoyentMetadataFetchException(Exception): pass
*** 787,797 **** return None # Convert SMARTOS 'sdc:nics' data to network_config yaml def convert_smartos_network_data(network_data=None, ! dns_servers=None, dns_domain=None): """Return a dictionary of network_config by parsing provided SMARTOS sdc:nics configuration data sdc:nics data is a dictionary of properties of a nic and the ip configuration desired. Additional nic dictionaries are appended --- 789,800 ---- return None # Convert SMARTOS 'sdc:nics' data to network_config yaml def convert_smartos_network_data(network_data=None, ! dns_servers=None, dns_domain=None, ! routes=None): """Return a dictionary of network_config by parsing provided SMARTOS sdc:nics configuration data sdc:nics data is a dictionary of properties of a nic and the ip configuration desired. Additional nic dictionaries are appended
*** 827,836 **** --- 830,843 ---- 'pointopoint', 'routes', 'scope', 'type', ], + 'route': [ + 'destination', + 'gateway', + ], } if dns_servers: if not isinstance(dns_servers, (list, tuple)): dns_servers = [dns_servers]
*** 892,901 **** --- 899,923 ---- subnets.append(subnet) cfg.update({'subnets': subnets}) config.append(cfg) + if routes: + for route in routes: + cfg = dict((k, v) for k, v in route.items() + if k in valid_keys['route']) + # Linux uses the value of 'gateway' to determine automatically if + # the route is a forward/next-hop (non-local IP for gateway) or an + # interface/resolver (local IP for gateway). So we can ignore + # the 'interface' attribute of sdc:routes, because SDC guarantees + # that the gateway is a local IP for "interface=true". + cfg.update({ + 'type': 'route', + 'destination': route['destination'], + 'gateway': route['gateway']}) + config.append(cfg) + if dns_servers: config.append( {'type': 'nameserver', 'address': dns_servers, 'search': dns_domain})
*** 931,946 **** if key in SMARTOS_ATTRIB_JSON: keyname = SMARTOS_ATTRIB_JSON[key] data[key] = client.get_json(keyname) elif key == "network_config": ! for depkey in ('network-data', 'dns_servers', 'dns_domain'): load_key(client, depkey, data) data[key] = convert_smartos_network_data( network_data=data['network-data'], dns_servers=data['dns_servers'], ! dns_domain=data['dns_domain']) else: if key in SMARTOS_ATTRIB_MAP: keyname, strip = SMARTOS_ATTRIB_MAP[key] else: keyname, strip = (key, False) --- 953,969 ---- if key in SMARTOS_ATTRIB_JSON: keyname = SMARTOS_ATTRIB_JSON[key] data[key] = client.get_json(keyname) elif key == "network_config": ! for depkey in ('network-data', 'dns_servers', 'dns_domain', 'routes'): load_key(client, depkey, data) data[key] = convert_smartos_network_data( network_data=data['network-data'], dns_servers=data['dns_servers'], ! dns_domain=data['dns_domain'], ! routes=data['routes']) else: if key in SMARTOS_ATTRIB_MAP: keyname, strip = SMARTOS_ATTRIB_MAP[key] else: keyname, strip = (key, False)