Exemplo n.º 1
0
def concretize_nodes(resources, nodes):
    # force order to be a *function*
    snodes = sorted(nodes, key=lambda n: n.address)
    pools = mk_pools(snodes, lambda n: n.address.split('-')[0])

    # We first try to fulfill min requirements
    # Just considering machines with min value specified
    machines = resources["machines"]
    min_machines = sorted(machines, key=lambda desc: desc.get("min", 0))
    for desc in min_machines:
        cluster = desc["cluster"]
        nb = desc.get("min", 0)
        c_nodes = pick_things(pools, cluster, nb)
        if len(c_nodes) < nb:
            raise NotEnoughNodesError("min requirement failed for %s " % desc)
        desc["_c_nodes"] = [c_node.address for c_node in c_nodes]

    # We then fill the remaining without
    # If no enough nodes are there we silently continue
    for desc in machines:
        cluster = desc["cluster"]
        nb = desc["nodes"] - len(desc["_c_nodes"])
        c_nodes = pick_things(pools, cluster, nb)
        #  put concrete hostnames here
        desc["_c_nodes"].extend([c_node.address for c_node in c_nodes])
Exemplo n.º 2
0
def concretize_networks(resources, vlans, subnets):
    # avoid any non-determinism
    s_vlans = sorted(vlans, key=lambda v: (v["site"], v["vlan_id"]))
    s_subnets = sorted(subnets, key=lambda s: (s["site"], s["ip_prefix"]))
    pools = mk_pools(s_vlans, lambda n:
                     (n["site"], to_vlan_type(n["vlan_id"])))
    pools_subnets = mk_pools(
        s_subnets, lambda n: (n["site"], to_subnet_type(n["ip_prefix"])))

    for desc in resources["networks"]:
        site = desc["site"]
        site_info = ex5.get_resource_attributes('/sites/%s' % site)
        n_type = desc["type"]
        if n_type == PROD:
            desc["_c_network"] = {"site": site, "vlan_id": None}
            desc["_c_network"].update(site_info["kavlans"]["default"])
        elif n_type in KAVLAN_TYPE:
            networks = pick_things(pools, (site, n_type), 1)
            if len(networks) < 1:
                raise MissingNetworkError(site, n_type)
            # concretize the network
            desc["_c_network"] = networks[0]
            vlan_id = desc["_c_network"]["vlan_id"]
            desc["_c_network"].update(site_info["kavlans"][str(vlan_id)])
        elif n_type in SUBNET_TYPE:
            networks = pick_things(pools_subnets, (site, n_type), 1)
            if len(networks) < 1:
                raise MissingNetworkError(site, n_type)
            desc["_c_network"] = networks[0]

    return resources
Exemplo n.º 3
0
def concretize_nodes(resources, nodes):
    # force order to be a *function*
    snodes = sorted(nodes, key=lambda n: n.address)
    pools = mk_pools(snodes, lambda n: n.address.split('-')[0])
    machines = resources["machines"]
    for desc in machines:
        cluster = desc["cluster"]
        nb = desc["nodes"]
        c_nodes = pick_things(pools, cluster, nb)
        #  put concrete hostnames here
        desc["_c_nodes"] = [c_node.address for c_node in c_nodes]
Exemplo n.º 4
0
    def build_roles(provider_conf, env, servers, keyfnc):
        result = {}
        pools = mk_pools(servers, keyfnc)
        machines = provider_conf.machines
        for desc in machines:
            flavor = desc.flavour
            nb = desc.number
            roles = desc.roles
            nodes = pick_things(pools, flavor, nb)
            for role in roles:
                result.setdefault(role, []).extend(nodes)

        return result
Exemplo n.º 5
0
    def build_roles(resources, env, servers, keyfnc):
        result = {}
        pools = mk_pools(servers, keyfnc)
        machines = resources["machines"]
        for desc in machines:
            flavor = desc["flavor"]
            nb = desc["number"]
            roles = get_roles_as_list(desc)
            nodes = pick_things(pools, flavor, nb)
            for role in roles:
                result.setdefault(role, []).extend(nodes)

        return result
Exemplo n.º 6
0
def concretize_networks(resources, networks):
    """Maps abstract to concrete networks.

    Warning:
        Side effect on resources
    """
    s_networks = sorted(networks, key=lambda n: (n.site, n.nature, n.network))
    pools = mk_pools(s_networks, lambda n: (n.site, n.nature))
    for desc in resources["networks"]:
        site = desc["site"]
        n_type = desc["type"]
        # On grid'5000 a slash_16 is 64 slash_22
        # So if we ask for a slash_16 we return 64 sash_22
        # yes, this smells
        if n_type == SLASH_16:
            _networks = pick_things(pools, (site, SLASH_22), 64)
        else:
            _networks = pick_things(pools, (site, n_type), 1)
        if len(_networks) < 1:
            raise MissingNetworkError(site, n_type)
        desc["_c_network"] = _networks

    return resources
Exemplo n.º 7
0
def concretize_networks(resources, vlans):
    s_vlans = sorted(vlans, key=lambda v: (v["site"], v["vlan_id"]))
    pools = mk_pools(s_vlans, lambda n:
                     (n["site"], to_vlan_type(n["vlan_id"])))
    for desc in resources["networks"]:
        site = desc["site"]
        site_info = ex5.get_resource_attributes('/sites/%s' % site)
        n_type = desc["type"]
        if n_type == PROD:
            desc["_c_network"] = {"site": site, "vlan_id": None}
            desc["_c_network"].update(site_info["kavlans"]["default"])
        else:
            networks = pick_things(pools, (site, n_type), 1)
            if len(networks) < 1:
                raise MissingNetworkError(site, n_type)
            # concretize the network
            desc["_c_network"] = networks[0]
            vlan_id = desc["_c_network"]["vlan_id"]
            desc["_c_network"].update(site_info["kavlans"][str(vlan_id)])