get_alibaba_instance_info
Retrieve Alibaba Cloud ECS instance details using IP address or instance ID to access configuration, status, and resource information for cloud management.
Instructions
获取阿里云ECS实例信息
Args:
ip_address_or_id (str): 公网IP地址或实例ID
Returns:
Dict: 阿里云实例信息
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ip_address_or_id | Yes |
Implementation Reference
- main.py:554-570 (handler)MCP tool handler and registration for 'get_alibaba_instance_info'. Dispatches to alibaba_provider based on whether the input starts with 'i-' (instance ID) or is an IP address.@mcp.tool() def get_alibaba_instance_info(ip_address_or_id: str) -> Dict: """ 获取阿里云ECS实例信息 Args: ip_address_or_id (str): 公网IP地址或实例ID Returns: Dict: 阿里云实例信息 """ # 阿里云实例ID通常以i-开头 if ip_address_or_id.startswith('i-'): return alibaba_provider.get_instance_by_id(ip_address_or_id) else: return alibaba_provider.get_instance_by_ip(ip_address_or_id)
- providers/alibaba_provider.py:51-115 (helper)Core logic for retrieving Alibaba ECS instance by public IP address. Queries all instances and matches IP in public_ip_address or eip_address.def get_instance_by_ip(self, ip_address: str) -> Dict: """ 根据公网IP地址查找ECS实例 Args: ip_address (str): 公网IP地址 Returns: Dict: 实例信息或错误信息 """ if not self.available: return { 'error': f'阿里云服务不可用: {getattr(self, "error", "未知错误")}', 'provider': 'alibaba' } try: # 查询所有ECS实例 request = ecs_models.DescribeInstancesRequest( region_id=self.region_id, page_size=100 ) response = self.client.describe_instances(request) if not response.body.instances: return { 'provider': 'alibaba', 'found': False, 'message': f'未找到使用IP地址 {ip_address} 的ECS实例', 'searched_region': self.region_id } # 查找匹配的IP地址 for instance in response.body.instances.instance: # 检查公网IP public_ips = [] if hasattr(instance, 'public_ip_address') and instance.public_ip_address: public_ips.extend(instance.public_ip_address.ip_address) # 检查弹性公网IP if hasattr(instance, 'eip_address') and instance.eip_address.ip_address: public_ips.append(instance.eip_address.ip_address) if ip_address in public_ips: instance_info = self._format_instance_info(instance) return { 'provider': 'alibaba', 'found': True, 'instance_info': instance_info } return { 'provider': 'alibaba', 'found': False, 'message': f'未找到使用IP地址 {ip_address} 的ECS实例', 'total_instances_checked': len(response.body.instances.instance) } except Exception as e: return { 'error': f'查询ECS实例时发生错误: {str(e)}', 'provider': 'alibaba' }
- Core logic for retrieving Alibaba ECS instance by instance ID using DescribeInstancesRequest with instance_ids filter.def get_instance_by_id(self, instance_id: str) -> Dict: """ 根据实例ID查找ECS实例 Args: instance_id (str): ECS实例ID Returns: Dict: 实例信息或错误信息 """ if not self.available: return { 'error': f'阿里云服务不可用: {getattr(self, "error", "未知错误")}', 'provider': 'alibaba' } try: request = ecs_models.DescribeInstancesRequest( region_id=self.region_id, instance_ids=json.dumps([instance_id]) ) response = self.client.describe_instances(request) if not response.body.instances or not response.body.instances.instance: return { 'provider': 'alibaba', 'found': False, 'message': f'未找到ID为 {instance_id} 的ECS实例' } instance = response.body.instances.instance[0] instance_info = self._format_instance_info(instance) return { 'provider': 'alibaba', 'found': True, 'instance_info': instance_info } except Exception as e: return { 'error': f'查询ECS实例时发生错误: {str(e)}', 'provider': 'alibaba' }
- Helper function that formats the raw Alibaba ECS instance data into a standardized dictionary with all relevant fields like IPs, status, specs, tags, etc.def _format_instance_info(self, instance) -> Dict: """格式化实例详细信息""" # 获取公网IP public_ips = [] if hasattr(instance, 'public_ip_address') and instance.public_ip_address: public_ips.extend(instance.public_ip_address.ip_address) # 获取弹性公网IP eip_address = None if hasattr(instance, 'eip_address') and instance.eip_address.ip_address: eip_address = instance.eip_address.ip_address public_ips.append(eip_address) # 获取私网IP private_ips = [] if hasattr(instance, 'vpc_attributes') and instance.vpc_attributes.private_ip_address: private_ips.extend(instance.vpc_attributes.private_ip_address.ip_address) elif hasattr(instance, 'inner_ip_address') and instance.inner_ip_address: private_ips.extend(instance.inner_ip_address.ip_address) # 获取标签 tags = {} if hasattr(instance, 'tags') and instance.tags.tag: for tag in instance.tags.tag: tags[tag.tag_key] = tag.tag_value # 获取安全组 security_groups = [] if hasattr(instance, 'security_group_ids') and instance.security_group_ids.security_group_id: security_groups = instance.security_group_ids.security_group_id return { 'instance_id': instance.instance_id, 'name': instance.instance_name, 'hostname': getattr(instance, 'hostname', ''), 'status': instance.status, 'instance_type': instance.instance_type, 'image_id': instance.image_id, 'region_id': instance.region_id, 'zone_id': instance.zone_id, 'cpu': instance.cpu, 'memory': instance.memory, 'public_ips': public_ips, 'private_ips': private_ips, 'eip_address': eip_address, 'creation_time': instance.creation_time, 'start_time': getattr(instance, 'start_time', ''), 'expired_time': getattr(instance, 'expired_time', ''), 'os_name': getattr(instance, 'osname', ''), 'os_type': getattr(instance, 'ostype', ''), 'instance_charge_type': instance.instance_charge_type, 'internet_charge_type': getattr(instance, 'internet_charge_type', ''), 'internet_max_bandwidth_in': getattr(instance, 'internet_max_bandwidth_in', 0), 'internet_max_bandwidth_out': getattr(instance, 'internet_max_bandwidth_out', 0), 'vpc_id': getattr(instance, 'vpc_id', ''), 'vswitch_id': getattr(instance, 'vswitch_id', ''), 'security_group_ids': security_groups, 'tags': tags }