def _build_enoslib_conf(config): conf = copy.deepcopy(config) enoslib_conf = conf.get("provider", {}) enoslib_conf.pop("type", None) if enoslib_conf.get("resources") is not None: return enoslib_conf # This coould be common to everyone # Enoslib needs to be patched here resources = conf.get("topology", conf.get("resources", {})) machines = [] for desc in gen_enoslib_roles(resources): # NOTE(msimonin): in the basic definition, we consider only # two networks grps = expand_groups(desc["group"]) for grp in grps: machines.append({ "flavour": desc["flavor"], "roles": [grp, desc["role"]], "number": desc["number"], }) networks = [{ "roles": ["network_interface"], "cidr": "192.168.42.0/24" }, { "roles": ["neutron_external_interface"], "cidr": "192.168.43.0/24" }] enoslib_conf.update( {"resources": { "machines": machines, "networks": networks }}) return enoslib_conf
def _build_enoslib_conf(conf): enoslib_conf = conf.get("provider", {}) enoslib_conf.pop("type", None) if enoslib_conf.get("resources") is not None: return enoslib_conf resources = conf.get("topology", conf.get("resources", {})) machines = [] for desc in gen_enoslib_roles(resources): grps = expand_groups(desc["group"]) for grp in grps: machines.append({ "flavour": desc["flavor"], "roles": [grp, desc["role"]], "number": desc["number"], }) # Returning the enoslib description # Contribution are welcome for supporting more networks. enoslib_conf.update({"resources": { "machines": machines, "networks": [NETWORK_INTERFACE]}}) return enoslib_conf
def _build_enoslib_conf(config): conf = copy.deepcopy(config) enoslib_conf = conf.get("provider", {}) enoslib_conf.pop("type", None) # NOTE(msimonin): Force some enoslib/g5k parameters here. # * dhcp: True means that network card will be brought up and the dhcp # client will be called. As for now (2018-08-16) this is disabled by # default in EnOSlib. enoslib_conf.update({"dhcp": True}) if enoslib_conf.get("resources") is not None: # enoslib mode LOGGER.debug("Getting resources specific to the provider") return enoslib_conf # EnOS legacy mode LOGGER.debug("Getting generic resources from configuration") machines = [] clusters = set() # get a plain configuration of resources resources = conf.get("resources", {}) # when a topology configuration is present # replace resources with that configuration resources = conf.get("topology", resources) for desc in gen_enoslib_roles(resources): groups = expand_groups(desc["group"]) for group in groups: clusters.add(desc["flavor"]) machine = { "roles": [group, desc["role"]], "nodes": desc["number"], "cluster": desc["flavor"], "primary_network": "int-net", "secondary_networks": [], # ensure at least one node "min": 1 } machines.append(machine) # check the location of the clusters sites = _get_sites(clusters) if len(sites) > 1: raise Exception("Multisite deployment isn't supported yet") site = sites.pop() PRIMARY_NETWORK["site"] = site SECONDARY_NETWORK["site"] = site networks = [PRIMARY_NETWORK] # check minimum available number of interfaces in each cluster network_count = _count_common_interfaces(clusters) if network_count > 1: networks.append(SECONDARY_NETWORK) # add a secondary network for machine in machines: machine["secondary_networks"] = ["ext-net"] enoslib_conf.update( {"resources": { "machines": machines, "networks": networks }}) return enoslib_conf