Beispiel #1
0
def teamsignup_list(comfirm, user_id):
    if (comfirm == 'N'):
        com = db_session.query(GnUserTeam).filter(
            GnUserTeam.user_id == user_id).all()
        com.comfirm = 'Y'
        db_session.commit()
    return 1
Beispiel #2
0
def select_putsys(team_name, team_code, team_cpu, team_memory,
                  team_disk):  #팀 시스템 수정 / cpu / memory / disk
    lit = db_session.query(GnTeam).filter(GnTeam.team_code == team_code).one()
    try:
        if team_name != "":
            lit.team_name = team_name
        if team_cpu != "":
            lit.cpu_quota = team_cpu
        if team_memory != "":
            lit.mem_quota = convertsize(team_memory)
        if team_disk != "":
            lit.disk_quota = convertsize(team_disk)
        db_session.commit()
        return True
    except:
        return False
Beispiel #3
0
def sign_up(user_name, user_id, password, password_re):
    check = db_session.query(GnUser).filter(
        GnUser.user_id == user_id).one_or_none()
    if (password == password_re):
        if (check == None):
            password_sha = convertToHashValue(password_re)
            sign_up_info = GnUser(
                user_id=user_id,
                password=password_sha,
                user_name=user_name,
                tel="-",
                email="-",
                start_date=datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
            db_session.add(sign_up_info)
            db_session.commit()
            return 'success'
        else:
            return 'user_id'
    else:
        return 'password'
Beispiel #4
0
def teamcheck_list(teamcode):
    return db_session.query(GnUser).filter(GnUser.team_code == teamcode).all()
Beispiel #5
0
def select_put(team_name, team_code):  #팀 수정
    lit = db_session.query(GnTeam).filter(GnTeam.team_code == team_code).one()
    lit.team_name = team_name
    db_session.commit()
    return True
Beispiel #6
0
def team_delete(id, code):
    db_session.query(GnUserTeam).filter(GnUserTeam.user_id == id).filter(
        GnUserTeam.team_code == code).delete()
    db_session.commit()
    return True
Beispiel #7
0
def server_create(name, size_id, image_id, team_code, user_id, sshkeys, tag,
                  type, password, backup, sql_session):

    # host 선택 룰
    # host의 조회 순서를 우선으로 가용할 수 있는 자원이 있으면 해당 vm을 해당 host에서 생성한다
    host_id = None
    size_info = sql_session.query(GnVmSize).filter(
        GnVmSize.id == size_id).one()
    if type != 'docker':
        image_info = sql_session.query(GnVmImages).filter(
            GnVmImages.id == image_id).one()
    max_cpu = int(size_info.cpu)
    max_mem = int(size_info.mem)
    max_disk = int(size_info.disk)

    team_info = sql_session.query(GnTeam).filter(
        GnTeam.team_code == team_code).one()

    #조직의 리소스 체크
    current_info = sql_session.query(
                                      func.ifnull(func.sum(GnVmMachines.cpu),0).label("sum_cpu"),
                                      func.ifnull(func.sum(GnVmMachines.memory),0).label("sum_mem"),
                                     ) \
                              .filter(GnVmMachines.team_code == team_code) \
                              .filter(GnVmMachines.status != config.REMOVE_STATUS).filter(GnVmMachines.status != config.ERROR_STATUS).one()

    disk_info = sql_session.query(
                                    func.ifnull(func.sum(GnVmMachines.disk),0).label("sum_disk")
                                 ) \
        .filter(GnVmMachines.team_code == team_code) \
        .filter(GnVmMachines.type != 'docker') \
        .filter(GnVmMachines.status != config.REMOVE_STATUS).filter(GnVmMachines.status != config.ERROR_STATUS).one()

    if type == "kvm" or type == "hyperv":
        if (current_info.sum_cpu + max_cpu) > team_info.cpu_quota or (
                current_info.sum_mem + max_mem) > team_info.mem_quota or (
                    disk_info.sum_disk + max_disk) > team_info.disk_quota:
            return {"status": False, "value": "팀의 사용량을 초과하였습니다."}
    else:
        if (current_info.sum_cpu + max_cpu) >  team_info.cpu_quota \
                or (current_info.sum_mem + max_mem) >  team_info.mem_quota:
            return {"status": False, "value": "팀의 사용량을 초과하였습니다."}

    #호스트의 남아있는 자원체크
    host_list = sql_session.query(GnHostMachines).filter(
        GnHostMachines.type == type).all()
    for host_info in host_list:
        use_sum_info = db_session.query(func.ifnull(func.sum(GnVmMachines.cpu),0).label("sum_cpu"),
                                        func.ifnull(func.sum(GnVmMachines.memory),0).label("sum_mem"),
                                        func.ifnull(func.sum(GnVmMachines.disk),0).label("sum_disk")
                                        ).filter(GnVmMachines.host_id == host_info.id)\
                                         .filter(GnVmMachines.status != config.REMOVE_STATUS) \
                                         .filter(GnVmMachines.status != config.ERROR_STATUS) \
                                         .first()
        rest_cpu = host_info.cpu - use_sum_info.sum_cpu
        rest_mem = host_info.mem - use_sum_info.sum_mem
        rest_disk = host_info.disk - use_sum_info.sum_disk

        if type == "kvm" or type == "hyperv":
            if rest_cpu >= max_cpu and rest_mem >= max_mem and rest_disk >= max_disk:
                host_id = host_info.id
                max_cpu = rest_cpu
                max_mem = rest_mem
                max_disk = rest_disk

    if host_id is None and type != "docker":
        return {"status": False, "value": "HOST 머신 리소스가 부족합니다"}

    #backup imfo
    if (backup == True):
        backup = "true"
    else:
        backup = "false"
    #db 저장
    #id 생성
    while True:
        id = random_string(8)
        check_info = sql_session.query(GnId).filter(GnId.id == id).first()
        if not check_info:
            id_info = GnId(id, type)
            sql_session.add(id_info)
            sql_session.commit()
            break
    if (type == "hyperv"):
        vm_machine = GnVmMachines(
            id=id,
            name=name,
            cpu=size_info.cpu,
            memory=size_info.mem,
            disk=size_info.disk,
            type=type,
            team_code=team_code,
            author_id=user_id,
            status=config.STARTING_STATUS,
            tag=tag,
            image_id=image_id,
            create_time=datetime.datetime.now().strftime('%Y%m%d%H%M%S'),
            host_id=host_id,
            hyperv_pass=password,
            backup_confirm=backup,
            size_id=size_id,
            os=image_info.os)
    elif (type == "kvm"):
        vm_machine = GnVmMachines(
            id=id,
            name=name,
            cpu=size_info.cpu,
            memory=size_info.mem,
            disk=size_info.disk,
            type=type,
            team_code=team_code,
            author_id=user_id,
            status=config.STARTING_STATUS,
            tag=tag,
            image_id=image_id,
            create_time=datetime.datetime.now().strftime('%Y%m%d%H%M%S'),
            host_id=host_id,
            ssh_key_id=sshkeys,
            backup_confirm=backup,
            size_id=size_id,
            os=image_info.os)
    else:
        vm_machine = GnVmMachines(
            id=id,
            name=name,
            cpu=size_info.cpu,
            memory=size_info.mem,
            disk=size_info.disk,
            type=type,
            team_code=team_code,
            author_id=user_id,
            status=config.STARTING_STATUS,
            tag=tag,
            image_id=image_id,
            create_time=datetime.datetime.now().strftime('%Y%m%d%H%M%S'),
            host_id="",
            backup_confirm=backup,
            size_id=size_id,
            os='docker')

    sql_session.add(vm_machine)

    # history 추가
    action_hist = GnInstanceActionHist(
        user_id=user_id,
        team_code=team_code,
        action="Create",
        action_time=datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
    sql_session.add(action_hist)
    sql_session.commit()
    return {"status": True, "value": id}