Esempio n. 1
0
def online(request):
    if 'uuid' in request.POST and request.POST['uuid']:
        uuid = request.POST['uuid'].strip('\n')
        vm = VM.objects.get(uuid=uuid)
        vm.state = 'Online'
        vm.save()
        request_dict = dict(vm_uuid=uuid, type='end')
        communicate(request_dict, vm.host.ip, vm.host.monitor_port)
    return HttpResponse("Ok")
def start_monitor(request):
    uuid = request.POST["uuid"]
    vm = VM.objects.get(uuid=uuid)
    if vm.state == "Online":
        request_dict = dict(vm_uuid=uuid, type="stop")
        communicate(request_dict, vm.host.ip, vm.host.monitor_port)
        return HttpResponse(json.dumps(dict(result="stop")))
    else:
        request_dict = dict(vm_uuid=uuid, type="query")
        response = communicate(request_dict, vm.host.ip, vm.host.monitor_port)
        return HttpResponse(json.dumps(response))
Esempio n. 3
0
def execute_nat(application_id):
    try:
        application = PortApplication.objects.get(id=application_id)
        host = application.vm.host
        request_dict = dict(request_id=application_id, request_type='add_nat_rule',
                            request_userid=application.applicant.id, protocol=application.protocol,
                            host_port=application.host_port, guest_port=application.vm_port,
                            vm_name=application.vm.name, vm_uuid=application.vm.uuid)
        response = communicate(request_dict, host.ip, host.vm_manager_port)
        if response and response['request_result'] == 'success':
            application.state = 'success'
            nat_rules = json.loads(application.vm.nat_rules)
            rule = dict(host_port=application.host_port, guest_port=application.vm_port, protocol=application.protocol)
            nat_rules.append(json.dumps(rule))
            application.vm.nat_rules = json.dumps(nat_rules)
            application.vm.save()
        elif not response:
            application.state = response['request_result']
            application.error = response['error_information']
        else:
            application.state = 'network_error'
        application.save()
        return application
    except ObjectDoesNotExist:
        return None
Esempio n. 4
0
def delete_vm(application_id):
    try:
        application = DeleteApplication.objects.get(id=application_id)
        host = application.host
        request_dict = dict(request_id=application.id, request_type='delete', request_userid=application.applicant.id,
                            vm_name=application.vm.name, vm_uuid=application.vm.uuid)
        response = communicate(request_dict, host.ip, host.vm_manager_port)
        if response and response['request_result'] == 'success':
            print(response)
            application.state = 'success'
            application.vm.state = 'deleted'
            application.vm.save()
            ports = json.loads(host.ports_info)
            nat_rules = json.loads(application.vm.nat_rules)
            for rule in nat_rules:
                ports["free"].append(rule["host_port"])
                ports["used"].remove(rule["host_port"])
            ports["free"].append(application.vm.info.ssh_port)
            ports["used"].remove(application.vm.info.ssh_port)
            host.ports_info = json.dumps(ports)
            host.save()
        elif response:
            print(response)
            application.state = response['request_result']
            application.error = response['error_information']
        application.save()
        return application
    except ObjectDoesNotExist:
        return None
def control_vm(request):
    request_type = request.POST["request_type"]
    vm = VM.objects.get(uuid=request.POST["uuid"])
    operation = OperationRecord(vm=vm, user=request.user, type=request_type)
    operation.save()
    host = vm.host
    request_dict = dict(
        request_id=operation.id,
        request_type=request_type,
        request_userid=request.user.id,
        vm_name=vm.name,
        vm_uuid=vm.uuid,
    )
    response = communicate(request_dict, host.ip, host.vm_manager_port)
    if response and response["request_result"] == "success":
        operation.result = "success"
        print request_type
        if request_type == "start":
            vm.state = "Online"
        elif request_type == "shutdown":
            vm.state = "Offline"
        else:
            vm.state = "Hibernating"
        vm.save()
    elif response:
        operation.result = response["request_result"]
        operation.information = response["error_information"]
    else:
        operation.result = response["network_error"]
    operation.save()
    return HttpResponse(json.dumps(dict(request_result=operation.result, error_information=operation.information)))
def start_vm(request):
    request_type = request.POST["request_type"]
    vm = VM.objects.get(uuid=request.POST["uuid"])
    operation = OperationRecord(vm=vm, user=request.user, type=request_type)
    operation.save()
    host = vm.host
    request_dict = dict(
        request_id=operation.id,
        request_type=request_type,
        request_userid=request.user.id,
        vm_name=vm.name,
        vm_uuid=vm.uuid,
    )
    communicate(dict(vm_uuid=vm.uuid, type="stop"), vm.host.ip, vm.host.monitor_port)
    response = communicate(request_dict, host.ip, host.vm_manager_port)
    if response and response["request_result"] == "success":
        return HttpResponse(json.dumps(dict(request_result="success")))
    elif response:
        operation.result = response["request_result"]
        operation.information = response["error_information"]
    else:
        operation.result = response["network_error"]
    operation.save()
    return HttpResponse(json.dumps(dict(request_result=operation.result, error_information=operation.information)))
Esempio n. 7
0
def create_vm(application_id):
    host_list = Host.objects.filter(state='Online')
    try:
        application = CreateApplication.objects.get(id=application_id)
        if host_list.count() > 0:
            i, max_length, max_index = 0, 0, 0
            while i < host_list.count():
                ports = json.loads(host_list[i].ports_info)
                if len(ports["free"]) > max_length:
                    max_index = i
                    max_length = len(ports["free"])
                i += 1
            if max_length > 0:
                host = host_list[max_index]
                ports = json.loads(host.ports_info)
                port = ports["free"][0]
                ports["free"].remove(port)
                ports["used"].append(port)
                request_dict = dict(request_id=application_id, request_type='new', port=port,
                                    request_userid=application.applicant.id, request_memory=application.memory)
                response = communicate(request_dict, host.ip, host.vm_manager_port)
                if response and response['request_response'] == 'received':
                    application.state = 'In line'
                    application.host = host
                elif not response:
                    ports["free"].append(port)
                    ports["used"].remove(port)
                    application.state = response['request_response']
                host.ports_info = json.dumps(ports)
                host.save()
            else:
                application.state = 'error'
                application.error = 'Run of out port'
        else:
            application.state = 'error'
            application.error = 'No host'
        application.save()
        return application
    except ObjectDoesNotExist:
        return None