Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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