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