def __create_metadata_to_nodes(deployment_id, mac_table, deployment_parameters):
    tor_gateway = deployment_parameters['tor_gateway']
    tor_netmask = deployment_parameters['tor_netmask']
    tor_dns = deployment_parameters['tor_dns']
    servers_map = {}
    nodes, status_info = razor("/api/collections/nodes", "get")
    nodes = nodes["items"]
    for node in nodes:
        node_name = node["name"]
        one_node_info, status_code = razor("/api/collections/nodes/%s" % (node_name), "get")
        servers_map[mac_to_id(one_node_info["facts"]["macaddress"])] = node_name

    for to_deploy_node in mac_table:
        node_name = servers_map[to_deploy_node["server_id"]]
        id_mac = to_deploy_node["server_id"].upper()
        host_name, status = node_assigner("/deployment/%s/register" % deployment_id, "post", pay_load = {"mac_address":id_mac})
        nics = to_deploy_node["nics"]
        ip_dic = {}
        for nic in nics:
            ip, status = node_assigner("/deployment/%s/ippool/allocate" % deployment_id, "post", pay_load = {"mac_address":nic['mac_address']})   
            ip_dic[nic['mac_address']] = ip['ip']

        headers = {'content-type': 'application/json'}
        metadata = {'deployment_name': deployment_id,
                    'id_macaddress': id_mac,
                    'to_allocate_hostname': host_name["role"],
                    'to_allocate_ip': ip_dic,
                    'tor_netmask': tor_netmask,
                    'tor_gateway': tor_gateway,
                    'tor_dns': tor_dns}

        for key in metadata:
            request_data = {"node": node_name, "key": key, "value": metadata[key]}
            razor("/api/commands/update-node-metadata", "post", pay_load=json.dumps(request_data), headers=headers)
def del_openstack_deployment(deployment_id):
    delete_task(deployment_id)
    headers = {'content-type': 'application/json'}
    command = {}
    command["name"] = "openstack-" + deployment_id + "-policy"
    text, status_code = razor("/api/commands/delete-policy", "post", pay_load=json.dumps(command), headers=headers)
    command = {}
    command["name"] = "openstack-" + deployment_id + "-tag"
    text, status_code = razor("/api/commands/delete-tag", "post", pay_load=json.dumps(command), headers=headers)
    text, status_code = node_assigner("/deployment/%s" % deployment_id, "delete")
    text, status_code = process_controller("/openstack/deployments/%s" % deployment_id, "delete")

    nodes, status_info = razor("/api/collections/nodes", "get")
    nodes = nodes["items"]
    for node in nodes:
        node_name = node["name"]
        one_node_info, status_code = razor("/api/collections/nodes/%s" % (node_name), "get")

        if "metadata" in one_node_info and "deployment_name" in one_node_info["metadata"].keys() and one_node_info["metadata"]["deployment_name"] == deployment_id:
            command = {}
            command["node"] = one_node_info["name"]
            command["key"] = "deployment_name"
            text, status_code = razor("/api/commands/remove-node-metadata", "post", pay_load=json.dumps(command), headers=headers)
            command["key"] = "id_macaddress"
            text, status_code = razor("/api/commands/remove-node-metadata", "post", pay_load=json.dumps(command), headers=headers)
            command["key"] = "to_allocate_hostname"
            text, status_code = razor("/api/commands/remove-node-metadata", "post", pay_load=json.dumps(command), headers=headers)
            command["key"] = "to_allocate_ip"
            text, status_code = razor("/api/commands/remove-node-metadata", "post", pay_load=json.dumps(command), headers=headers)

    return "Deleted"
def __create_node_assigner_roles(task_id, deployment_id, mac_table):
    logger.info("Creating Roles in Role-Assigner: %s" % deployment_id)
    roles = set()
    for one_row in mac_table:
        roles.add(one_row["role"])

    all_successful = True
    for role in roles:
        logger.debug("Adding role to Role-Assigner: %s" % role)
        text, status_code = node_assigner("/deployment/%s/roles" % deployment_id, "post", pay_load = {"role_name":role})
        all_successful = all_successful and status_code == 201

    __log_status(task_id, status[2], all_successful)
def __apply_ips(task_id, deployment_id, mac_table): #Now disabled
    is_sucessful = True
    for node in mac_table:
        command = {}
        command["start_ip"] = node["allocated_ip"]
        command["end_ip"] = node["allocated_ip"]
        text, status_code = node_assigner("/deployment/%s/ippool" % deployment_id, "post", pay_load=command)

        if status_code < 200 or status_code > 299:
            is_sucessful = False
            break

        command = {}
        command["mac_address"] = node["mac_address"]
        command["ip_address"] = node["allocated_ip"]
        text, status_code = node_assigner("/deployment/%s/ippool/link" % deployment_id, "post", pay_load=command)

        if status_code < 200 or status_code > 299:
            is_sucessful = False
            break

    __log_status(task_id, status[2], is_sucessful)
def __append_nodes_to_node_assigner_deployment(task_id, deployment_id, mac_table):
    logger.info("Append in Role-Assigner: %s" % deployment_id)
    text, status_code = node_assigner("/deployment/%s/mac-table" % deployment_id, "put", pay_load=json.dumps({'mac_table': mac_table}))
    __log_status(task_id, status[3], status_code)

    return text
def __create_node_assigner_deployment(task_id, deployment_id):
    logger.info("Creating deployment in Role-Assigner: %s" % deployment_id)
    text, status_code = node_assigner("/deployment", "post", pay_load = {"deployment_name":deployment_id, "strategy":"mac_bind"})
    __log_status(task_id, status[1], status_code)

    return text
def __create_mac_table(task_id, deployment_id, mac_table):
    logger.info("Creating MAC Table: %s" % deployment_id)
    text, status_code = node_assigner("/deployment/%s/mac-table" % deployment_id, "post", pay_load=json.dumps({'mac_table': mac_table}))
    __log_status(task_id, status[3], status_code)