def cloudfoundry_deployment_status(deployment_id):
    install_status = {}

    all_status = process_controller("/contrib/CFV2InstallProcess/cloudfoundry/start_install/all_status", "get")
    current_status = process_controller("/contrib/CFV2InstallProcess/cloudfoundry/start_install/%s/status" % deployment_id, "get")

    working_index = all_status.index(current_status)
    steps = []

    i = 1
    for status in all_status:
        one_step = {}
        one_step["id"] = i
        one_step["name"] = status

        if i < working_index:
            one_step["status"] = "Done"
        elif i == working_index:
            one_step["status"] = "Working"
        else:
            one_step["status"] = "Waiting"

        steps.append(one_step)

        i += 1 


    install_status["status"] = (working_index + 1 >= all_status.length())
    install_status["steps"] = steps

    return json.dumps(install_status)
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 __scaleup_openstack(task_id, deployment_id):
    total_time = 0
    process_controller("/openstack/deployments/%s/installation" % (deployment_id), "put")
    install_status, status_code = process_controller("/openstack/deployments/%s/status" % (deployment_id), "get")

    while not install_status['status'] == "FINISH" or install_status['status'] == "FAILED":
        time.sleep(each_check_span)
        total_time += each_check_span
        if total_time >= time_out_to_install_openstack:
            break

        install_status, status_code = process_controller("/openstack/deployments/%s/status" % (deployment_id), "get")
    
    if install_status['status'] == "FAILED":
        __log_status(task_id, status[8], False)
    else:
        __log_status(task_id, status[8], True)
def __do_setup(task_id, deployment_id, params):
    create_task(task_id)
    logger.info("Start to setup VNX backend for OpenStack %s" % deployment_id)
    result, status_code = process_controller(
        "/openstack/deployments/%s/storage/vnx" % deployment_id, "post", pay_load=json.dumps({"parameters": params})
    )
    if status_code > 200:
        update_task_status(task_id, "result", "failed")
    else:
        update_task_status(task_id, "result", "OK")
def __do_deploy(os_deployment_id, cf_domain, project, deployment_id, nfs_server_network, is_neutron, public_net_id,ftp_host):
    os_deployment = get_openstack_deployment(os_deployment_id)
    uaa_urls = "\"uaa.%s\", \"\login.%s\"" % (cf_domain, cf_domain)
    ccdb_type = "pgsql"
    ntp_server = os_deployment["ntp_server"][0]
    monitor_ip = os_deployment["monitor_server_ip"]
    orchestrator_ip = CONF.get("ProcessController","endpoint").split(":")[0]
    dns_nameservers = os_deployment["tor_dns"]
    heat_auth_url = "http://%s:5000/v2.0" % os_deployment["controller_ip"]
    openstack_username = "******"
    openstack_password = os_deployment["admin_password"]
    is_neutron_str = str(is_neutron)
    mco_client_ip = CONF.get("MCO","MCO_Client_IP")
    mco_client_username = CONF.get("MCO","MCO_Client_Username")
    mco_client_password = CONF.get("MCO","MCO_Client_Password")
    
    headers = {'content-type': 'application/json'}
    parameter_data = {}
    parameter_data["cf_domain"] = cf_domain
    parameter_data["deployment_id"] = deployment_id
    parameter_data["uaa_urls"] = uaa_urls
    parameter_data["ccdb_type"] = ccdb_type
    parameter_data["ntp_server"] = ntp_server
    parameter_data["monitor_ip"] = monitor_ip
    parameter_data["orchestrator_ip"] = orchestrator_ip
    parameter_data["nfs_server_network"] = nfs_server_network
    parameter_data["dns_nameservers"] = dns_nameservers
    parameter_data["heat_auth_url"] = heat_auth_url
    parameter_data["openstack_username"] = openstack_username
    parameter_data["openstack_password"] = openstack_password
    parameter_data["neutron"] = is_neutron_str
    parameter_data["mco_client_ip"] = mco_client_ip
    parameter_data["mco_client_username"] = mco_client_username
    parameter_data["mco_client_password"] = mco_client_password
    parameter_data["public_net_id"] = public_net_id
    parameter_data["ftp_host"] = ftp_host

    data = {}
    data["parameters"] = parameter_data
    data["timeout_mins"] = time_out_to_install_cloudfoundry

    process_controller("/contrib/CFV2InstallProcess/create_cf_cluster/%s/%s" % (project, deployment_id), "post", pay_load=json.dumps(data), headers=headers)
def __create_openstack_process(deployment_id, mac_table, deployment_parameters):
    ntp_server_list = [deployment_parameters['ntp_server']]
    controller_ip = deployment_parameters['controller_ip']
    monitor_contacts = [deployment_parameters['admin_email']]

    parameters_map = deployment_parameters
    parameters_map["deployment_id"] = deployment_id
    parameters_map["domain_name"] = "lss.emc.com"
    parameters_map["monitor_contacts"] = monitor_contacts
    parameters_map["ntp_server"] = ntp_server_list
    parameters_map["mysql_root_password"] = "******"
    parameters_map["rabbitmq_user"] = "******"
    parameters_map["rabbitmq_password"] = "******"
    parameters_map["external_nic"] = "eth1"
    parameters_map["controller_management_address"] = controller_ip
    parameters_map["storage_management_address"] = controller_ip
    parameters_map["storage_api_address"] = controller_ip
    parameters_map["system_disk_partition"] = "/dev/hba1"

    deployment_id, status_code = process_controller("/openstack/deployments", "post", pay_load = json.dumps({"parameters":parameters_map}))
def __get_openstack_process(task_id, deployment_id):
    deployment_parameters, status_code = process_controller("/openstack/deployments/%s" % deployment_id, "get")
    __log_status(task_id, status[1], True)
    __log_status(task_id, status[2], status_code)
    return deployment_parameters