示例#1
0
def p_get_client_data(user, requestIp):
    client_infos = []
    if _is_online():
        logger.info("real clc is online")
        local_ip = utility.get_local_publicip()
        if local_ip != None:
            real_ldap_ip = utility.get_real_ldap()
            logger.info("real ldap ip:%s" % real_ldap_ip)
            if real_ldap_ip != None:
                clc_ip = OpenLdap.get_clc_ip(real_ldap_ip)
                client_infos = OpenLdap.get_client_data(clc_ip, user, local_ip)
                realUser = user
                if user != "super":
                    _save_client_infos(user, client_infos)
                else:
                    realUser = "******"
                # update local instance state
                instances = OpenLdap.get_instance_states(local_ip, realUser)

                for client_info in client_infos:
                    if user == "super" and client_info.node_ip == local_ip:
                        client_info.run_as_super = True
                    else:
                        client_info.run_as_super = False
                    find_client_info = False
                    for instance in instances:
                        if (
                            client_info.node_ip == local_ip
                            and instance.user == client_info.user
                            and instance.image_id == client_info.image_id
                        ):
                            find_client_info = True
                            client_info.instance_state.state = instance.state
                            client_info.vm_info.vm_port = instance.n_port
                            client_info.vm_info.vm_password = instance.str_password
                            break
                    if not find_client_info and client_info.node_ip == local_ip:
                        client_info.instance_state.state = thd_TRANSACT_STATE.TERMINATED
            else:
                logger.error("p_get_client_data: real ldap ip error")
        else:
            logger.error("p_get_client_data: get local ip error")
    else:
        logger.info("real clc not online")
        local_ip = utility.get_local_publicip()
        if user == "super":
            logon_users = _get_logon_users()
            logger.info("logon user: %s" % str(logon_users))
            for usrName in logon_users:
                local_client = _read_client_infos(usrName)
                for lcClient in local_client:
                    if lcClient.vm_info.is_clear_power_off:
                        client_infos.append(lcClient)
        else:
            client_infos = _read_client_infos(user)
        logger.info("the saved client info number : %d " % len(client_infos))
        realUser = user
        if user == "super":
            realUser = "******"
        instances = OpenLdap.get_instance_states(local_ip, realUser)
        logger.info("the instance: %s" % str(instances))
        for client_info in client_infos:
            if user == "super":
                client_info.run_as_super = True
            else:
                client_info.run_as_super = False
            if not client_info.instance_state.is_local:  # remote instance can not be run
                client_info.instance_state.is_can_run = False
                client_info.instance_state.state = thd_TRANSACT_STATE.TERMINATED
            else:
                if _image_cache_exist(client_info.image_id, client_info.image_size):  # the image is cached
                    client_info.instance_state.is_can_run = True
                else:
                    client_info.instance_state.is_can_run = False
            find_client_info = False
            for instance in instances:
                if (
                    client_info.instance_state.is_local
                    and instance.user == client_info.user
                    and instance.image_id == client_info.image_id
                ):
                    find_client_info = True
                    client_info.instance_state.state = instance.state
                    client_info.vm_info.vm_port = instance.n_port
                    client_info.vm_info.vm_password = instance.str_password
                    break
            if not find_client_info:
                client_info.instance_state.state = thd_TRANSACT_STATE.TERMINATED
    logger.debug("p_get_client_data: %s" % str(client_infos))
    return client_infos