pai-dsw-20220101/alibabacloud_pai_dsw20220101/models.py (7,391 lines of code) (raw):

# -*- coding: utf-8 -*- # This file is auto-generated, don't edit it. Thanks. from Tea.model import TeaModel from typing import List, Dict, Any class BandwidthLimit(TeaModel): def __init__( self, egress_rate: str = None, egress_whitelists: List[str] = None, ingress_rate: str = None, ingress_whitelists: List[str] = None, ): self.egress_rate = egress_rate self.egress_whitelists = egress_whitelists self.ingress_rate = ingress_rate self.ingress_whitelists = ingress_whitelists def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.egress_rate is not None: result['EgressRate'] = self.egress_rate if self.egress_whitelists is not None: result['EgressWhitelists'] = self.egress_whitelists if self.ingress_rate is not None: result['IngressRate'] = self.ingress_rate if self.ingress_whitelists is not None: result['IngressWhitelists'] = self.ingress_whitelists return result def from_map(self, m: dict = None): m = m or dict() if m.get('EgressRate') is not None: self.egress_rate = m.get('EgressRate') if m.get('EgressWhitelists') is not None: self.egress_whitelists = m.get('EgressWhitelists') if m.get('IngressRate') is not None: self.ingress_rate = m.get('IngressRate') if m.get('IngressWhitelists') is not None: self.ingress_whitelists = m.get('IngressWhitelists') return self class CredentialConfigConfigsRolesUserInfo(TeaModel): def __init__( self, access_key_id: str = None, id: str = None, security_token: str = None, type: str = None, ): self.access_key_id = access_key_id self.id = id self.security_token = security_token self.type = type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.access_key_id is not None: result['AccessKeyId'] = self.access_key_id if self.id is not None: result['Id'] = self.id if self.security_token is not None: result['SecurityToken'] = self.security_token if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('AccessKeyId') is not None: self.access_key_id = m.get('AccessKeyId') if m.get('Id') is not None: self.id = m.get('Id') if m.get('SecurityToken') is not None: self.security_token = m.get('SecurityToken') if m.get('Type') is not None: self.type = m.get('Type') return self class CredentialConfigConfigsRoles(TeaModel): def __init__( self, assume_role_for: str = None, policy: str = None, role_arn: str = None, role_type: str = None, user_info: CredentialConfigConfigsRolesUserInfo = None, ): self.assume_role_for = assume_role_for self.policy = policy # This parameter is required. self.role_arn = role_arn # This parameter is required. self.role_type = role_type self.user_info = user_info def validate(self): if self.user_info: self.user_info.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.assume_role_for is not None: result['AssumeRoleFor'] = self.assume_role_for if self.policy is not None: result['Policy'] = self.policy if self.role_arn is not None: result['RoleArn'] = self.role_arn if self.role_type is not None: result['RoleType'] = self.role_type if self.user_info is not None: result['UserInfo'] = self.user_info.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('AssumeRoleFor') is not None: self.assume_role_for = m.get('AssumeRoleFor') if m.get('Policy') is not None: self.policy = m.get('Policy') if m.get('RoleArn') is not None: self.role_arn = m.get('RoleArn') if m.get('RoleType') is not None: self.role_type = m.get('RoleType') if m.get('UserInfo') is not None: temp_model = CredentialConfigConfigsRolesUserInfo() self.user_info = temp_model.from_map(m['UserInfo']) return self class CredentialConfigConfigs(TeaModel): def __init__( self, key: str = None, roles: List[CredentialConfigConfigsRoles] = None, type: str = None, ): # This parameter is required. self.key = key self.roles = roles # This parameter is required. self.type = type def validate(self): if self.roles: for k in self.roles: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key result['Roles'] = [] if self.roles is not None: for k in self.roles: result['Roles'].append(k.to_map() if k else None) if self.type is not None: result['Type'] = self.type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') self.roles = [] if m.get('Roles') is not None: for k in m.get('Roles'): temp_model = CredentialConfigConfigsRoles() self.roles.append(temp_model.from_map(k)) if m.get('Type') is not None: self.type = m.get('Type') return self class CredentialConfig(TeaModel): def __init__( self, aliyun_env_role_key: str = None, configs: List[CredentialConfigConfigs] = None, enable: bool = None, ): self.aliyun_env_role_key = aliyun_env_role_key self.configs = configs self.enable = enable def validate(self): if self.configs: for k in self.configs: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.aliyun_env_role_key is not None: result['AliyunEnvRoleKey'] = self.aliyun_env_role_key result['Configs'] = [] if self.configs is not None: for k in self.configs: result['Configs'].append(k.to_map() if k else None) if self.enable is not None: result['Enable'] = self.enable return result def from_map(self, m: dict = None): m = m or dict() if m.get('AliyunEnvRoleKey') is not None: self.aliyun_env_role_key = m.get('AliyunEnvRoleKey') self.configs = [] if m.get('Configs') is not None: for k in m.get('Configs'): temp_model = CredentialConfigConfigs() self.configs.append(temp_model.from_map(k)) if m.get('Enable') is not None: self.enable = m.get('Enable') return self class DemoCategory(TeaModel): def __init__( self, category_code: str = None, category_name: str = None, order: int = None, sub_categories: List['DemoCategory'] = None, ): self.category_code = category_code self.category_name = category_name self.order = order self.sub_categories = sub_categories def validate(self): if self.sub_categories: for k in self.sub_categories: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.category_code is not None: result['CategoryCode'] = self.category_code if self.category_name is not None: result['CategoryName'] = self.category_name if self.order is not None: result['Order'] = self.order result['SubCategories'] = [] if self.sub_categories is not None: for k in self.sub_categories: result['SubCategories'].append(k.to_map() if k else None) return result def from_map(self, m: dict = None): m = m or dict() if m.get('CategoryCode') is not None: self.category_code = m.get('CategoryCode') if m.get('CategoryName') is not None: self.category_name = m.get('CategoryName') if m.get('Order') is not None: self.order = m.get('Order') self.sub_categories = [] if m.get('SubCategories') is not None: for k in m.get('SubCategories'): temp_model = DemoCategory() self.sub_categories.append(temp_model.from_map(k)) return self class DynamicMountPoint(TeaModel): def __init__( self, options: str = None, root_path: str = None, ): self.options = options # This parameter is required. self.root_path = root_path def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.options is not None: result['Options'] = self.options if self.root_path is not None: result['RootPath'] = self.root_path return result def from_map(self, m: dict = None): m = m or dict() if m.get('Options') is not None: self.options = m.get('Options') if m.get('RootPath') is not None: self.root_path = m.get('RootPath') return self class DynamicMount(TeaModel): def __init__( self, enable: bool = None, mount_points: List[DynamicMountPoint] = None, ): self.enable = enable self.mount_points = mount_points def validate(self): if self.mount_points: for k in self.mount_points: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.enable is not None: result['Enable'] = self.enable result['MountPoints'] = [] if self.mount_points is not None: for k in self.mount_points: result['MountPoints'].append(k.to_map() if k else None) return result def from_map(self, m: dict = None): m = m or dict() if m.get('Enable') is not None: self.enable = m.get('Enable') self.mount_points = [] if m.get('MountPoints') is not None: for k in m.get('MountPoints'): temp_model = DynamicMountPoint() self.mount_points.append(temp_model.from_map(k)) return self class ForwardInfo(TeaModel): def __init__( self, access_type: List[str] = None, container_name: str = None, eip_allocation_id: str = None, enable: bool = None, external_port: str = None, forward_port: str = None, name: str = None, nat_gateway_id: str = None, sshpublic_key: str = None, ): self.access_type = access_type self.container_name = container_name self.eip_allocation_id = eip_allocation_id self.enable = enable self.external_port = external_port self.forward_port = forward_port self.name = name self.nat_gateway_id = nat_gateway_id self.sshpublic_key = sshpublic_key def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.access_type is not None: result['AccessType'] = self.access_type if self.container_name is not None: result['ContainerName'] = self.container_name if self.eip_allocation_id is not None: result['EipAllocationId'] = self.eip_allocation_id if self.enable is not None: result['Enable'] = self.enable if self.external_port is not None: result['ExternalPort'] = self.external_port if self.forward_port is not None: result['ForwardPort'] = self.forward_port if self.name is not None: result['Name'] = self.name if self.nat_gateway_id is not None: result['NatGatewayId'] = self.nat_gateway_id if self.sshpublic_key is not None: result['SSHPublicKey'] = self.sshpublic_key return result def from_map(self, m: dict = None): m = m or dict() if m.get('AccessType') is not None: self.access_type = m.get('AccessType') if m.get('ContainerName') is not None: self.container_name = m.get('ContainerName') if m.get('EipAllocationId') is not None: self.eip_allocation_id = m.get('EipAllocationId') if m.get('Enable') is not None: self.enable = m.get('Enable') if m.get('ExternalPort') is not None: self.external_port = m.get('ExternalPort') if m.get('ForwardPort') is not None: self.forward_port = m.get('ForwardPort') if m.get('Name') is not None: self.name = m.get('Name') if m.get('NatGatewayId') is not None: self.nat_gateway_id = m.get('NatGatewayId') if m.get('SSHPublicKey') is not None: self.sshpublic_key = m.get('SSHPublicKey') return self class ForwardInfoResponseConnectInfoInternet(TeaModel): def __init__( self, endpoint: str = None, port: str = None, ): self.endpoint = endpoint self.port = port def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.endpoint is not None: result['Endpoint'] = self.endpoint if self.port is not None: result['Port'] = self.port return result def from_map(self, m: dict = None): m = m or dict() if m.get('Endpoint') is not None: self.endpoint = m.get('Endpoint') if m.get('Port') is not None: self.port = m.get('Port') return self class ForwardInfoResponseConnectInfoIntranet(TeaModel): def __init__( self, endpoint: str = None, port: str = None, ): self.endpoint = endpoint self.port = port def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.endpoint is not None: result['Endpoint'] = self.endpoint if self.port is not None: result['Port'] = self.port return result def from_map(self, m: dict = None): m = m or dict() if m.get('Endpoint') is not None: self.endpoint = m.get('Endpoint') if m.get('Port') is not None: self.port = m.get('Port') return self class ForwardInfoResponseConnectInfo(TeaModel): def __init__( self, internet: ForwardInfoResponseConnectInfoInternet = None, intranet: ForwardInfoResponseConnectInfoIntranet = None, message: str = None, phase: str = None, ): self.internet = internet self.intranet = intranet self.message = message self.phase = phase def validate(self): if self.internet: self.internet.validate() if self.intranet: self.intranet.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.internet is not None: result['Internet'] = self.internet.to_map() if self.intranet is not None: result['Intranet'] = self.intranet.to_map() if self.message is not None: result['Message'] = self.message if self.phase is not None: result['Phase'] = self.phase return result def from_map(self, m: dict = None): m = m or dict() if m.get('Internet') is not None: temp_model = ForwardInfoResponseConnectInfoInternet() self.internet = temp_model.from_map(m['Internet']) if m.get('Intranet') is not None: temp_model = ForwardInfoResponseConnectInfoIntranet() self.intranet = temp_model.from_map(m['Intranet']) if m.get('Message') is not None: self.message = m.get('Message') if m.get('Phase') is not None: self.phase = m.get('Phase') return self class ForwardInfoResponse(TeaModel): def __init__( self, access_type: List[str] = None, connect_info: ForwardInfoResponseConnectInfo = None, container_name: str = None, eip_allocation_id: str = None, enable: bool = None, external_port: str = None, forward_port: str = None, name: str = None, nat_gateway_id: str = None, sshpublic_key: str = None, ): self.access_type = access_type self.connect_info = connect_info self.container_name = container_name self.eip_allocation_id = eip_allocation_id self.enable = enable self.external_port = external_port self.forward_port = forward_port self.name = name self.nat_gateway_id = nat_gateway_id self.sshpublic_key = sshpublic_key def validate(self): if self.connect_info: self.connect_info.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.access_type is not None: result['AccessType'] = self.access_type if self.connect_info is not None: result['ConnectInfo'] = self.connect_info.to_map() if self.container_name is not None: result['ContainerName'] = self.container_name if self.eip_allocation_id is not None: result['EipAllocationId'] = self.eip_allocation_id if self.enable is not None: result['Enable'] = self.enable if self.external_port is not None: result['ExternalPort'] = self.external_port if self.forward_port is not None: result['ForwardPort'] = self.forward_port if self.name is not None: result['Name'] = self.name if self.nat_gateway_id is not None: result['NatGatewayId'] = self.nat_gateway_id if self.sshpublic_key is not None: result['SSHPublicKey'] = self.sshpublic_key return result def from_map(self, m: dict = None): m = m or dict() if m.get('AccessType') is not None: self.access_type = m.get('AccessType') if m.get('ConnectInfo') is not None: temp_model = ForwardInfoResponseConnectInfo() self.connect_info = temp_model.from_map(m['ConnectInfo']) if m.get('ContainerName') is not None: self.container_name = m.get('ContainerName') if m.get('EipAllocationId') is not None: self.eip_allocation_id = m.get('EipAllocationId') if m.get('Enable') is not None: self.enable = m.get('Enable') if m.get('ExternalPort') is not None: self.external_port = m.get('ExternalPort') if m.get('ForwardPort') is not None: self.forward_port = m.get('ForwardPort') if m.get('Name') is not None: self.name = m.get('Name') if m.get('NatGatewayId') is not None: self.nat_gateway_id = m.get('NatGatewayId') if m.get('SSHPublicKey') is not None: self.sshpublic_key = m.get('SSHPublicKey') return self class CreateIdleInstanceCullerRequest(TeaModel): def __init__( self, cpu_percent_threshold: int = None, gpu_percent_threshold: int = None, max_idle_time_in_minutes: int = None, ): # The CPU utilization threshold. Unit: percentage. Valid values: 1 to 100. If the CPU utilization of the instance is lower than this threshold, the instance is considered idle. self.cpu_percent_threshold = cpu_percent_threshold # The GPU utilization threshold. Unit: percentage. Valid values: 1 to 100. This parameter takes effect only if the instance is of the GPU instance type. If both CPU and GPU utilization is lower than the thresholds, the instance is considered idle. self.gpu_percent_threshold = gpu_percent_threshold # The maximum time duration for which the instance is idle. Unit: minutes. If the time duration for which the instance is idle exceeds this value, the system automatically stops the instance. self.max_idle_time_in_minutes = max_idle_time_in_minutes def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu_percent_threshold is not None: result['CpuPercentThreshold'] = self.cpu_percent_threshold if self.gpu_percent_threshold is not None: result['GpuPercentThreshold'] = self.gpu_percent_threshold if self.max_idle_time_in_minutes is not None: result['MaxIdleTimeInMinutes'] = self.max_idle_time_in_minutes return result def from_map(self, m: dict = None): m = m or dict() if m.get('CpuPercentThreshold') is not None: self.cpu_percent_threshold = m.get('CpuPercentThreshold') if m.get('GpuPercentThreshold') is not None: self.gpu_percent_threshold = m.get('GpuPercentThreshold') if m.get('MaxIdleTimeInMinutes') is not None: self.max_idle_time_in_minutes = m.get('MaxIdleTimeInMinutes') return self class CreateIdleInstanceCullerResponseBody(TeaModel): def __init__( self, code: str = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The instance ID. self.instance_id = instance_id # The error message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class CreateIdleInstanceCullerResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: CreateIdleInstanceCullerResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = CreateIdleInstanceCullerResponseBody() self.body = temp_model.from_map(m['body']) return self class CreateInstanceRequestAffinityCPU(TeaModel): def __init__( self, enable: bool = None, ): # Specifies whether to enable the CPU affinity feature. # # * false # * true self.enable = enable def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.enable is not None: result['Enable'] = self.enable return result def from_map(self, m: dict = None): m = m or dict() if m.get('Enable') is not None: self.enable = m.get('Enable') return self class CreateInstanceRequestAffinity(TeaModel): def __init__( self, cpu: CreateInstanceRequestAffinityCPU = None, ): # The CPU affinity configuration. Only subscription instances that use general-purpose computing resources support CPU affinity configuration. self.cpu = cpu def validate(self): if self.cpu: self.cpu.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: temp_model = CreateInstanceRequestAffinityCPU() self.cpu = temp_model.from_map(m['CPU']) return self class CreateInstanceRequestCloudDisksStatus(TeaModel): def __init__( self, available: int = None, capacity: int = None, usage: int = None, ): # The available capacity. Unit: bytes. self.available = available # The capacity. Unit: bytes. self.capacity = capacity # The used capacity. Unit: bytes. self.usage = usage def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.available is not None: result['Available'] = self.available if self.capacity is not None: result['Capacity'] = self.capacity if self.usage is not None: result['Usage'] = self.usage return result def from_map(self, m: dict = None): m = m or dict() if m.get('Available') is not None: self.available = m.get('Available') if m.get('Capacity') is not None: self.capacity = m.get('Capacity') if m.get('Usage') is not None: self.usage = m.get('Usage') return self class CreateInstanceRequestCloudDisks(TeaModel): def __init__( self, capacity: str = None, mount_path: str = None, path: str = None, status: CreateInstanceRequestCloudDisksStatus = None, sub_type: str = None, ): # If **Resource Type** is **Public Resource** or if **Resource Quota** is subscription-based general-purpose computing resources (CPU cores ≥ 2 and memory ≥ 4 GB, or configured with GPU): # # Each instance has a free system disk of 100 GiB for persistent storage. **If the DSW instance is stopped and not launched for more than 15 days, the disk is cleared**. The disk can be expanded. For specific pricing, refer to the console. # # **\ # # **Warning**\ # # * After the expansion, you cannot reduce the storage space. Proceed with caution. # # * After the expansion, the disk is not cleared if the instance is stopped for more than 15 days. However, it will continue to incur fees. # # * If you delete the instance, the system disk is also released and the data stored in the disk is deleted. Make sure that you have backed up your data before you delete the instance. # # If you need persistent storage, you can **mount a dataset** or add the OSS, NAS, or CPFS path to the **storage path**. self.capacity = capacity # The mount path of the cloud disk. self.mount_path = mount_path # The subpath of the cloud disk that is mounted to the instance. self.path = path # The disk or snapshot usage. self.status = status # The cloud disk type. # # * rootfs: Mounts the disk as a system disk. The system environment is stored on the disk. self.sub_type = sub_type def validate(self): if self.status: self.status.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.capacity is not None: result['Capacity'] = self.capacity if self.mount_path is not None: result['MountPath'] = self.mount_path if self.path is not None: result['Path'] = self.path if self.status is not None: result['Status'] = self.status.to_map() if self.sub_type is not None: result['SubType'] = self.sub_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Capacity') is not None: self.capacity = m.get('Capacity') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Path') is not None: self.path = m.get('Path') if m.get('Status') is not None: temp_model = CreateInstanceRequestCloudDisksStatus() self.status = temp_model.from_map(m['Status']) if m.get('SubType') is not None: self.sub_type = m.get('SubType') return self class CreateInstanceRequestDatasets(TeaModel): def __init__( self, dataset_id: str = None, dataset_version: str = None, dynamic: bool = None, mount_access: str = None, mount_path: str = None, option_type: str = None, options: str = None, uri: str = None, ): # The dataset ID. If the dataset is read-only, you cannot change the dataset permission from read-only to read and write by using MountAccess. # # You can call [ListDatasets](https://help.aliyun.com/document_detail/457222.html) to obtain the dataset ID. If you configure the dataset ID, you cannot configure the dataset URI. self.dataset_id = dataset_id # The dataset version. You must also configure DatasetId. If you leave this parameter empty, the value v1 is used by default. self.dataset_version = dataset_version # Specifies whether to enable dynamic mounting. Default value: false. # # * Currently, only instances using general-purpose computing resources are supported. # * Currently, only OSS datasets are supported. The mounted datasets are read-only. # * The mount path of the dynamically mounted dataset must be a subpath of the root path. Example: /mnt/dynamic/data1/\ # * A dynamically mounted dataset must be after non-dynamic datasets. self.dynamic = dynamic # The read and write permissions of the dataset. If the dataset is read-only, it cannot be changed to read and write. self.mount_access = mount_access # The mount path of the dataset. self.mount_path = mount_path # The mount type. You cannot specify Options at the same time. This is deprecated, and you can use Options instead. self.option_type = option_type # The custom dataset mount options. Only OSS is supported. You cannot specify OptionType at the same time. For more information, see [DSW mount configurations](https://www.alibabacloud.com/help/en/pai/user-guide/read-and-write-dataset-data). self.options = options # The URI of the storage service directory, which can be directly mounted. This parameter is mutually exclusive with DatasetId. # # URI formats of different types of storage: # # * OSS: oss://bucket-name.oss-cn-shanghai-internal.aliyuncs.com/data/path/\ # * NAS: nas://29\\*\\*d-b12\\*\\*\\*\\*446.cn-hangzhou.nas.aliyuncs.com/data/path/\ # * Extreme NAS: nas://29\\*\\*\\*\\*123-y\\*\\*r.cn-hangzhou.extreme.nas.aliyuncs.com/data/path/\ # * CPFS: cpfs://cpfs-213\\*\\*\\*\\*87.cn-wulanchabu/ptc-292\\*\\*\\*\\*\\*cbb/exp-290\\*\\*\\*\\*\\*\\*\\*\\*03e/data/path/\ # * Lingjun CPFS: bmcpfs://cpfs-290\\*\\*\\*\\*\\*\\*foflh-vpc-x\\*\\*\\*\\*8r.cn-wulanchabu.cpfs.aliyuncs.com/data/path/\ self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.dataset_id is not None: result['DatasetId'] = self.dataset_id if self.dataset_version is not None: result['DatasetVersion'] = self.dataset_version if self.dynamic is not None: result['Dynamic'] = self.dynamic if self.mount_access is not None: result['MountAccess'] = self.mount_access if self.mount_path is not None: result['MountPath'] = self.mount_path if self.option_type is not None: result['OptionType'] = self.option_type if self.options is not None: result['Options'] = self.options if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DatasetId') is not None: self.dataset_id = m.get('DatasetId') if m.get('DatasetVersion') is not None: self.dataset_version = m.get('DatasetVersion') if m.get('Dynamic') is not None: self.dynamic = m.get('Dynamic') if m.get('MountAccess') is not None: self.mount_access = m.get('MountAccess') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('OptionType') is not None: self.option_type = m.get('OptionType') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class CreateInstanceRequestLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The custom label key. self.key = key # The custom label value. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class CreateInstanceRequestRequestedResource(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, gputype: str = None, memory: str = None, shared_memory: str = None, ): # The number of CPU cores. self.cpu = cpu # The number of GPUs. self.gpu = gpu # The GPU memory type. Valid values: # # * V100 # * A100 # * T4 # * A10 # * P100 self.gputype = gputype # The memory size. Unit: GB. self.memory = memory # The size of the shared memory. Unit: GB. self.shared_memory = shared_memory def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu if self.gputype is not None: result['GPUType'] = self.gputype if self.memory is not None: result['Memory'] = self.memory if self.shared_memory is not None: result['SharedMemory'] = self.shared_memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('SharedMemory') is not None: self.shared_memory = m.get('SharedMemory') return self class CreateInstanceRequestTag(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The tag key. self.key = key # The tag value. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class CreateInstanceRequestUserVpc(TeaModel): def __init__( self, bandwidth_limit: BandwidthLimit = None, default_route: str = None, extended_cidrs: List[str] = None, forward_infos: List[ForwardInfo] = None, security_group_id: str = None, v_switch_id: str = None, vpc_id: str = None, ): self.bandwidth_limit = bandwidth_limit # The default route. Valid values: # # * eth0: The default network interface is used to access the Internet through the public gateway. # * eth1: The user\\"s elastic network interface (ENI) is used to access the Internet through the private gateway. For more information about the configuration method, see [Enable Internet access for a DSW instance by using a private Internet NAT gateway](https://help.aliyun.com/document_detail/2525343.html). self.default_route = default_route # The extended CIDR blocks. # # * If you leave the SwitchId and ExtendedCIDRs parameters empty, the system automatically obtains all CIDR blocks in a VPC. # * If you configure the SwitchId and ExtendedCIDRs parameters, we recommend that you specify all CIDR blocks in a VPC. self.extended_cidrs = extended_cidrs # The forward information. self.forward_infos = forward_infos # The security group ID. self.security_group_id = security_group_id # The vSwitch ID. self.v_switch_id = v_switch_id # The VPC ID. self.vpc_id = vpc_id def validate(self): if self.bandwidth_limit: self.bandwidth_limit.validate() if self.forward_infos: for k in self.forward_infos: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.bandwidth_limit is not None: result['BandwidthLimit'] = self.bandwidth_limit.to_map() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCIDRs'] = self.extended_cidrs result['ForwardInfos'] = [] if self.forward_infos is not None: for k in self.forward_infos: result['ForwardInfos'].append(k.to_map() if k else None) if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.v_switch_id is not None: result['VSwitchId'] = self.v_switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('BandwidthLimit') is not None: temp_model = BandwidthLimit() self.bandwidth_limit = temp_model.from_map(m['BandwidthLimit']) if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCIDRs') is not None: self.extended_cidrs = m.get('ExtendedCIDRs') self.forward_infos = [] if m.get('ForwardInfos') is not None: for k in m.get('ForwardInfos'): temp_model = ForwardInfo() self.forward_infos.append(temp_model.from_map(k)) if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('VSwitchId') is not None: self.v_switch_id = m.get('VSwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class CreateInstanceRequest(TeaModel): def __init__( self, accessibility: str = None, affinity: CreateInstanceRequestAffinity = None, cloud_disks: List[CreateInstanceRequestCloudDisks] = None, credential_config: CredentialConfig = None, datasets: List[CreateInstanceRequestDatasets] = None, driver: str = None, dynamic_mount: DynamicMount = None, ecs_spec: str = None, environment_variables: Dict[str, str] = None, image_auth: str = None, image_id: str = None, image_url: str = None, instance_name: str = None, labels: List[CreateInstanceRequestLabels] = None, priority: int = None, requested_resource: CreateInstanceRequestRequestedResource = None, resource_id: str = None, tag: List[CreateInstanceRequestTag] = None, user_id: str = None, user_vpc: CreateInstanceRequestUserVpc = None, workspace_id: str = None, workspace_source: str = None, ): # The instance accessibility. # # Valid values: # # * PUBLIC: The instances are accessible to all members in the workspace. # * PRIVATE: The instances are accessible only to you and the administrator of the workspace. self.accessibility = accessibility # The affinity configuration. self.affinity = affinity # The cloud disks. self.cloud_disks = cloud_disks # The credential configuration. self.credential_config = credential_config # The datasets. self.datasets = datasets # The NVIDIA driver configuration. self.driver = driver # The dynamic mount configuration. self.dynamic_mount = dynamic_mount # The ECS instance type of the instance. You can call [ListEcsSpecs](https://help.aliyun.com/document_detail/470423.html) to obtain the ECS instance type. self.ecs_spec = ecs_spec # The environment variables. self.environment_variables = environment_variables # The Base64-encoded account and password for the user\\"s private image. The password will be hidden. self.image_auth = image_auth # The image ID. You can call [ListImages](https://help.aliyun.com/document_detail/449118.html) to obtain the image ID. self.image_id = image_id # The image address. You can call [ListImages](https://help.aliyun.com/document_detail/449118.html) to obtain the image address. self.image_url = image_url # The instance name. The name must meet the following requirements: # # * The name can contain only letters, digits, and underscores (_). # * The name can be up to 27 characters in length. self.instance_name = instance_name # The custom labels. self.labels = labels # The priority based on which resources are allocated to instances. Valid values: 1 to 9. # # * 1: the lowest priority. # * 9: the highest priority. self.priority = priority # The resource configurations. self.requested_resource = requested_resource # The ID of the resource group. This parameter is configured during prepayment. For information about how to create a dedicated resource group, see [Create a dedicated resource group and purchase general computing resources](https://help.aliyun.com/document_detail/202827.html). self.resource_id = resource_id # The tags. self.tag = tag # The ID of the instance owner. Valid values: Alibaba Cloud account and RAM user. self.user_id = user_id # The virtual private cloud (VPC) configurations. self.user_vpc = user_vpc # The workspace ID. You can call [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html) to obtain the workspace ID. self.workspace_id = workspace_id # The storage corresponding to the working directory. You can mount disks or datasets to /mnt/workspace at the same time. OSS datasets and dynamically mounted datasets are not supported. # # Valid values: # # * rootfsCloudDisk: Mount the disk to the working directory. # * Mount path of the dataset, such as /mnt/data: Datasets in URI format only support this method. # * Dataset ID, such as d-vsqjvs\\*\\*\\*\\*rp5l206u: If a single dataset is mounted to multiple paths, the first path is selected. We recommend that you do not use this method, use the mount path instead. # # If you leave this parameter empty: # # * If the instance uses cloud disks, cloud disks are selected by default. # * if no cloud disks are available, the first NAS or CPFS dataset is selected as the working directory. # * If no cloud disks, and NAS or CPFS datasets are available, the host space is used. self.workspace_source = workspace_source def validate(self): if self.affinity: self.affinity.validate() if self.cloud_disks: for k in self.cloud_disks: if k: k.validate() if self.credential_config: self.credential_config.validate() if self.datasets: for k in self.datasets: if k: k.validate() if self.dynamic_mount: self.dynamic_mount.validate() if self.labels: for k in self.labels: if k: k.validate() if self.requested_resource: self.requested_resource.validate() if self.tag: for k in self.tag: if k: k.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.affinity is not None: result['Affinity'] = self.affinity.to_map() result['CloudDisks'] = [] if self.cloud_disks is not None: for k in self.cloud_disks: result['CloudDisks'].append(k.to_map() if k else None) if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['Datasets'] = [] if self.datasets is not None: for k in self.datasets: result['Datasets'].append(k.to_map() if k else None) if self.driver is not None: result['Driver'] = self.driver if self.dynamic_mount is not None: result['DynamicMount'] = self.dynamic_mount.to_map() if self.ecs_spec is not None: result['EcsSpec'] = self.ecs_spec if self.environment_variables is not None: result['EnvironmentVariables'] = self.environment_variables if self.image_auth is not None: result['ImageAuth'] = self.image_auth if self.image_id is not None: result['ImageId'] = self.image_id if self.image_url is not None: result['ImageUrl'] = self.image_url if self.instance_name is not None: result['InstanceName'] = self.instance_name result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.priority is not None: result['Priority'] = self.priority if self.requested_resource is not None: result['RequestedResource'] = self.requested_resource.to_map() if self.resource_id is not None: result['ResourceId'] = self.resource_id result['Tag'] = [] if self.tag is not None: for k in self.tag: result['Tag'].append(k.to_map() if k else None) if self.user_id is not None: result['UserId'] = self.user_id if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_source is not None: result['WorkspaceSource'] = self.workspace_source return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('Affinity') is not None: temp_model = CreateInstanceRequestAffinity() self.affinity = temp_model.from_map(m['Affinity']) self.cloud_disks = [] if m.get('CloudDisks') is not None: for k in m.get('CloudDisks'): temp_model = CreateInstanceRequestCloudDisks() self.cloud_disks.append(temp_model.from_map(k)) if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.datasets = [] if m.get('Datasets') is not None: for k in m.get('Datasets'): temp_model = CreateInstanceRequestDatasets() self.datasets.append(temp_model.from_map(k)) if m.get('Driver') is not None: self.driver = m.get('Driver') if m.get('DynamicMount') is not None: temp_model = DynamicMount() self.dynamic_mount = temp_model.from_map(m['DynamicMount']) if m.get('EcsSpec') is not None: self.ecs_spec = m.get('EcsSpec') if m.get('EnvironmentVariables') is not None: self.environment_variables = m.get('EnvironmentVariables') if m.get('ImageAuth') is not None: self.image_auth = m.get('ImageAuth') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('InstanceName') is not None: self.instance_name = m.get('InstanceName') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = CreateInstanceRequestLabels() self.labels.append(temp_model.from_map(k)) if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('RequestedResource') is not None: temp_model = CreateInstanceRequestRequestedResource() self.requested_resource = temp_model.from_map(m['RequestedResource']) if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') self.tag = [] if m.get('Tag') is not None: for k in m.get('Tag'): temp_model = CreateInstanceRequestTag() self.tag.append(temp_model.from_map(k)) if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('UserVpc') is not None: temp_model = CreateInstanceRequestUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceSource') is not None: self.workspace_source = m.get('WorkspaceSource') return self class CreateInstanceResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 # * 200 self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class CreateInstanceResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: CreateInstanceResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = CreateInstanceResponseBody() self.body = temp_model.from_map(m['body']) return self class CreateInstanceShutdownTimerRequest(TeaModel): def __init__( self, due_time: str = None, remaining_time_in_ms: int = None, ): # The scheduled stop time. self.due_time = due_time # The time duration before the instance is stopped. Unit: milliseconds. self.remaining_time_in_ms = remaining_time_in_ms def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.due_time is not None: result['DueTime'] = self.due_time if self.remaining_time_in_ms is not None: result['RemainingTimeInMs'] = self.remaining_time_in_ms return result def from_map(self, m: dict = None): m = m or dict() if m.get('DueTime') is not None: self.due_time = m.get('DueTime') if m.get('RemainingTimeInMs') is not None: self.remaining_time_in_ms = m.get('RemainingTimeInMs') return self class CreateInstanceShutdownTimerResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class CreateInstanceShutdownTimerResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: CreateInstanceShutdownTimerResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = CreateInstanceShutdownTimerResponseBody() self.body = temp_model.from_map(m['body']) return self class CreateInstanceSnapshotRequestLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): self.key = key self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class CreateInstanceSnapshotRequest(TeaModel): def __init__( self, exclude_paths: List[str] = None, image_url: str = None, labels: List[CreateInstanceSnapshotRequestLabels] = None, overwrite: bool = None, snapshot_description: str = None, snapshot_name: str = None, ): self.exclude_paths = exclude_paths # This parameter is required. self.image_url = image_url self.labels = labels self.overwrite = overwrite self.snapshot_description = snapshot_description # This parameter is required. self.snapshot_name = snapshot_name def validate(self): if self.labels: for k in self.labels: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.exclude_paths is not None: result['ExcludePaths'] = self.exclude_paths if self.image_url is not None: result['ImageUrl'] = self.image_url result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.overwrite is not None: result['Overwrite'] = self.overwrite if self.snapshot_description is not None: result['SnapshotDescription'] = self.snapshot_description if self.snapshot_name is not None: result['SnapshotName'] = self.snapshot_name return result def from_map(self, m: dict = None): m = m or dict() if m.get('ExcludePaths') is not None: self.exclude_paths = m.get('ExcludePaths') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = CreateInstanceSnapshotRequestLabels() self.labels.append(temp_model.from_map(k)) if m.get('Overwrite') is not None: self.overwrite = m.get('Overwrite') if m.get('SnapshotDescription') is not None: self.snapshot_description = m.get('SnapshotDescription') if m.get('SnapshotName') is not None: self.snapshot_name = m.get('SnapshotName') return self class CreateInstanceSnapshotResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, snapshot_id: str = None, success: bool = None, ): self.code = code self.http_status_code = http_status_code self.instance_id = instance_id self.message = message self.request_id = request_id self.snapshot_id = snapshot_id self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.snapshot_id is not None: result['SnapshotId'] = self.snapshot_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('SnapshotId') is not None: self.snapshot_id = m.get('SnapshotId') if m.get('Success') is not None: self.success = m.get('Success') return self class CreateInstanceSnapshotResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: CreateInstanceSnapshotResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = CreateInstanceSnapshotResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteIdleInstanceCullerResponseBody(TeaModel): def __init__( self, code: str = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The instance ID. self.instance_id = instance_id # The response message. # # * If the request is successful, null is returned. # * If the request fails, the failure cause is returned. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class DeleteIdleInstanceCullerResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteIdleInstanceCullerResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteIdleInstanceCullerResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteInstanceResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 # * 200 self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class DeleteInstanceResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteInstanceResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteInstanceResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteInstanceLabelsRequest(TeaModel): def __init__( self, label_keys: str = None, ): # The keys of the tags that you want to delete. Separate multiple tags with commas (,). # # This parameter is required. self.label_keys = label_keys def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.label_keys is not None: result['LabelKeys'] = self.label_keys return result def from_map(self, m: dict = None): m = m or dict() if m.get('LabelKeys') is not None: self.label_keys = m.get('LabelKeys') return self class DeleteInstanceLabelsResponseBody(TeaModel): def __init__( self, request_id: str = None, ): # The request ID. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class DeleteInstanceLabelsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteInstanceLabelsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteInstanceLabelsResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteInstanceShutdownTimerResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class DeleteInstanceShutdownTimerResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteInstanceShutdownTimerResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteInstanceShutdownTimerResponseBody() self.body = temp_model.from_map(m['body']) return self class DeleteInstanceSnapshotResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, snapshot_id: str = None, success: bool = None, ): self.code = code self.http_status_code = http_status_code self.instance_id = instance_id self.message = message self.request_id = request_id self.snapshot_id = snapshot_id self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.snapshot_id is not None: result['SnapshotId'] = self.snapshot_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('SnapshotId') is not None: self.snapshot_id = m.get('SnapshotId') if m.get('Success') is not None: self.success = m.get('Success') return self class DeleteInstanceSnapshotResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: DeleteInstanceSnapshotResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = DeleteInstanceSnapshotResponseBody() self.body = temp_model.from_map(m['body']) return self class GetIdleInstanceCullerResponseBody(TeaModel): def __init__( self, code: str = None, cpu_percent_threshold: int = None, gpu_percent_threshold: int = None, idle_time_in_minutes: int = None, instance_id: str = None, max_idle_time_in_minutes: int = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The CPU utilization threshold. Unit: percentage. Valid values: 1 to 100. If the CPU utilization of the instance is lower than this threshold, the instance is considered idle. self.cpu_percent_threshold = cpu_percent_threshold # The GPU utilization threshold. Unit: percentage. Valid values: 1 to 100. This parameter takes effect only if the instance is of the GPU instance type. If both CPU and GPU utilization is lower than the thresholds, the instance is considered idle. self.gpu_percent_threshold = gpu_percent_threshold # The time duration for which the instance is idle. Unit: minutes. self.idle_time_in_minutes = idle_time_in_minutes # The instance ID. self.instance_id = instance_id # The maximum time duration for which the instance is idle. Unit: minutes. If the time duration for which the instance is idle exceeds this value, the system automatically stops the instance. self.max_idle_time_in_minutes = max_idle_time_in_minutes # The error message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.cpu_percent_threshold is not None: result['CpuPercentThreshold'] = self.cpu_percent_threshold if self.gpu_percent_threshold is not None: result['GpuPercentThreshold'] = self.gpu_percent_threshold if self.idle_time_in_minutes is not None: result['IdleTimeInMinutes'] = self.idle_time_in_minutes if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.max_idle_time_in_minutes is not None: result['MaxIdleTimeInMinutes'] = self.max_idle_time_in_minutes if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('CpuPercentThreshold') is not None: self.cpu_percent_threshold = m.get('CpuPercentThreshold') if m.get('GpuPercentThreshold') is not None: self.gpu_percent_threshold = m.get('GpuPercentThreshold') if m.get('IdleTimeInMinutes') is not None: self.idle_time_in_minutes = m.get('IdleTimeInMinutes') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('MaxIdleTimeInMinutes') is not None: self.max_idle_time_in_minutes = m.get('MaxIdleTimeInMinutes') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class GetIdleInstanceCullerResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetIdleInstanceCullerResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetIdleInstanceCullerResponseBody() self.body = temp_model.from_map(m['body']) return self class GetInstanceRequest(TeaModel): def __init__( self, token: str = None, ): # The sharing token information. self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('Token') is not None: self.token = m.get('Token') return self class GetInstanceResponseBodyAffinityCPU(TeaModel): def __init__( self, enable: bool = None, ): # Indicates whether CPU affinity is enabled. # # true false self.enable = enable def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.enable is not None: result['Enable'] = self.enable return result def from_map(self, m: dict = None): m = m or dict() if m.get('Enable') is not None: self.enable = m.get('Enable') return self class GetInstanceResponseBodyAffinity(TeaModel): def __init__( self, cpu: GetInstanceResponseBodyAffinityCPU = None, ): # The CPU affinity configuration. Only subscription instances that use general-purpose computing resources support CPU affinity configuration. self.cpu = cpu def validate(self): if self.cpu: self.cpu.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: temp_model = GetInstanceResponseBodyAffinityCPU() self.cpu = temp_model.from_map(m['CPU']) return self class GetInstanceResponseBodyCloudDisks(TeaModel): def __init__( self, capacity: str = None, mount_path: str = None, path: str = None, sub_type: str = None, ): # Disk Capacity self.capacity = capacity # The mount path of the cloud disk in the container. self.mount_path = mount_path # The directory on the cloud disk that is mounted to the container. self.path = path # The usage mode of the cloud disk. The value rootfs indicates that the cloud disk is used as the root file system. self.sub_type = sub_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.capacity is not None: result['Capacity'] = self.capacity if self.mount_path is not None: result['MountPath'] = self.mount_path if self.path is not None: result['Path'] = self.path if self.sub_type is not None: result['SubType'] = self.sub_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Capacity') is not None: self.capacity = m.get('Capacity') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Path') is not None: self.path = m.get('Path') if m.get('SubType') is not None: self.sub_type = m.get('SubType') return self class GetInstanceResponseBodyDatasets(TeaModel): def __init__( self, dataset_id: str = None, dataset_version: str = None, dynamic: bool = None, mount_access: str = None, mount_path: str = None, option_type: str = None, options: str = None, uri: str = None, ): # The dataset ID. self.dataset_id = dataset_id # The dataset version. self.dataset_version = dataset_version # Indicates whether dynamic mounting is enabled. Default value: false. self.dynamic = dynamic # The read and write permissions. Valid values: RW and RO. self.mount_access = mount_access # The mount path in the container. self.mount_path = mount_path # The mount type of the dataset (deprecated). self.option_type = option_type # The mount type of the dataset. self.options = options # The dataset URI. self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.dataset_id is not None: result['DatasetId'] = self.dataset_id if self.dataset_version is not None: result['DatasetVersion'] = self.dataset_version if self.dynamic is not None: result['Dynamic'] = self.dynamic if self.mount_access is not None: result['MountAccess'] = self.mount_access if self.mount_path is not None: result['MountPath'] = self.mount_path if self.option_type is not None: result['OptionType'] = self.option_type if self.options is not None: result['Options'] = self.options if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DatasetId') is not None: self.dataset_id = m.get('DatasetId') if m.get('DatasetVersion') is not None: self.dataset_version = m.get('DatasetVersion') if m.get('Dynamic') is not None: self.dynamic = m.get('Dynamic') if m.get('MountAccess') is not None: self.mount_access = m.get('MountAccess') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('OptionType') is not None: self.option_type = m.get('OptionType') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class GetInstanceResponseBodyIdleInstanceCuller(TeaModel): def __init__( self, cpu_percent_threshold: int = None, gpu_percent_threshold: int = None, idle_time_in_minutes: int = None, instance_id: str = None, max_idle_time_in_minutes: int = None, ): # The CPU utilization threshold. Unit: percentage. Valid values: 1 to 100. If the CPU utilization of the instance is lower than this threshold, the instance is considered idle. self.cpu_percent_threshold = cpu_percent_threshold # The GPU utilization threshold. Unit: percentage. Valid values: 1 to 100. This parameter takes effect only if the instance is of the GPU instance type. If both CPU and GPU utilization is lower than the thresholds, the instance is considered idle. self.gpu_percent_threshold = gpu_percent_threshold # The current time duration for which the instance is idle. Unit: minutes. self.idle_time_in_minutes = idle_time_in_minutes # The instance ID. self.instance_id = instance_id # The maximum time duration for which the instance is idle. Unit: minutes. If the time duration for which the instance is idle exceeds this value, the system automatically stops the instance. self.max_idle_time_in_minutes = max_idle_time_in_minutes def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu_percent_threshold is not None: result['CpuPercentThreshold'] = self.cpu_percent_threshold if self.gpu_percent_threshold is not None: result['GpuPercentThreshold'] = self.gpu_percent_threshold if self.idle_time_in_minutes is not None: result['IdleTimeInMinutes'] = self.idle_time_in_minutes if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.max_idle_time_in_minutes is not None: result['MaxIdleTimeInMinutes'] = self.max_idle_time_in_minutes return result def from_map(self, m: dict = None): m = m or dict() if m.get('CpuPercentThreshold') is not None: self.cpu_percent_threshold = m.get('CpuPercentThreshold') if m.get('GpuPercentThreshold') is not None: self.gpu_percent_threshold = m.get('GpuPercentThreshold') if m.get('IdleTimeInMinutes') is not None: self.idle_time_in_minutes = m.get('IdleTimeInMinutes') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('MaxIdleTimeInMinutes') is not None: self.max_idle_time_in_minutes = m.get('MaxIdleTimeInMinutes') return self class GetInstanceResponseBodyInstanceShutdownTimer(TeaModel): def __init__( self, due_time: str = None, gmt_create_time: str = None, gmt_modified_time: str = None, instance_id: str = None, remaining_time_in_ms: int = None, ): # The scheduled stop time. self.due_time = due_time # The creation time. self.gmt_create_time = gmt_create_time # The modified time. self.gmt_modified_time = gmt_modified_time # The instance ID. self.instance_id = instance_id # The remaining time before the instance is stopped. Unit: milliseconds. self.remaining_time_in_ms = remaining_time_in_ms def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.due_time is not None: result['DueTime'] = self.due_time if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.remaining_time_in_ms is not None: result['RemainingTimeInMs'] = self.remaining_time_in_ms return result def from_map(self, m: dict = None): m = m or dict() if m.get('DueTime') is not None: self.due_time = m.get('DueTime') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('RemainingTimeInMs') is not None: self.remaining_time_in_ms = m.get('RemainingTimeInMs') return self class GetInstanceResponseBodyInstanceSnapshotList(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_modified_time: str = None, image_id: str = None, image_name: str = None, image_url: str = None, reason_code: str = None, reason_message: str = None, repository_url: str = None, status: str = None, ): # The time when the snapshot was created. self.gmt_create_time = gmt_create_time # The time when the snapshot was modified. self.gmt_modified_time = gmt_modified_time # The image ID. self.image_id = image_id # The image name. self.image_name = image_name # The image URL. self.image_url = image_url # The error code of the instance snapshot. self.reason_code = reason_code # The error message of the instance snapshot. self.reason_message = reason_message # The image repository URL. self.repository_url = repository_url # The instance snapshot status. self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.image_id is not None: result['ImageId'] = self.image_id if self.image_name is not None: result['ImageName'] = self.image_name if self.image_url is not None: result['ImageUrl'] = self.image_url if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.repository_url is not None: result['RepositoryUrl'] = self.repository_url if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RepositoryUrl') is not None: self.repository_url = m.get('RepositoryUrl') if m.get('Status') is not None: self.status = m.get('Status') return self class GetInstanceResponseBodyLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The tag key. self.key = key # The tag value. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class GetInstanceResponseBodyLatestSnapshot(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_modified_time: str = None, image_id: str = None, image_name: str = None, image_url: str = None, reason_code: str = None, reason_message: str = None, repository_url: str = None, status: str = None, ): # The time when the snapshot was created. self.gmt_create_time = gmt_create_time # The time when the snapshot was modified. self.gmt_modified_time = gmt_modified_time # The image ID. self.image_id = image_id # The image name. self.image_name = image_name # The image URL. self.image_url = image_url # The error code of the instance snapshot. self.reason_code = reason_code # The error message of the instance snapshot. self.reason_message = reason_message # The image repository URL. self.repository_url = repository_url # The instance snapshot status. # # Valid values: # # * Committing # * Pushing # * Failed # * Saved self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.image_id is not None: result['ImageId'] = self.image_id if self.image_name is not None: result['ImageName'] = self.image_name if self.image_url is not None: result['ImageUrl'] = self.image_url if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.repository_url is not None: result['RepositoryUrl'] = self.repository_url if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RepositoryUrl') is not None: self.repository_url = m.get('RepositoryUrl') if m.get('Status') is not None: self.status = m.get('Status') return self class GetInstanceResponseBodyNodeErrorRecovery(TeaModel): def __init__( self, auto_switch_countdown_seconds: int = None, enable_auto_switch_on_node_error: bool = None, has_node_error: bool = None, ): # The number of seconds to wait before automatic switchover. self.auto_switch_countdown_seconds = auto_switch_countdown_seconds # Indicates whether to enable automatic switchover when a node error occurs. self.enable_auto_switch_on_node_error = enable_auto_switch_on_node_error # Indicates whether the node has an error. self.has_node_error = has_node_error def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.auto_switch_countdown_seconds is not None: result['autoSwitchCountdownSeconds'] = self.auto_switch_countdown_seconds if self.enable_auto_switch_on_node_error is not None: result['enableAutoSwitchOnNodeError'] = self.enable_auto_switch_on_node_error if self.has_node_error is not None: result['hasNodeError'] = self.has_node_error return result def from_map(self, m: dict = None): m = m or dict() if m.get('autoSwitchCountdownSeconds') is not None: self.auto_switch_countdown_seconds = m.get('autoSwitchCountdownSeconds') if m.get('enableAutoSwitchOnNodeError') is not None: self.enable_auto_switch_on_node_error = m.get('enableAutoSwitchOnNodeError') if m.get('hasNodeError') is not None: self.has_node_error = m.get('hasNodeError') return self class GetInstanceResponseBodyRequestedResource(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, gputype: str = None, memory: str = None, shared_memory: str = None, ): # The number of CPU cores. self.cpu = cpu # The number of GPUs. self.gpu = gpu # The GPU type. Valid values: # # * V100 # * A100 # * T4 # * A10 # * P100 self.gputype = gputype # The memory size. Unit: GB. self.memory = memory # The shared memory size. Unit: GB. self.shared_memory = shared_memory def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu if self.gputype is not None: result['GPUType'] = self.gputype if self.memory is not None: result['Memory'] = self.memory if self.shared_memory is not None: result['SharedMemory'] = self.shared_memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('SharedMemory') is not None: self.shared_memory = m.get('SharedMemory') return self class GetInstanceResponseBodyTags(TeaModel): def __init__( self, tag_key: str = None, tag_value: str = None, ): # The tag key. self.tag_key = tag_key # The tag value. self.tag_value = tag_value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.tag_key is not None: result['TagKey'] = self.tag_key if self.tag_value is not None: result['TagValue'] = self.tag_value return result def from_map(self, m: dict = None): m = m or dict() if m.get('TagKey') is not None: self.tag_key = m.get('TagKey') if m.get('TagValue') is not None: self.tag_value = m.get('TagValue') return self class GetInstanceResponseBodyUserVpc(TeaModel): def __init__( self, bandwidth_limit: BandwidthLimit = None, default_route: str = None, extended_cidrs: List[str] = None, forward_infos: List[ForwardInfoResponse] = None, security_group_id: str = None, v_switch_id: str = None, vpc_id: str = None, ): self.bandwidth_limit = bandwidth_limit # Default Route self.default_route = default_route # The extended CIDR block. # # * If you leave VSwitchId empty, this parameter is not required and the system automatically obtains all CIDR blocks in the VPC. # * If VSwitchId is not empty, this parameter is required. Specify all CIDR blocks in the VPC. self.extended_cidrs = extended_cidrs # The forward information. self.forward_infos = forward_infos # The security group ID. self.security_group_id = security_group_id # The vSwitch ID. self.v_switch_id = v_switch_id # The VPC ID. self.vpc_id = vpc_id def validate(self): if self.bandwidth_limit: self.bandwidth_limit.validate() if self.forward_infos: for k in self.forward_infos: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.bandwidth_limit is not None: result['BandwidthLimit'] = self.bandwidth_limit.to_map() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCIDRs'] = self.extended_cidrs result['ForwardInfos'] = [] if self.forward_infos is not None: for k in self.forward_infos: result['ForwardInfos'].append(k.to_map() if k else None) if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.v_switch_id is not None: result['VSwitchId'] = self.v_switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('BandwidthLimit') is not None: temp_model = BandwidthLimit() self.bandwidth_limit = temp_model.from_map(m['BandwidthLimit']) if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCIDRs') is not None: self.extended_cidrs = m.get('ExtendedCIDRs') self.forward_infos = [] if m.get('ForwardInfos') is not None: for k in m.get('ForwardInfos'): temp_model = ForwardInfoResponse() self.forward_infos.append(temp_model.from_map(k)) if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('VSwitchId') is not None: self.v_switch_id = m.get('VSwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class GetInstanceResponseBody(TeaModel): def __init__( self, accelerator_type: str = None, accessibility: str = None, accumulated_running_time_in_ms: int = None, affinity: GetInstanceResponseBodyAffinity = None, cloud_disks: List[GetInstanceResponseBodyCloudDisks] = None, code: str = None, credential_config: CredentialConfig = None, datasets: List[GetInstanceResponseBodyDatasets] = None, driver: str = None, dynamic_mount: DynamicMount = None, ecs_spec: str = None, environment_variables: Dict[str, str] = None, gmt_create_time: str = None, gmt_modified_time: str = None, http_status_code: int = None, idle_instance_culler: GetInstanceResponseBodyIdleInstanceCuller = None, image_auth: str = None, image_id: str = None, image_name: str = None, image_url: str = None, instance_id: str = None, instance_name: str = None, instance_shutdown_timer: GetInstanceResponseBodyInstanceShutdownTimer = None, instance_snapshot_list: List[GetInstanceResponseBodyInstanceSnapshotList] = None, instance_url: str = None, jupyterlab_url: str = None, labels: List[GetInstanceResponseBodyLabels] = None, latest_snapshot: GetInstanceResponseBodyLatestSnapshot = None, message: str = None, node_error_recovery: GetInstanceResponseBodyNodeErrorRecovery = None, payment_type: str = None, priority: int = None, proxy_path: str = None, reason_code: str = None, reason_message: str = None, request_id: str = None, requested_resource: GetInstanceResponseBodyRequestedResource = None, resource_id: str = None, resource_name: str = None, status: str = None, success: bool = None, tags: List[GetInstanceResponseBodyTags] = None, terminal_url: str = None, user_id: str = None, user_name: str = None, user_vpc: GetInstanceResponseBodyUserVpc = None, web_ideurl: str = None, workspace_id: str = None, workspace_name: str = None, workspace_source: str = None, ): # The accelerator type of the instance. # # Valid values: # # * CPU # * GPU self.accelerator_type = accelerator_type # The accessibility. Valid values: # # * PRIVATE: Accessible only to you and the administrator of the workspace. # * PUBLIC: Accessible to all members in the workspace. self.accessibility = accessibility # The accumulated running duration. Unit: milliseconds. self.accumulated_running_time_in_ms = accumulated_running_time_in_ms # The affinity configuration. self.affinity = affinity # The cloud disks of the instance. self.cloud_disks = cloud_disks # The status code. Valid values: # # * InternalError: All errors, except for parameter validation errors, are internal errors. # * ValidationError: A parameter validation error. self.code = code # The credential injection configuration. self.credential_config = credential_config # The datasets. self.datasets = datasets # The NVIDIA driver configuration. self.driver = driver # The dynamic mount configuration. self.dynamic_mount = dynamic_mount # The ECS instance type of the instance. self.ecs_spec = ecs_spec # The environment variables. self.environment_variables = environment_variables # The creation time of the instance. self.gmt_create_time = gmt_create_time # The last modified time of the instance. self.gmt_modified_time = gmt_modified_time # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The automatic shutdown settings. self.idle_instance_culler = idle_instance_culler # The Base64-encoded account and password for the user‘s private image. The password will be hidden. self.image_auth = image_auth # The image ID. self.image_id = image_id # The image name. self.image_name = image_name # The image address. self.image_url = image_url # The instance ID. self.instance_id = instance_id # The instance name. self.instance_name = instance_name # The scheduled stop tasks. self.instance_shutdown_timer = instance_shutdown_timer # The instance snapshots. self.instance_snapshot_list = instance_snapshot_list # The instance URL. self.instance_url = instance_url # The JupyterLab URL. self.jupyterlab_url = jupyterlab_url # The custom tags. self.labels = labels # The latest user image saved. self.latest_snapshot = latest_snapshot # The error message. Valid values: # # * If the request is successful, null is returned. # * If the request fails, the cause for the failure is returned. self.message = message # The error recovery configuration of the node. self.node_error_recovery = node_error_recovery # The billing method. Valid values: # # * PayAsYouGo # * Subscription self.payment_type = payment_type # The priority based on which resources are allocated to instances. self.priority = priority # The proxy path. self.proxy_path = proxy_path # The error code of the instance. self.reason_code = reason_code # The cause of the instance error. self.reason_message = reason_message # The request ID. self.request_id = request_id # The resource configurations in subscription scenarios. self.requested_resource = requested_resource # The resource ID. This parameter is available if the billing method is subscription. self.resource_id = resource_id # The specification type. # # * For subscription, this is the requested CPU and memory size. # * For pay-as-you-go, this is the selected ECS instance type. self.resource_name = resource_name # The instance status. # # Valid values: # # * Creating # * SaveFailed # * Stopped # * Failed # * ResourceAllocating # * Stopping # * Updating # * Saving # * Queuing # * Recovering # * Starting # * Running # * Saved # * Deleting # * EnvPreparing self.status = status # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success # The tags. self.tags = tags # The terminal URL. self.terminal_url = terminal_url # The user ID. self.user_id = user_id # The username. self.user_name = user_name # The virtual private cloud (VPC) configurations. self.user_vpc = user_vpc # The Web IDE URL. self.web_ideurl = web_ideurl # The workspace ID. self.workspace_id = workspace_id # The workspace name. self.workspace_name = workspace_name # The storage for the workspace. If you leave this parameter empty, the workspace uses File Storage NAS (NAS) storage, cloud disks, or local disks in sequence. self.workspace_source = workspace_source def validate(self): if self.affinity: self.affinity.validate() if self.cloud_disks: for k in self.cloud_disks: if k: k.validate() if self.credential_config: self.credential_config.validate() if self.datasets: for k in self.datasets: if k: k.validate() if self.dynamic_mount: self.dynamic_mount.validate() if self.idle_instance_culler: self.idle_instance_culler.validate() if self.instance_shutdown_timer: self.instance_shutdown_timer.validate() if self.instance_snapshot_list: for k in self.instance_snapshot_list: if k: k.validate() if self.labels: for k in self.labels: if k: k.validate() if self.latest_snapshot: self.latest_snapshot.validate() if self.node_error_recovery: self.node_error_recovery.validate() if self.requested_resource: self.requested_resource.validate() if self.tags: for k in self.tags: if k: k.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.accumulated_running_time_in_ms is not None: result['AccumulatedRunningTimeInMs'] = self.accumulated_running_time_in_ms if self.affinity is not None: result['Affinity'] = self.affinity.to_map() result['CloudDisks'] = [] if self.cloud_disks is not None: for k in self.cloud_disks: result['CloudDisks'].append(k.to_map() if k else None) if self.code is not None: result['Code'] = self.code if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['Datasets'] = [] if self.datasets is not None: for k in self.datasets: result['Datasets'].append(k.to_map() if k else None) if self.driver is not None: result['Driver'] = self.driver if self.dynamic_mount is not None: result['DynamicMount'] = self.dynamic_mount.to_map() if self.ecs_spec is not None: result['EcsSpec'] = self.ecs_spec if self.environment_variables is not None: result['EnvironmentVariables'] = self.environment_variables if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.idle_instance_culler is not None: result['IdleInstanceCuller'] = self.idle_instance_culler.to_map() if self.image_auth is not None: result['ImageAuth'] = self.image_auth if self.image_id is not None: result['ImageId'] = self.image_id if self.image_name is not None: result['ImageName'] = self.image_name if self.image_url is not None: result['ImageUrl'] = self.image_url if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.instance_name is not None: result['InstanceName'] = self.instance_name if self.instance_shutdown_timer is not None: result['InstanceShutdownTimer'] = self.instance_shutdown_timer.to_map() result['InstanceSnapshotList'] = [] if self.instance_snapshot_list is not None: for k in self.instance_snapshot_list: result['InstanceSnapshotList'].append(k.to_map() if k else None) if self.instance_url is not None: result['InstanceUrl'] = self.instance_url if self.jupyterlab_url is not None: result['JupyterlabUrl'] = self.jupyterlab_url result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.latest_snapshot is not None: result['LatestSnapshot'] = self.latest_snapshot.to_map() if self.message is not None: result['Message'] = self.message if self.node_error_recovery is not None: result['NodeErrorRecovery'] = self.node_error_recovery.to_map() if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.priority is not None: result['Priority'] = self.priority if self.proxy_path is not None: result['ProxyPath'] = self.proxy_path if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.request_id is not None: result['RequestId'] = self.request_id if self.requested_resource is not None: result['RequestedResource'] = self.requested_resource.to_map() if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.resource_name is not None: result['ResourceName'] = self.resource_name if self.status is not None: result['Status'] = self.status if self.success is not None: result['Success'] = self.success result['Tags'] = [] if self.tags is not None: for k in self.tags: result['Tags'].append(k.to_map() if k else None) if self.terminal_url is not None: result['TerminalUrl'] = self.terminal_url if self.user_id is not None: result['UserId'] = self.user_id if self.user_name is not None: result['UserName'] = self.user_name if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.web_ideurl is not None: result['WebIDEUrl'] = self.web_ideurl if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_name is not None: result['WorkspaceName'] = self.workspace_name if self.workspace_source is not None: result['WorkspaceSource'] = self.workspace_source return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('AccumulatedRunningTimeInMs') is not None: self.accumulated_running_time_in_ms = m.get('AccumulatedRunningTimeInMs') if m.get('Affinity') is not None: temp_model = GetInstanceResponseBodyAffinity() self.affinity = temp_model.from_map(m['Affinity']) self.cloud_disks = [] if m.get('CloudDisks') is not None: for k in m.get('CloudDisks'): temp_model = GetInstanceResponseBodyCloudDisks() self.cloud_disks.append(temp_model.from_map(k)) if m.get('Code') is not None: self.code = m.get('Code') if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.datasets = [] if m.get('Datasets') is not None: for k in m.get('Datasets'): temp_model = GetInstanceResponseBodyDatasets() self.datasets.append(temp_model.from_map(k)) if m.get('Driver') is not None: self.driver = m.get('Driver') if m.get('DynamicMount') is not None: temp_model = DynamicMount() self.dynamic_mount = temp_model.from_map(m['DynamicMount']) if m.get('EcsSpec') is not None: self.ecs_spec = m.get('EcsSpec') if m.get('EnvironmentVariables') is not None: self.environment_variables = m.get('EnvironmentVariables') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('IdleInstanceCuller') is not None: temp_model = GetInstanceResponseBodyIdleInstanceCuller() self.idle_instance_culler = temp_model.from_map(m['IdleInstanceCuller']) if m.get('ImageAuth') is not None: self.image_auth = m.get('ImageAuth') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('InstanceName') is not None: self.instance_name = m.get('InstanceName') if m.get('InstanceShutdownTimer') is not None: temp_model = GetInstanceResponseBodyInstanceShutdownTimer() self.instance_shutdown_timer = temp_model.from_map(m['InstanceShutdownTimer']) self.instance_snapshot_list = [] if m.get('InstanceSnapshotList') is not None: for k in m.get('InstanceSnapshotList'): temp_model = GetInstanceResponseBodyInstanceSnapshotList() self.instance_snapshot_list.append(temp_model.from_map(k)) if m.get('InstanceUrl') is not None: self.instance_url = m.get('InstanceUrl') if m.get('JupyterlabUrl') is not None: self.jupyterlab_url = m.get('JupyterlabUrl') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = GetInstanceResponseBodyLabels() self.labels.append(temp_model.from_map(k)) if m.get('LatestSnapshot') is not None: temp_model = GetInstanceResponseBodyLatestSnapshot() self.latest_snapshot = temp_model.from_map(m['LatestSnapshot']) if m.get('Message') is not None: self.message = m.get('Message') if m.get('NodeErrorRecovery') is not None: temp_model = GetInstanceResponseBodyNodeErrorRecovery() self.node_error_recovery = temp_model.from_map(m['NodeErrorRecovery']) if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('ProxyPath') is not None: self.proxy_path = m.get('ProxyPath') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('RequestedResource') is not None: temp_model = GetInstanceResponseBodyRequestedResource() self.requested_resource = temp_model.from_map(m['RequestedResource']) if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('ResourceName') is not None: self.resource_name = m.get('ResourceName') if m.get('Status') is not None: self.status = m.get('Status') if m.get('Success') is not None: self.success = m.get('Success') self.tags = [] if m.get('Tags') is not None: for k in m.get('Tags'): temp_model = GetInstanceResponseBodyTags() self.tags.append(temp_model.from_map(k)) if m.get('TerminalUrl') is not None: self.terminal_url = m.get('TerminalUrl') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('UserName') is not None: self.user_name = m.get('UserName') if m.get('UserVpc') is not None: temp_model = GetInstanceResponseBodyUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('WebIDEUrl') is not None: self.web_ideurl = m.get('WebIDEUrl') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceName') is not None: self.workspace_name = m.get('WorkspaceName') if m.get('WorkspaceSource') is not None: self.workspace_source = m.get('WorkspaceSource') return self class GetInstanceResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetInstanceResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetInstanceResponseBody() self.body = temp_model.from_map(m['body']) return self class GetInstanceEventsRequest(TeaModel): def __init__( self, end_time: str = None, max_events_num: int = None, start_time: str = None, token: str = None, ): # The end of the time range to query. self.end_time = end_time # The maximum number of events. Default value: 2000. self.max_events_num = max_events_num # The beginning of the time range to query. self.start_time = start_time # The token used to share the URL. self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.max_events_num is not None: result['MaxEventsNum'] = self.max_events_num if self.start_time is not None: result['StartTime'] = self.start_time if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('MaxEventsNum') is not None: self.max_events_num = m.get('MaxEventsNum') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Token') is not None: self.token = m.get('Token') return self class GetInstanceEventsResponseBody(TeaModel): def __init__( self, code: str = None, events: List[str] = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The events. self.events = events # The HTTP status code. Valid values: # # * 400: One or more parameters are invalid. # * 404: The instance does not exist. # * 200: The request is normal. self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.events is not None: result['Events'] = self.events if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('Events') is not None: self.events = m.get('Events') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class GetInstanceEventsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetInstanceEventsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetInstanceEventsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetInstanceMetricsRequest(TeaModel): def __init__( self, end_time: str = None, metric_type: str = None, start_time: str = None, time_step: str = None, ): # The end of the time range to query. self.end_time = end_time # The metric type. Valid values: # # * GpuCoreUsage: the GPU utilization. # * GpuMemoryUsage: the GPU memory utilization. # * CpuCoreUsage: the CPU utilization. # * MemoryUsage: the memory utilization. # * NetworkInputRate: the network ingress rate. # * NetworkOutputRate: the network egress rate. # * DiskReadRate: the disk read rate. # * DiskWriteRate: the disk write rate. # # This parameter is required. self.metric_type = metric_type # The beginning of the time range to query. self.start_time = start_time # The interval at which metrics are returned. Unit: minutes. self.time_step = time_step def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.metric_type is not None: result['MetricType'] = self.metric_type if self.start_time is not None: result['StartTime'] = self.start_time if self.time_step is not None: result['TimeStep'] = self.time_step return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('MetricType') is not None: self.metric_type = m.get('MetricType') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('TimeStep') is not None: self.time_step = m.get('TimeStep') return self class GetInstanceMetricsResponseBodyPodMetricsMetrics(TeaModel): def __init__( self, time: int = None, value: float = None, ): # The timestamp corresponding to the metric. self.time = time # The metric value. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.time is not None: result['Time'] = self.time if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Time') is not None: self.time = m.get('Time') if m.get('Value') is not None: self.value = m.get('Value') return self class GetInstanceMetricsResponseBodyPodMetrics(TeaModel): def __init__( self, metrics: List[GetInstanceMetricsResponseBodyPodMetricsMetrics] = None, pod_id: str = None, ): # The metrics of the pod that corresponds to the instance. self.metrics = metrics # The ID of the pod that corresponds to the instance. self.pod_id = pod_id def validate(self): if self.metrics: for k in self.metrics: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['Metrics'] = [] if self.metrics is not None: for k in self.metrics: result['Metrics'].append(k.to_map() if k else None) if self.pod_id is not None: result['PodId'] = self.pod_id return result def from_map(self, m: dict = None): m = m or dict() self.metrics = [] if m.get('Metrics') is not None: for k in m.get('Metrics'): temp_model = GetInstanceMetricsResponseBodyPodMetricsMetrics() self.metrics.append(temp_model.from_map(k)) if m.get('PodId') is not None: self.pod_id = m.get('PodId') return self class GetInstanceMetricsResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, pod_metrics: List[GetInstanceMetricsResponseBodyPodMetrics] = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The information about the metrics of the pod that corresponds to the instance. self.pod_metrics = pod_metrics # The request ID. self.request_id = request_id # Indicates whether the request was successful. # # * true # * false self.success = success def validate(self): if self.pod_metrics: for k in self.pod_metrics: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message result['PodMetrics'] = [] if self.pod_metrics is not None: for k in self.pod_metrics: result['PodMetrics'].append(k.to_map() if k else None) if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') self.pod_metrics = [] if m.get('PodMetrics') is not None: for k in m.get('PodMetrics'): temp_model = GetInstanceMetricsResponseBodyPodMetrics() self.pod_metrics.append(temp_model.from_map(k)) if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class GetInstanceMetricsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetInstanceMetricsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetInstanceMetricsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetInstanceShutdownTimerResponseBody(TeaModel): def __init__( self, code: str = None, due_time: str = None, gmt_create_time: str = None, gmt_modified_time: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, remaining_time_in_ms: int = None, request_id: str = None, success: bool = None, ): self.code = code self.due_time = due_time self.gmt_create_time = gmt_create_time self.gmt_modified_time = gmt_modified_time self.http_status_code = http_status_code self.instance_id = instance_id self.message = message self.remaining_time_in_ms = remaining_time_in_ms self.request_id = request_id self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.due_time is not None: result['DueTime'] = self.due_time if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.remaining_time_in_ms is not None: result['RemainingTimeInMs'] = self.remaining_time_in_ms if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('DueTime') is not None: self.due_time = m.get('DueTime') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RemainingTimeInMs') is not None: self.remaining_time_in_ms = m.get('RemainingTimeInMs') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class GetInstanceShutdownTimerResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetInstanceShutdownTimerResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetInstanceShutdownTimerResponseBody() self.body = temp_model.from_map(m['body']) return self class GetInstanceSnapshotResponseBodyLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): self.key = key self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class GetInstanceSnapshotResponseBody(TeaModel): def __init__( self, code: str = None, exclude_paths: List[str] = None, gmt_create_time: str = None, gmt_modified_time: str = None, http_status_code: int = None, image_id: str = None, image_url: str = None, instance_id: str = None, labels: List[GetInstanceSnapshotResponseBodyLabels] = None, message: str = None, reason_code: str = None, reason_message: str = None, request_id: str = None, snapshot_id: str = None, snapshot_name: str = None, status: str = None, success: bool = None, ): self.code = code self.exclude_paths = exclude_paths self.gmt_create_time = gmt_create_time self.gmt_modified_time = gmt_modified_time self.http_status_code = http_status_code self.image_id = image_id self.image_url = image_url self.instance_id = instance_id self.labels = labels self.message = message self.reason_code = reason_code self.reason_message = reason_message self.request_id = request_id self.snapshot_id = snapshot_id self.snapshot_name = snapshot_name self.status = status self.success = success def validate(self): if self.labels: for k in self.labels: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.exclude_paths is not None: result['ExcludePaths'] = self.exclude_paths if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.image_id is not None: result['ImageId'] = self.image_id if self.image_url is not None: result['ImageUrl'] = self.image_url if self.instance_id is not None: result['InstanceId'] = self.instance_id result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.message is not None: result['Message'] = self.message if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.request_id is not None: result['RequestId'] = self.request_id if self.snapshot_id is not None: result['SnapshotId'] = self.snapshot_id if self.snapshot_name is not None: result['SnapshotName'] = self.snapshot_name if self.status is not None: result['Status'] = self.status if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('ExcludePaths') is not None: self.exclude_paths = m.get('ExcludePaths') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = GetInstanceSnapshotResponseBodyLabels() self.labels.append(temp_model.from_map(k)) if m.get('Message') is not None: self.message = m.get('Message') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('SnapshotId') is not None: self.snapshot_id = m.get('SnapshotId') if m.get('SnapshotName') is not None: self.snapshot_name = m.get('SnapshotName') if m.get('Status') is not None: self.status = m.get('Status') if m.get('Success') is not None: self.success = m.get('Success') return self class GetInstanceSnapshotResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetInstanceSnapshotResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetInstanceSnapshotResponseBody() self.body = temp_model.from_map(m['body']) return self class GetLifecycleRequest(TeaModel): def __init__( self, end_time: str = None, limit: int = None, order: str = None, session_number: int = None, start_time: str = None, token: str = None, ): # The end of the time range to query. self.end_time = end_time # The number of sessions to query. self.limit = limit # The sorting order of the results. Valid values: # # * ASC: sorted by time in ascending order. # * DESC: sorted by time in descending order. self.order = order # A session refers to the process of an instance from startup to failure or shutdown. The sessionNumber indicates the offset value for the instance\\"s session sequence. self.session_number = session_number # The beginning of the time range to query. self.start_time = start_time # The token used to share the URL. self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.limit is not None: result['Limit'] = self.limit if self.order is not None: result['Order'] = self.order if self.session_number is not None: result['SessionNumber'] = self.session_number if self.start_time is not None: result['StartTime'] = self.start_time if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('Limit') is not None: self.limit = m.get('Limit') if m.get('Order') is not None: self.order = m.get('Order') if m.get('SessionNumber') is not None: self.session_number = m.get('SessionNumber') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Token') is not None: self.token = m.get('Token') return self class GetLifecycleResponseBodyLifecycle(TeaModel): def __init__( self, status: str = None, reason_code: str = None, reason_message: str = None, gmt_create_time: str = None, ): # The status of the instance. Valid values: # # * Creating # * SaveFailed: The instance image failed to be saved. # * Stopped # * Failed # * ResourceAllocating # * Stopping # * Updating # * Saving # * Starting # * Running # * Saved # * EnvPreparing: Preparing environment. # * ArrearStopping: The service is being stopped due to overdue payments. # * Arrearge: The service is stopped due to overdue payments. # * Queuing # * Recovering self.status = status # The reason code that corresponds to an event. self.reason_code = reason_code # The reason message that corresponds to an event. self.reason_message = reason_message # The time the status was created, specifically the time the instance transitioned to this status (in GMT). self.gmt_create_time = gmt_create_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.status is not None: result['Status'] = self.status if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('Status') is not None: self.status = m.get('Status') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') return self class GetLifecycleResponseBody(TeaModel): def __init__( self, code: str = None, lifecycle: List[List[GetLifecycleResponseBodyLifecycle]] = None, message: str = None, request_id: str = None, success: bool = None, total_count: int = None, ): # The status code. Valid values: # # * InternalError: All errors, except for parameter validation errors, are internal errors. # * ValidationError: A parameter validation error. self.code = code # The lifecycle details. self.lifecycle = lifecycle # The returned message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success # The total number of queried sessions. self.total_count = total_count def validate(self): if self.lifecycle: for k in self.lifecycle: for k1 in k: if k1: k1.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code result['Lifecycle'] = [] if self.lifecycle is not None: for k in self.lifecycle: l1 = [] for k1 in k: l1.append(k1.to_map() if k1 else None) result['Lifecycle'].append(l1) if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') self.lifecycle = [] if m.get('Lifecycle') is not None: for k in m.get('Lifecycle'): l1 = [] for k1 in k: temp_model = GetLifecycleResponseBodyLifecycle() l1.append(temp_model.from_map(k1)) self.lifecycle.append(l1) if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class GetLifecycleResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetLifecycleResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetLifecycleResponseBody() self.body = temp_model.from_map(m['body']) return self class GetMetricsRequest(TeaModel): def __init__( self, dimensions: str = None, end_time: str = None, length: str = None, metric_name: str = None, namespace: str = None, next_token: str = None, period: str = None, start_time: str = None, ): self.dimensions = dimensions self.end_time = end_time self.length = length self.metric_name = metric_name self.namespace = namespace self.next_token = next_token self.period = period self.start_time = start_time def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.dimensions is not None: result['Dimensions'] = self.dimensions if self.end_time is not None: result['EndTime'] = self.end_time if self.length is not None: result['Length'] = self.length if self.metric_name is not None: result['MetricName'] = self.metric_name if self.namespace is not None: result['Namespace'] = self.namespace if self.next_token is not None: result['NextToken'] = self.next_token if self.period is not None: result['Period'] = self.period if self.start_time is not None: result['StartTime'] = self.start_time return result def from_map(self, m: dict = None): m = m or dict() if m.get('Dimensions') is not None: self.dimensions = m.get('Dimensions') if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('Length') is not None: self.length = m.get('Length') if m.get('MetricName') is not None: self.metric_name = m.get('MetricName') if m.get('Namespace') is not None: self.namespace = m.get('Namespace') if m.get('NextToken') is not None: self.next_token = m.get('NextToken') if m.get('Period') is not None: self.period = m.get('Period') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') return self class GetMetricsResponseBody(TeaModel): def __init__( self, code: str = None, datapoints: str = None, message: str = None, next_token: str = None, period: str = None, request_id: str = None, success: bool = None, ): self.code = code self.datapoints = datapoints self.message = message self.next_token = next_token self.period = period self.request_id = request_id self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.datapoints is not None: result['Datapoints'] = self.datapoints if self.message is not None: result['Message'] = self.message if self.next_token is not None: result['NextToken'] = self.next_token if self.period is not None: result['Period'] = self.period if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('Datapoints') is not None: self.datapoints = m.get('Datapoints') if m.get('Message') is not None: self.message = m.get('Message') if m.get('NextToken') is not None: self.next_token = m.get('NextToken') if m.get('Period') is not None: self.period = m.get('Period') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class GetMetricsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetMetricsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetMetricsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetResourceGroupStatisticsRequest(TeaModel): def __init__( self, end_time: str = None, resource_id: str = None, start_time: str = None, workspace_ids: str = None, ): # This parameter is required. self.end_time = end_time # This parameter is required. self.resource_id = resource_id # This parameter is required. self.start_time = start_time # This parameter is required. self.workspace_ids = workspace_ids def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.start_time is not None: result['StartTime'] = self.start_time if self.workspace_ids is not None: result['WorkspaceIds'] = self.workspace_ids return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('WorkspaceIds') is not None: self.workspace_ids = m.get('WorkspaceIds') return self class GetResourceGroupStatisticsResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, message: str = None, request_id: str = None, statistics: Dict[str, dict] = None, success: bool = None, ): self.code = code self.http_status_code = http_status_code self.message = message self.request_id = request_id self.statistics = statistics self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.statistics is not None: result['Statistics'] = self.statistics if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Statistics') is not None: self.statistics = m.get('Statistics') if m.get('Success') is not None: self.success = m.get('Success') return self class GetResourceGroupStatisticsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetResourceGroupStatisticsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetResourceGroupStatisticsResponseBody() self.body = temp_model.from_map(m['body']) return self class GetTokenRequest(TeaModel): def __init__( self, expire_time: int = None, instance_id: str = None, ): # The validity period. Unit: seconds. self.expire_time = expire_time # The instance ID. # # This parameter is required. self.instance_id = instance_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.expire_time is not None: result['ExpireTime'] = self.expire_time if self.instance_id is not None: result['InstanceId'] = self.instance_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('ExpireTime') is not None: self.expire_time = m.get('ExpireTime') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') return self class GetTokenResponseBody(TeaModel): def __init__( self, code: str = None, message: str = None, request_id: str = None, success: bool = None, token: str = None, ): # The status code. Valid values: # # * InternalError: All errors, except for parameter validation errors, are internal errors. # * ValidationError: A parameter validation error. self.code = code # The error message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success # The temporary authentication information of the DSW instance. self.token = token def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success if self.token is not None: result['Token'] = self.token return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') if m.get('Token') is not None: self.token = m.get('Token') return self class GetTokenResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetTokenResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetTokenResponseBody() self.body = temp_model.from_map(m['body']) return self class GetUserConfigResponseBodyFreeTier(TeaModel): def __init__( self, end_time: str = None, init_base_unit: str = None, init_base_value: float = None, init_show_unit: str = None, init_show_value: str = None, is_free_tier_user: bool = None, period_base_unit: str = None, period_base_value: float = None, period_show_unit: str = None, period_show_value: str = None, start_time: str = None, status: str = None, ): self.end_time = end_time self.init_base_unit = init_base_unit self.init_base_value = init_base_value self.init_show_unit = init_show_unit self.init_show_value = init_show_value self.is_free_tier_user = is_free_tier_user self.period_base_unit = period_base_unit self.period_base_value = period_base_value self.period_show_unit = period_show_unit self.period_show_value = period_show_value self.start_time = start_time self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.end_time is not None: result['EndTime'] = self.end_time if self.init_base_unit is not None: result['InitBaseUnit'] = self.init_base_unit if self.init_base_value is not None: result['InitBaseValue'] = self.init_base_value if self.init_show_unit is not None: result['InitShowUnit'] = self.init_show_unit if self.init_show_value is not None: result['InitShowValue'] = self.init_show_value if self.is_free_tier_user is not None: result['IsFreeTierUser'] = self.is_free_tier_user if self.period_base_unit is not None: result['PeriodBaseUnit'] = self.period_base_unit if self.period_base_value is not None: result['PeriodBaseValue'] = self.period_base_value if self.period_show_unit is not None: result['PeriodShowUnit'] = self.period_show_unit if self.period_show_value is not None: result['PeriodShowValue'] = self.period_show_value if self.start_time is not None: result['StartTime'] = self.start_time if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('EndTime') is not None: self.end_time = m.get('EndTime') if m.get('InitBaseUnit') is not None: self.init_base_unit = m.get('InitBaseUnit') if m.get('InitBaseValue') is not None: self.init_base_value = m.get('InitBaseValue') if m.get('InitShowUnit') is not None: self.init_show_unit = m.get('InitShowUnit') if m.get('InitShowValue') is not None: self.init_show_value = m.get('InitShowValue') if m.get('IsFreeTierUser') is not None: self.is_free_tier_user = m.get('IsFreeTierUser') if m.get('PeriodBaseUnit') is not None: self.period_base_unit = m.get('PeriodBaseUnit') if m.get('PeriodBaseValue') is not None: self.period_base_value = m.get('PeriodBaseValue') if m.get('PeriodShowUnit') is not None: self.period_show_unit = m.get('PeriodShowUnit') if m.get('PeriodShowValue') is not None: self.period_show_value = m.get('PeriodShowValue') if m.get('StartTime') is not None: self.start_time = m.get('StartTime') if m.get('Status') is not None: self.status = m.get('Status') return self class GetUserConfigResponseBody(TeaModel): def __init__( self, account_sufficient: bool = None, code: str = None, enable_eci_disk: bool = None, free_tier: GetUserConfigResponseBodyFreeTier = None, free_tier_spec_available: bool = None, http_status_code: int = None, message: str = None, request_id: str = None, success: bool = None, ): self.account_sufficient = account_sufficient self.code = code self.enable_eci_disk = enable_eci_disk self.free_tier = free_tier self.free_tier_spec_available = free_tier_spec_available self.http_status_code = http_status_code self.message = message self.request_id = request_id self.success = success def validate(self): if self.free_tier: self.free_tier.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.account_sufficient is not None: result['AccountSufficient'] = self.account_sufficient if self.code is not None: result['Code'] = self.code if self.enable_eci_disk is not None: result['EnableEciDisk'] = self.enable_eci_disk if self.free_tier is not None: result['FreeTier'] = self.free_tier.to_map() if self.free_tier_spec_available is not None: result['FreeTierSpecAvailable'] = self.free_tier_spec_available if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('AccountSufficient') is not None: self.account_sufficient = m.get('AccountSufficient') if m.get('Code') is not None: self.code = m.get('Code') if m.get('EnableEciDisk') is not None: self.enable_eci_disk = m.get('EnableEciDisk') if m.get('FreeTier') is not None: temp_model = GetUserConfigResponseBodyFreeTier() self.free_tier = temp_model.from_map(m['FreeTier']) if m.get('FreeTierSpecAvailable') is not None: self.free_tier_spec_available = m.get('FreeTierSpecAvailable') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class GetUserConfigResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: GetUserConfigResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = GetUserConfigResponseBody() self.body = temp_model.from_map(m['body']) return self class ListEcsSpecsRequest(TeaModel): def __init__( self, accelerator_type: str = None, order: str = None, page_number: int = None, page_size: int = None, sort_by: str = None, ): # The accelerator type. # # * CPU: Only CPU computing is used. # * GPU: GPUs are used to accelerate computing. # # This parameter is required. self.accelerator_type = accelerator_type # The sorting order. Valid values: # # * ASC # * DESC self.order = order # The page number. Pages start from page 1. Default value: 1. self.page_number = page_number # The number of entries per page. self.page_size = page_size # The field by which the query results are sorted. Set the value to gmtCreate. self.sort_by = sort_by def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.order is not None: result['Order'] = self.order if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.sort_by is not None: result['SortBy'] = self.sort_by return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('Order') is not None: self.order = m.get('Order') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') return self class ListEcsSpecsResponseBodyEcsSpecsLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The label key added to the ECS specification. self.key = key # The label value added to the ECS specification. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class ListEcsSpecsResponseBodyEcsSpecs(TeaModel): def __init__( self, accelerator_type: str = None, cpu: int = None, currency: str = None, gpu: int = None, gpumemory_size: float = None, gputype: str = None, instance_bandwidth_rx: int = None, instance_type: str = None, is_available: bool = None, labels: List[ListEcsSpecsResponseBodyEcsSpecsLabels] = None, memory: float = None, price: float = None, spot_stock_status: str = None, system_disk_capacity: int = None, ): # The accelerator type. self.accelerator_type = accelerator_type # The number of vCPUs. self.cpu = cpu # The currency unit. self.currency = currency # The number of GPUs. self.gpu = gpu self.gpumemory_size = gpumemory_size # The GPU type. Valid values: # # * V100 # * A100 # * A10 # * T4 # * P100 self.gputype = gputype # The inbound bandwidth of the instance. self.instance_bandwidth_rx = instance_bandwidth_rx # The instance type. self.instance_type = instance_type # Indicates whether the resource was available. self.is_available = is_available # The labels of the ECS specification. self.labels = labels # The memory size. Unit: GB. self.memory = memory # The price. self.price = price self.spot_stock_status = spot_stock_status # The size of the system disk. Unit: GB. self.system_disk_capacity = system_disk_capacity def validate(self): if self.labels: for k in self.labels: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.cpu is not None: result['CPU'] = self.cpu if self.currency is not None: result['Currency'] = self.currency if self.gpu is not None: result['GPU'] = self.gpu if self.gpumemory_size is not None: result['GPUMemorySize'] = self.gpumemory_size if self.gputype is not None: result['GPUType'] = self.gputype if self.instance_bandwidth_rx is not None: result['InstanceBandwidthRx'] = self.instance_bandwidth_rx if self.instance_type is not None: result['InstanceType'] = self.instance_type if self.is_available is not None: result['IsAvailable'] = self.is_available result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.memory is not None: result['Memory'] = self.memory if self.price is not None: result['Price'] = self.price if self.spot_stock_status is not None: result['SpotStockStatus'] = self.spot_stock_status if self.system_disk_capacity is not None: result['SystemDiskCapacity'] = self.system_disk_capacity return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('Currency') is not None: self.currency = m.get('Currency') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUMemorySize') is not None: self.gpumemory_size = m.get('GPUMemorySize') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('InstanceBandwidthRx') is not None: self.instance_bandwidth_rx = m.get('InstanceBandwidthRx') if m.get('InstanceType') is not None: self.instance_type = m.get('InstanceType') if m.get('IsAvailable') is not None: self.is_available = m.get('IsAvailable') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = ListEcsSpecsResponseBodyEcsSpecsLabels() self.labels.append(temp_model.from_map(k)) if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('Price') is not None: self.price = m.get('Price') if m.get('SpotStockStatus') is not None: self.spot_stock_status = m.get('SpotStockStatus') if m.get('SystemDiskCapacity') is not None: self.system_disk_capacity = m.get('SystemDiskCapacity') return self class ListEcsSpecsResponseBody(TeaModel): def __init__( self, code: str = None, ecs_specs: List[ListEcsSpecsResponseBodyEcsSpecs] = None, http_status_code: int = None, message: str = None, request_id: str = None, success: bool = None, total_count: int = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The specifications of the ECS instances returned on this page. self.ecs_specs = ecs_specs # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success # The total number of ECS instances. self.total_count = total_count def validate(self): if self.ecs_specs: for k in self.ecs_specs: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code result['EcsSpecs'] = [] if self.ecs_specs is not None: for k in self.ecs_specs: result['EcsSpecs'].append(k.to_map() if k else None) if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') self.ecs_specs = [] if m.get('EcsSpecs') is not None: for k in m.get('EcsSpecs'): temp_model = ListEcsSpecsResponseBodyEcsSpecs() self.ecs_specs.append(temp_model.from_map(k)) if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListEcsSpecsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListEcsSpecsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListEcsSpecsResponseBody() self.body = temp_model.from_map(m['body']) return self class ListInstanceSnapshotRequest(TeaModel): def __init__( self, order: str = None, page_number: int = None, page_size: int = None, sort_by: str = None, ): self.order = order self.page_number = page_number self.page_size = page_size self.sort_by = sort_by def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.order is not None: result['Order'] = self.order if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.sort_by is not None: result['SortBy'] = self.sort_by return result def from_map(self, m: dict = None): m = m or dict() if m.get('Order') is not None: self.order = m.get('Order') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') return self class ListInstanceSnapshotResponseBodySnapshotsLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): self.key = key self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class ListInstanceSnapshotResponseBodySnapshots(TeaModel): def __init__( self, exclude_paths: List[str] = None, gmt_create_time: str = None, gmt_modified_time: str = None, image_id: str = None, image_url: str = None, instance_id: str = None, labels: List[ListInstanceSnapshotResponseBodySnapshotsLabels] = None, reason_code: str = None, reason_message: str = None, snapshot_id: str = None, snapshot_name: str = None, status: str = None, ): self.exclude_paths = exclude_paths self.gmt_create_time = gmt_create_time self.gmt_modified_time = gmt_modified_time self.image_id = image_id self.image_url = image_url self.instance_id = instance_id self.labels = labels self.reason_code = reason_code self.reason_message = reason_message self.snapshot_id = snapshot_id self.snapshot_name = snapshot_name self.status = status def validate(self): if self.labels: for k in self.labels: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.exclude_paths is not None: result['ExcludePaths'] = self.exclude_paths if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.image_id is not None: result['ImageId'] = self.image_id if self.image_url is not None: result['ImageUrl'] = self.image_url if self.instance_id is not None: result['InstanceId'] = self.instance_id result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.snapshot_id is not None: result['SnapshotId'] = self.snapshot_id if self.snapshot_name is not None: result['SnapshotName'] = self.snapshot_name if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('ExcludePaths') is not None: self.exclude_paths = m.get('ExcludePaths') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = ListInstanceSnapshotResponseBodySnapshotsLabels() self.labels.append(temp_model.from_map(k)) if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('SnapshotId') is not None: self.snapshot_id = m.get('SnapshotId') if m.get('SnapshotName') is not None: self.snapshot_name = m.get('SnapshotName') if m.get('Status') is not None: self.status = m.get('Status') return self class ListInstanceSnapshotResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, message: str = None, request_id: str = None, snapshots: List[ListInstanceSnapshotResponseBodySnapshots] = None, success: bool = None, total_count: int = None, ): self.code = code self.http_status_code = http_status_code self.message = message self.request_id = request_id self.snapshots = snapshots self.success = success self.total_count = total_count def validate(self): if self.snapshots: for k in self.snapshots: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id result['Snapshots'] = [] if self.snapshots is not None: for k in self.snapshots: result['Snapshots'].append(k.to_map() if k else None) if self.success is not None: result['Success'] = self.success if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') self.snapshots = [] if m.get('Snapshots') is not None: for k in m.get('Snapshots'): temp_model = ListInstanceSnapshotResponseBodySnapshots() self.snapshots.append(temp_model.from_map(k)) if m.get('Success') is not None: self.success = m.get('Success') if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListInstanceSnapshotResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListInstanceSnapshotResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListInstanceSnapshotResponseBody() self.body = temp_model.from_map(m['body']) return self class ListInstanceStatisticsRequest(TeaModel): def __init__( self, workspace_ids: str = None, ): # This parameter is required. self.workspace_ids = workspace_ids def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.workspace_ids is not None: result['WorkspaceIds'] = self.workspace_ids return result def from_map(self, m: dict = None): m = m or dict() if m.get('WorkspaceIds') is not None: self.workspace_ids = m.get('WorkspaceIds') return self class ListInstanceStatisticsResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, message: str = None, request_id: str = None, statistics: Dict[str, dict] = None, success: bool = None, ): self.code = code self.http_status_code = http_status_code self.message = message self.request_id = request_id self.statistics = statistics self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.statistics is not None: result['Statistics'] = self.statistics if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Statistics') is not None: self.statistics = m.get('Statistics') if m.get('Success') is not None: self.success = m.get('Success') return self class ListInstanceStatisticsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListInstanceStatisticsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListInstanceStatisticsResponseBody() self.body = temp_model.from_map(m['body']) return self class ListInstancesRequestTag(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The tag key. self.key = key # The tag value. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class ListInstancesRequest(TeaModel): def __init__( self, accelerator_type: str = None, accessibility: str = None, create_user_id: str = None, gpu_type: str = None, image_name: str = None, instance_id: str = None, instance_name: str = None, labels: Dict[str, Any] = None, max_cpu: str = None, max_gpu: str = None, max_gpu_memory: str = None, max_memory: str = None, min_cpu: str = None, min_gpu: str = None, min_gpu_memory: str = None, min_memory: str = None, order: str = None, oversold_info: str = None, oversold_type: str = None, page_number: int = None, page_size: int = None, payment_type: str = None, resource_id: str = None, sort_by: str = None, status: str = None, tag: List[ListInstancesRequestTag] = None, workspace_id: str = None, ): # The accelerator type. # # * CPU: Only CPU computing is used. # * GPU: GPUs are used to accelerate computing. self.accelerator_type = accelerator_type # The accessibility. Valid values: # # * PRIVATE (default): The instances are accessible only to you and the administrator of the workspace. # * PUBLIC: The instances are accessible only to all members in the workspace. self.accessibility = accessibility # The UID of the creator. self.create_user_id = create_user_id # The GPU type. self.gpu_type = gpu_type # The image name. self.image_name = image_name # The instance ID. You can call [ListInstances](https://help.aliyun.com/document_detail/470439.html) to obtain the instance ID. self.instance_id = instance_id # The instance name. self.instance_name = instance_name # The labels. A maximum of four labels are supported. self.labels = labels # The maximum number of CPUs. Unit: 0.001 CPU. The value 1000 indicates one CPU. self.max_cpu = max_cpu # The maximum number of GPUs. Unit: 0.001 GPU. The value 1000 indicates one GPU. self.max_gpu = max_gpu # The maximum memory size per GPU card. Unit: GB. self.max_gpu_memory = max_gpu_memory # The maximum memory size. Unit: GB. self.max_memory = max_memory # The minimum number of CPUs. Unit: 0.001 CPU. The value 1000 indicates one CPU. self.min_cpu = min_cpu # The minimum number of GPUs. Unit: 0.001 GPU. The value 1000 indicates one GPU. self.min_gpu = min_gpu # The minimum memory size per GPU card. Unit: GB. self.min_gpu_memory = min_gpu_memory # The minimum memory size. Unit: GB. self.min_memory = min_memory # The order that you use to sort the query results. # # Valid values: # # * ASC # * DESC self.order = order self.oversold_info = oversold_info self.oversold_type = oversold_type # The page number. Pages start from page 1. Default value: 1. self.page_number = page_number # The number of entries per page. self.page_size = page_size # The billing method. # # Valid values: # # * PayAsYouGo # * Subscription self.payment_type = payment_type # The resource group ID. If you leave this parameter empty, the instances in the pay-as-you-go resource group are queried. If you set this parameter to ALL, all instances are queried. self.resource_id = resource_id # The field that you use to sort the query results. # # Valid values: # # * Priority # * GmtCreateTime # * GmtModifiedTime self.sort_by = sort_by # The instance status. # # Valid values: # # * Creating # * SaveFailed # * Stopped # * Failed # * ResourceAllocating # * Stopping # * Updating # * Saving # * Queuing # * Recovering # * Starting # * Running # * Saved # * Deleting # * EnvPreparing self.status = status # The tags. self.tag = tag # The workspace ID. You can call [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html) to obtain the workspace ID. self.workspace_id = workspace_id def validate(self): if self.tag: for k in self.tag: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.create_user_id is not None: result['CreateUserId'] = self.create_user_id if self.gpu_type is not None: result['GpuType'] = self.gpu_type if self.image_name is not None: result['ImageName'] = self.image_name if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.instance_name is not None: result['InstanceName'] = self.instance_name if self.labels is not None: result['Labels'] = self.labels if self.max_cpu is not None: result['MaxCpu'] = self.max_cpu if self.max_gpu is not None: result['MaxGpu'] = self.max_gpu if self.max_gpu_memory is not None: result['MaxGpuMemory'] = self.max_gpu_memory if self.max_memory is not None: result['MaxMemory'] = self.max_memory if self.min_cpu is not None: result['MinCpu'] = self.min_cpu if self.min_gpu is not None: result['MinGpu'] = self.min_gpu if self.min_gpu_memory is not None: result['MinGpuMemory'] = self.min_gpu_memory if self.min_memory is not None: result['MinMemory'] = self.min_memory if self.order is not None: result['Order'] = self.order if self.oversold_info is not None: result['OversoldInfo'] = self.oversold_info if self.oversold_type is not None: result['OversoldType'] = self.oversold_type if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.sort_by is not None: result['SortBy'] = self.sort_by if self.status is not None: result['Status'] = self.status result['Tag'] = [] if self.tag is not None: for k in self.tag: result['Tag'].append(k.to_map() if k else None) if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('CreateUserId') is not None: self.create_user_id = m.get('CreateUserId') if m.get('GpuType') is not None: self.gpu_type = m.get('GpuType') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('InstanceName') is not None: self.instance_name = m.get('InstanceName') if m.get('Labels') is not None: self.labels = m.get('Labels') if m.get('MaxCpu') is not None: self.max_cpu = m.get('MaxCpu') if m.get('MaxGpu') is not None: self.max_gpu = m.get('MaxGpu') if m.get('MaxGpuMemory') is not None: self.max_gpu_memory = m.get('MaxGpuMemory') if m.get('MaxMemory') is not None: self.max_memory = m.get('MaxMemory') if m.get('MinCpu') is not None: self.min_cpu = m.get('MinCpu') if m.get('MinGpu') is not None: self.min_gpu = m.get('MinGpu') if m.get('MinGpuMemory') is not None: self.min_gpu_memory = m.get('MinGpuMemory') if m.get('MinMemory') is not None: self.min_memory = m.get('MinMemory') if m.get('Order') is not None: self.order = m.get('Order') if m.get('OversoldInfo') is not None: self.oversold_info = m.get('OversoldInfo') if m.get('OversoldType') is not None: self.oversold_type = m.get('OversoldType') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') if m.get('Status') is not None: self.status = m.get('Status') self.tag = [] if m.get('Tag') is not None: for k in m.get('Tag'): temp_model = ListInstancesRequestTag() self.tag.append(temp_model.from_map(k)) if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class ListInstancesShrinkRequest(TeaModel): def __init__( self, accelerator_type: str = None, accessibility: str = None, create_user_id: str = None, gpu_type: str = None, image_name: str = None, instance_id: str = None, instance_name: str = None, labels_shrink: str = None, max_cpu: str = None, max_gpu: str = None, max_gpu_memory: str = None, max_memory: str = None, min_cpu: str = None, min_gpu: str = None, min_gpu_memory: str = None, min_memory: str = None, order: str = None, oversold_info: str = None, oversold_type: str = None, page_number: int = None, page_size: int = None, payment_type: str = None, resource_id: str = None, sort_by: str = None, status: str = None, tag_shrink: str = None, workspace_id: str = None, ): # The accelerator type. # # * CPU: Only CPU computing is used. # * GPU: GPUs are used to accelerate computing. self.accelerator_type = accelerator_type # The accessibility. Valid values: # # * PRIVATE (default): The instances are accessible only to you and the administrator of the workspace. # * PUBLIC: The instances are accessible only to all members in the workspace. self.accessibility = accessibility # The UID of the creator. self.create_user_id = create_user_id # The GPU type. self.gpu_type = gpu_type # The image name. self.image_name = image_name # The instance ID. You can call [ListInstances](https://help.aliyun.com/document_detail/470439.html) to obtain the instance ID. self.instance_id = instance_id # The instance name. self.instance_name = instance_name # The labels. A maximum of four labels are supported. self.labels_shrink = labels_shrink # The maximum number of CPUs. Unit: 0.001 CPU. The value 1000 indicates one CPU. self.max_cpu = max_cpu # The maximum number of GPUs. Unit: 0.001 GPU. The value 1000 indicates one GPU. self.max_gpu = max_gpu # The maximum memory size per GPU card. Unit: GB. self.max_gpu_memory = max_gpu_memory # The maximum memory size. Unit: GB. self.max_memory = max_memory # The minimum number of CPUs. Unit: 0.001 CPU. The value 1000 indicates one CPU. self.min_cpu = min_cpu # The minimum number of GPUs. Unit: 0.001 GPU. The value 1000 indicates one GPU. self.min_gpu = min_gpu # The minimum memory size per GPU card. Unit: GB. self.min_gpu_memory = min_gpu_memory # The minimum memory size. Unit: GB. self.min_memory = min_memory # The order that you use to sort the query results. # # Valid values: # # * ASC # * DESC self.order = order self.oversold_info = oversold_info self.oversold_type = oversold_type # The page number. Pages start from page 1. Default value: 1. self.page_number = page_number # The number of entries per page. self.page_size = page_size # The billing method. # # Valid values: # # * PayAsYouGo # * Subscription self.payment_type = payment_type # The resource group ID. If you leave this parameter empty, the instances in the pay-as-you-go resource group are queried. If you set this parameter to ALL, all instances are queried. self.resource_id = resource_id # The field that you use to sort the query results. # # Valid values: # # * Priority # * GmtCreateTime # * GmtModifiedTime self.sort_by = sort_by # The instance status. # # Valid values: # # * Creating # * SaveFailed # * Stopped # * Failed # * ResourceAllocating # * Stopping # * Updating # * Saving # * Queuing # * Recovering # * Starting # * Running # * Saved # * Deleting # * EnvPreparing self.status = status # The tags. self.tag_shrink = tag_shrink # The workspace ID. You can call [ListWorkspaces](https://help.aliyun.com/document_detail/449124.html) to obtain the workspace ID. self.workspace_id = workspace_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.create_user_id is not None: result['CreateUserId'] = self.create_user_id if self.gpu_type is not None: result['GpuType'] = self.gpu_type if self.image_name is not None: result['ImageName'] = self.image_name if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.instance_name is not None: result['InstanceName'] = self.instance_name if self.labels_shrink is not None: result['Labels'] = self.labels_shrink if self.max_cpu is not None: result['MaxCpu'] = self.max_cpu if self.max_gpu is not None: result['MaxGpu'] = self.max_gpu if self.max_gpu_memory is not None: result['MaxGpuMemory'] = self.max_gpu_memory if self.max_memory is not None: result['MaxMemory'] = self.max_memory if self.min_cpu is not None: result['MinCpu'] = self.min_cpu if self.min_gpu is not None: result['MinGpu'] = self.min_gpu if self.min_gpu_memory is not None: result['MinGpuMemory'] = self.min_gpu_memory if self.min_memory is not None: result['MinMemory'] = self.min_memory if self.order is not None: result['Order'] = self.order if self.oversold_info is not None: result['OversoldInfo'] = self.oversold_info if self.oversold_type is not None: result['OversoldType'] = self.oversold_type if self.page_number is not None: result['PageNumber'] = self.page_number if self.page_size is not None: result['PageSize'] = self.page_size if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.sort_by is not None: result['SortBy'] = self.sort_by if self.status is not None: result['Status'] = self.status if self.tag_shrink is not None: result['Tag'] = self.tag_shrink if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('CreateUserId') is not None: self.create_user_id = m.get('CreateUserId') if m.get('GpuType') is not None: self.gpu_type = m.get('GpuType') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('InstanceName') is not None: self.instance_name = m.get('InstanceName') if m.get('Labels') is not None: self.labels_shrink = m.get('Labels') if m.get('MaxCpu') is not None: self.max_cpu = m.get('MaxCpu') if m.get('MaxGpu') is not None: self.max_gpu = m.get('MaxGpu') if m.get('MaxGpuMemory') is not None: self.max_gpu_memory = m.get('MaxGpuMemory') if m.get('MaxMemory') is not None: self.max_memory = m.get('MaxMemory') if m.get('MinCpu') is not None: self.min_cpu = m.get('MinCpu') if m.get('MinGpu') is not None: self.min_gpu = m.get('MinGpu') if m.get('MinGpuMemory') is not None: self.min_gpu_memory = m.get('MinGpuMemory') if m.get('MinMemory') is not None: self.min_memory = m.get('MinMemory') if m.get('Order') is not None: self.order = m.get('Order') if m.get('OversoldInfo') is not None: self.oversold_info = m.get('OversoldInfo') if m.get('OversoldType') is not None: self.oversold_type = m.get('OversoldType') if m.get('PageNumber') is not None: self.page_number = m.get('PageNumber') if m.get('PageSize') is not None: self.page_size = m.get('PageSize') if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('SortBy') is not None: self.sort_by = m.get('SortBy') if m.get('Status') is not None: self.status = m.get('Status') if m.get('Tag') is not None: self.tag_shrink = m.get('Tag') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') return self class ListInstancesResponseBodyInstancesAffinityCPU(TeaModel): def __init__( self, enable: bool = None, ): # Indicates whether the CPU affinity feature was enabled. # # true false self.enable = enable def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.enable is not None: result['Enable'] = self.enable return result def from_map(self, m: dict = None): m = m or dict() if m.get('Enable') is not None: self.enable = m.get('Enable') return self class ListInstancesResponseBodyInstancesAffinity(TeaModel): def __init__( self, cpu: ListInstancesResponseBodyInstancesAffinityCPU = None, ): # The CPU affinity configuration. Only subscription instances that use general-purpose computing resources support CPU affinity configuration. self.cpu = cpu def validate(self): if self.cpu: self.cpu.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: temp_model = ListInstancesResponseBodyInstancesAffinityCPU() self.cpu = temp_model.from_map(m['CPU']) return self class ListInstancesResponseBodyInstancesCloudDisks(TeaModel): def __init__( self, capacity: str = None, mount_path: str = None, path: str = None, sub_type: str = None, ): # The cloud disk capacity. self.capacity = capacity # The mount path of the cloud disk in the container. self.mount_path = mount_path # The directory on the cloud disk that is mounted to the container. self.path = path # The cloud disk type. The value rootfs indicates that the cloud disk is used as the root file system (rootfs). self.sub_type = sub_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.capacity is not None: result['Capacity'] = self.capacity if self.mount_path is not None: result['MountPath'] = self.mount_path if self.path is not None: result['Path'] = self.path if self.sub_type is not None: result['SubType'] = self.sub_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Capacity') is not None: self.capacity = m.get('Capacity') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('Path') is not None: self.path = m.get('Path') if m.get('SubType') is not None: self.sub_type = m.get('SubType') return self class ListInstancesResponseBodyInstancesDatasets(TeaModel): def __init__( self, dataset_id: str = None, dataset_version: str = None, dynamic: bool = None, mount_access: str = None, mount_path: str = None, option_type: str = None, options: str = None, uri: str = None, ): # The dataset ID. self.dataset_id = dataset_id # The dataset version. self.dataset_version = dataset_version # Indicates whether dynamic mounting was enabled. Default value: false. self.dynamic = dynamic # The read and write permissions. Valid values: RW and RO. self.mount_access = mount_access # The mount path in the container. self.mount_path = mount_path # The type of the mount option. self.option_type = option_type # The mount type of the dataset. self.options = options # The dataset URI. self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.dataset_id is not None: result['DatasetId'] = self.dataset_id if self.dataset_version is not None: result['DatasetVersion'] = self.dataset_version if self.dynamic is not None: result['Dynamic'] = self.dynamic if self.mount_access is not None: result['MountAccess'] = self.mount_access if self.mount_path is not None: result['MountPath'] = self.mount_path if self.option_type is not None: result['OptionType'] = self.option_type if self.options is not None: result['Options'] = self.options if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DatasetId') is not None: self.dataset_id = m.get('DatasetId') if m.get('DatasetVersion') is not None: self.dataset_version = m.get('DatasetVersion') if m.get('Dynamic') is not None: self.dynamic = m.get('Dynamic') if m.get('MountAccess') is not None: self.mount_access = m.get('MountAccess') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('OptionType') is not None: self.option_type = m.get('OptionType') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class ListInstancesResponseBodyInstancesIdleInstanceCuller(TeaModel): def __init__( self, cpu_percent_threshold: int = None, gpu_percent_threshold: int = None, idle_time_in_minutes: int = None, instance_id: str = None, max_idle_time_in_minutes: int = None, ): # The CPU utilization threshold. Unit: percentage. Valid values: 1 to 100. If the CPU utilization of the instance is lower than this threshold, the instance is considered idle. self.cpu_percent_threshold = cpu_percent_threshold # The GPU utilization threshold. Unit: percentage. Valid values: 1 to 100. This parameter takes effect only if the instance is of the GPU instance type. If both CPU and GPU utilization is lower than the thresholds, the instance is considered idle. self.gpu_percent_threshold = gpu_percent_threshold # The time duration for which the instance is idle. Unit: minutes. self.idle_time_in_minutes = idle_time_in_minutes # The instance ID. self.instance_id = instance_id # The maximum time duration for which the instance is idle. Unit: minutes. If the time duration for which the instance is idle exceeds this value, the system automatically stops the instance. self.max_idle_time_in_minutes = max_idle_time_in_minutes def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu_percent_threshold is not None: result['CpuPercentThreshold'] = self.cpu_percent_threshold if self.gpu_percent_threshold is not None: result['GpuPercentThreshold'] = self.gpu_percent_threshold if self.idle_time_in_minutes is not None: result['IdleTimeInMinutes'] = self.idle_time_in_minutes if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.max_idle_time_in_minutes is not None: result['MaxIdleTimeInMinutes'] = self.max_idle_time_in_minutes return result def from_map(self, m: dict = None): m = m or dict() if m.get('CpuPercentThreshold') is not None: self.cpu_percent_threshold = m.get('CpuPercentThreshold') if m.get('GpuPercentThreshold') is not None: self.gpu_percent_threshold = m.get('GpuPercentThreshold') if m.get('IdleTimeInMinutes') is not None: self.idle_time_in_minutes = m.get('IdleTimeInMinutes') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('MaxIdleTimeInMinutes') is not None: self.max_idle_time_in_minutes = m.get('MaxIdleTimeInMinutes') return self class ListInstancesResponseBodyInstancesInstanceShutdownTimer(TeaModel): def __init__( self, due_time: str = None, gmt_create_time: str = None, gmt_modified_time: str = None, instance_id: str = None, remaining_time_in_ms: int = None, ): # The scheduled stop time. self.due_time = due_time # The time when the instance was created. self.gmt_create_time = gmt_create_time # The time when the instance was modified. self.gmt_modified_time = gmt_modified_time # The instance ID. self.instance_id = instance_id # The remaining time before the instance is stopped. self.remaining_time_in_ms = remaining_time_in_ms def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.due_time is not None: result['DueTime'] = self.due_time if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.remaining_time_in_ms is not None: result['RemainingTimeInMs'] = self.remaining_time_in_ms return result def from_map(self, m: dict = None): m = m or dict() if m.get('DueTime') is not None: self.due_time = m.get('DueTime') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('RemainingTimeInMs') is not None: self.remaining_time_in_ms = m.get('RemainingTimeInMs') return self class ListInstancesResponseBodyInstancesInstanceSnapshotList(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_modified_time: str = None, image_id: str = None, image_name: str = None, image_url: str = None, reason_code: str = None, reason_message: str = None, repository_url: str = None, status: str = None, ): # The time when the snapshot was created. self.gmt_create_time = gmt_create_time # The time when the snapshot was modified. self.gmt_modified_time = gmt_modified_time # The image ID. self.image_id = image_id # The image name. self.image_name = image_name # The image URL. self.image_url = image_url # The error code of the instance snapshot. self.reason_code = reason_code # The error message of the instance snapshot. self.reason_message = reason_message # The URL of the image repository. self.repository_url = repository_url # The status of the instance snapshot. self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.image_id is not None: result['ImageId'] = self.image_id if self.image_name is not None: result['ImageName'] = self.image_name if self.image_url is not None: result['ImageUrl'] = self.image_url if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.repository_url is not None: result['RepositoryUrl'] = self.repository_url if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RepositoryUrl') is not None: self.repository_url = m.get('RepositoryUrl') if m.get('Status') is not None: self.status = m.get('Status') return self class ListInstancesResponseBodyInstancesLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The custom label key. self.key = key # The custom label value. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class ListInstancesResponseBodyInstancesLatestSnapshot(TeaModel): def __init__( self, gmt_create_time: str = None, gmt_modified_time: str = None, image_id: str = None, image_name: str = None, image_url: str = None, reason_code: str = None, reason_message: str = None, repository_url: str = None, status: str = None, ): # The time when the snapshot was created. self.gmt_create_time = gmt_create_time # The time when the snapshot was modified. self.gmt_modified_time = gmt_modified_time # The image ID. self.image_id = image_id # The image name. self.image_name = image_name # The image URL. self.image_url = image_url # The error code of the instance snapshot. self.reason_code = reason_code # The error message of the instance snapshot. self.reason_message = reason_message # The URL of the image repository. self.repository_url = repository_url # The status of the instance snapshot. self.status = status def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.image_id is not None: result['ImageId'] = self.image_id if self.image_name is not None: result['ImageName'] = self.image_name if self.image_url is not None: result['ImageUrl'] = self.image_url if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.repository_url is not None: result['RepositoryUrl'] = self.repository_url if self.status is not None: result['Status'] = self.status return result def from_map(self, m: dict = None): m = m or dict() if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RepositoryUrl') is not None: self.repository_url = m.get('RepositoryUrl') if m.get('Status') is not None: self.status = m.get('Status') return self class ListInstancesResponseBodyInstancesRequestedResource(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, gputype: str = None, memory: str = None, shared_memory: str = None, ): # The number of CPU cores. self.cpu = cpu # The number of GPUs. self.gpu = gpu # The GPU memory type. self.gputype = gputype # The memory size. self.memory = memory # The size of the shared memory. self.shared_memory = shared_memory def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu if self.gputype is not None: result['GPUType'] = self.gputype if self.memory is not None: result['Memory'] = self.memory if self.shared_memory is not None: result['SharedMemory'] = self.shared_memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('SharedMemory') is not None: self.shared_memory = m.get('SharedMemory') return self class ListInstancesResponseBodyInstancesTags(TeaModel): def __init__( self, tag_key: str = None, tag_value: str = None, ): # The tag key. self.tag_key = tag_key # The tag value. self.tag_value = tag_value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.tag_key is not None: result['TagKey'] = self.tag_key if self.tag_value is not None: result['TagValue'] = self.tag_value return result def from_map(self, m: dict = None): m = m or dict() if m.get('TagKey') is not None: self.tag_key = m.get('TagKey') if m.get('TagValue') is not None: self.tag_value = m.get('TagValue') return self class ListInstancesResponseBodyInstancesUserVpc(TeaModel): def __init__( self, bandwidth_limit: BandwidthLimit = None, default_route: str = None, extended_cidrs: List[str] = None, forward_infos: List[ForwardInfoResponse] = None, security_group_id: str = None, v_switch_id: str = None, vpc_id: str = None, ): self.bandwidth_limit = bandwidth_limit # The default route. self.default_route = default_route # The extended CIDR blocks. self.extended_cidrs = extended_cidrs # The forward information. self.forward_infos = forward_infos # The security group ID. self.security_group_id = security_group_id # The vSwitch ID. self.v_switch_id = v_switch_id # The VPC ID. self.vpc_id = vpc_id def validate(self): if self.bandwidth_limit: self.bandwidth_limit.validate() if self.forward_infos: for k in self.forward_infos: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.bandwidth_limit is not None: result['BandwidthLimit'] = self.bandwidth_limit.to_map() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCIDRs'] = self.extended_cidrs result['ForwardInfos'] = [] if self.forward_infos is not None: for k in self.forward_infos: result['ForwardInfos'].append(k.to_map() if k else None) if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.v_switch_id is not None: result['VSwitchId'] = self.v_switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('BandwidthLimit') is not None: temp_model = BandwidthLimit() self.bandwidth_limit = temp_model.from_map(m['BandwidthLimit']) if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCIDRs') is not None: self.extended_cidrs = m.get('ExtendedCIDRs') self.forward_infos = [] if m.get('ForwardInfos') is not None: for k in m.get('ForwardInfos'): temp_model = ForwardInfoResponse() self.forward_infos.append(temp_model.from_map(k)) if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('VSwitchId') is not None: self.v_switch_id = m.get('VSwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class ListInstancesResponseBodyInstances(TeaModel): def __init__( self, accelerator_type: str = None, accessibility: str = None, accumulated_running_time_in_ms: int = None, affinity: ListInstancesResponseBodyInstancesAffinity = None, cloud_disks: List[ListInstancesResponseBodyInstancesCloudDisks] = None, credential_config: CredentialConfig = None, datasets: List[ListInstancesResponseBodyInstancesDatasets] = None, driver: str = None, dynamic_mount: DynamicMount = None, ecs_spec: str = None, environment_variables: Dict[str, str] = None, gmt_create_time: str = None, gmt_modified_time: str = None, idle_instance_culler: ListInstancesResponseBodyInstancesIdleInstanceCuller = None, image_auth: str = None, image_id: str = None, image_name: str = None, image_url: str = None, instance_id: str = None, instance_name: str = None, instance_shutdown_timer: ListInstancesResponseBodyInstancesInstanceShutdownTimer = None, instance_snapshot_list: List[ListInstancesResponseBodyInstancesInstanceSnapshotList] = None, instance_url: str = None, jupyterlab_url: str = None, labels: List[ListInstancesResponseBodyInstancesLabels] = None, latest_snapshot: ListInstancesResponseBodyInstancesLatestSnapshot = None, oversold_info: str = None, oversold_type: str = None, payment_type: str = None, priority: int = None, reason_code: str = None, reason_message: str = None, requested_resource: ListInstancesResponseBodyInstancesRequestedResource = None, resource_id: str = None, resource_name: str = None, status: str = None, tags: List[ListInstancesResponseBodyInstancesTags] = None, terminal_url: str = None, user_id: str = None, user_name: str = None, user_vpc: ListInstancesResponseBodyInstancesUserVpc = None, web_ideurl: str = None, workspace_id: str = None, workspace_name: str = None, workspace_source: str = None, ): # The accelerator type of the instance. Valid values: # # * CPU # * GPU self.accelerator_type = accelerator_type # The accessibility. Valid values: # # * PRIVATE (default): The instances are accessible only to you and the administrator of the workspace. # * PUBLIC: The instances are accessible only to all members in the workspace. self.accessibility = accessibility # The accumulated running duration. Unit: milliseconds. self.accumulated_running_time_in_ms = accumulated_running_time_in_ms # The affinity configuration. self.affinity = affinity # The cloud disks of the instance. self.cloud_disks = cloud_disks # The credential configuration. self.credential_config = credential_config # The datasets. self.datasets = datasets # The NVIDIA driver configuration. self.driver = driver # The dynamic mount configurations. self.dynamic_mount = dynamic_mount # The ECS instance type of the instance. self.ecs_spec = ecs_spec # The environment variables. self.environment_variables = environment_variables # The time when the instance was created. self.gmt_create_time = gmt_create_time # The time when the instance was modified. self.gmt_modified_time = gmt_modified_time # The rule for stopping idle instances. self.idle_instance_culler = idle_instance_culler # The Base64-encoded account and password for the user\\"s private image. The password will be hidden. self.image_auth = image_auth # The image ID. self.image_id = image_id # The image name. self.image_name = image_name # The image address. self.image_url = image_url # The instance ID. self.instance_id = instance_id # The instance name. self.instance_name = instance_name # The scheduled stop task. self.instance_shutdown_timer = instance_shutdown_timer # The instance snapshots. self.instance_snapshot_list = instance_snapshot_list # The instance URL. self.instance_url = instance_url # The JupyterLab URL. self.jupyterlab_url = jupyterlab_url # The custom labels. self.labels = labels # The user image that was latest saved. self.latest_snapshot = latest_snapshot self.oversold_info = oversold_info self.oversold_type = oversold_type # The billing method. Valid values: # # * PayAsYouGo # * Subscription self.payment_type = payment_type # The priority based on which resources are allocated to instances. Resources are preferentially allocated to instances with higher priorities. self.priority = priority # The error code of the instance. self.reason_code = reason_code # The cause of the instance error. self.reason_message = reason_message # The resource configurations. self.requested_resource = requested_resource # The resource ID. This parameter is valid only if you set PaymentType to Subscription. self.resource_id = resource_id # The specifications. # # * In pay-as-you-go scenarios, the value is the specifications of the purchased ECS instance type. # * In subscription scenarios, the value is the requested number of CPU cores and memory size. self.resource_name = resource_name # The instance status. self.status = status # The tags. self.tags = tags # The terminal URL. self.terminal_url = terminal_url # The user ID. self.user_id = user_id # The username. self.user_name = user_name # The virtual private cloud (VPC) configurations. self.user_vpc = user_vpc # The Web IDE URL. self.web_ideurl = web_ideurl # The workspace ID. self.workspace_id = workspace_id # The workspace name. self.workspace_name = workspace_name # The storage for the workspace. If you leave this parameter empty, the workspace uses File Storage NAS (NAS) storage, cloud disks, or local disks in sequence. self.workspace_source = workspace_source def validate(self): if self.affinity: self.affinity.validate() if self.cloud_disks: for k in self.cloud_disks: if k: k.validate() if self.credential_config: self.credential_config.validate() if self.datasets: for k in self.datasets: if k: k.validate() if self.dynamic_mount: self.dynamic_mount.validate() if self.idle_instance_culler: self.idle_instance_culler.validate() if self.instance_shutdown_timer: self.instance_shutdown_timer.validate() if self.instance_snapshot_list: for k in self.instance_snapshot_list: if k: k.validate() if self.labels: for k in self.labels: if k: k.validate() if self.latest_snapshot: self.latest_snapshot.validate() if self.requested_resource: self.requested_resource.validate() if self.tags: for k in self.tags: if k: k.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accelerator_type is not None: result['AcceleratorType'] = self.accelerator_type if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.accumulated_running_time_in_ms is not None: result['AccumulatedRunningTimeInMs'] = self.accumulated_running_time_in_ms if self.affinity is not None: result['Affinity'] = self.affinity.to_map() result['CloudDisks'] = [] if self.cloud_disks is not None: for k in self.cloud_disks: result['CloudDisks'].append(k.to_map() if k else None) if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['Datasets'] = [] if self.datasets is not None: for k in self.datasets: result['Datasets'].append(k.to_map() if k else None) if self.driver is not None: result['Driver'] = self.driver if self.dynamic_mount is not None: result['DynamicMount'] = self.dynamic_mount.to_map() if self.ecs_spec is not None: result['EcsSpec'] = self.ecs_spec if self.environment_variables is not None: result['EnvironmentVariables'] = self.environment_variables if self.gmt_create_time is not None: result['GmtCreateTime'] = self.gmt_create_time if self.gmt_modified_time is not None: result['GmtModifiedTime'] = self.gmt_modified_time if self.idle_instance_culler is not None: result['IdleInstanceCuller'] = self.idle_instance_culler.to_map() if self.image_auth is not None: result['ImageAuth'] = self.image_auth if self.image_id is not None: result['ImageId'] = self.image_id if self.image_name is not None: result['ImageName'] = self.image_name if self.image_url is not None: result['ImageUrl'] = self.image_url if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.instance_name is not None: result['InstanceName'] = self.instance_name if self.instance_shutdown_timer is not None: result['InstanceShutdownTimer'] = self.instance_shutdown_timer.to_map() result['InstanceSnapshotList'] = [] if self.instance_snapshot_list is not None: for k in self.instance_snapshot_list: result['InstanceSnapshotList'].append(k.to_map() if k else None) if self.instance_url is not None: result['InstanceUrl'] = self.instance_url if self.jupyterlab_url is not None: result['JupyterlabUrl'] = self.jupyterlab_url result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) if self.latest_snapshot is not None: result['LatestSnapshot'] = self.latest_snapshot.to_map() if self.oversold_info is not None: result['OversoldInfo'] = self.oversold_info if self.oversold_type is not None: result['OversoldType'] = self.oversold_type if self.payment_type is not None: result['PaymentType'] = self.payment_type if self.priority is not None: result['Priority'] = self.priority if self.reason_code is not None: result['ReasonCode'] = self.reason_code if self.reason_message is not None: result['ReasonMessage'] = self.reason_message if self.requested_resource is not None: result['RequestedResource'] = self.requested_resource.to_map() if self.resource_id is not None: result['ResourceId'] = self.resource_id if self.resource_name is not None: result['ResourceName'] = self.resource_name if self.status is not None: result['Status'] = self.status result['Tags'] = [] if self.tags is not None: for k in self.tags: result['Tags'].append(k.to_map() if k else None) if self.terminal_url is not None: result['TerminalUrl'] = self.terminal_url if self.user_id is not None: result['UserId'] = self.user_id if self.user_name is not None: result['UserName'] = self.user_name if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.web_ideurl is not None: result['WebIDEUrl'] = self.web_ideurl if self.workspace_id is not None: result['WorkspaceId'] = self.workspace_id if self.workspace_name is not None: result['WorkspaceName'] = self.workspace_name if self.workspace_source is not None: result['WorkspaceSource'] = self.workspace_source return result def from_map(self, m: dict = None): m = m or dict() if m.get('AcceleratorType') is not None: self.accelerator_type = m.get('AcceleratorType') if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('AccumulatedRunningTimeInMs') is not None: self.accumulated_running_time_in_ms = m.get('AccumulatedRunningTimeInMs') if m.get('Affinity') is not None: temp_model = ListInstancesResponseBodyInstancesAffinity() self.affinity = temp_model.from_map(m['Affinity']) self.cloud_disks = [] if m.get('CloudDisks') is not None: for k in m.get('CloudDisks'): temp_model = ListInstancesResponseBodyInstancesCloudDisks() self.cloud_disks.append(temp_model.from_map(k)) if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.datasets = [] if m.get('Datasets') is not None: for k in m.get('Datasets'): temp_model = ListInstancesResponseBodyInstancesDatasets() self.datasets.append(temp_model.from_map(k)) if m.get('Driver') is not None: self.driver = m.get('Driver') if m.get('DynamicMount') is not None: temp_model = DynamicMount() self.dynamic_mount = temp_model.from_map(m['DynamicMount']) if m.get('EcsSpec') is not None: self.ecs_spec = m.get('EcsSpec') if m.get('EnvironmentVariables') is not None: self.environment_variables = m.get('EnvironmentVariables') if m.get('GmtCreateTime') is not None: self.gmt_create_time = m.get('GmtCreateTime') if m.get('GmtModifiedTime') is not None: self.gmt_modified_time = m.get('GmtModifiedTime') if m.get('IdleInstanceCuller') is not None: temp_model = ListInstancesResponseBodyInstancesIdleInstanceCuller() self.idle_instance_culler = temp_model.from_map(m['IdleInstanceCuller']) if m.get('ImageAuth') is not None: self.image_auth = m.get('ImageAuth') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageName') is not None: self.image_name = m.get('ImageName') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('InstanceName') is not None: self.instance_name = m.get('InstanceName') if m.get('InstanceShutdownTimer') is not None: temp_model = ListInstancesResponseBodyInstancesInstanceShutdownTimer() self.instance_shutdown_timer = temp_model.from_map(m['InstanceShutdownTimer']) self.instance_snapshot_list = [] if m.get('InstanceSnapshotList') is not None: for k in m.get('InstanceSnapshotList'): temp_model = ListInstancesResponseBodyInstancesInstanceSnapshotList() self.instance_snapshot_list.append(temp_model.from_map(k)) if m.get('InstanceUrl') is not None: self.instance_url = m.get('InstanceUrl') if m.get('JupyterlabUrl') is not None: self.jupyterlab_url = m.get('JupyterlabUrl') self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = ListInstancesResponseBodyInstancesLabels() self.labels.append(temp_model.from_map(k)) if m.get('LatestSnapshot') is not None: temp_model = ListInstancesResponseBodyInstancesLatestSnapshot() self.latest_snapshot = temp_model.from_map(m['LatestSnapshot']) if m.get('OversoldInfo') is not None: self.oversold_info = m.get('OversoldInfo') if m.get('OversoldType') is not None: self.oversold_type = m.get('OversoldType') if m.get('PaymentType') is not None: self.payment_type = m.get('PaymentType') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('ReasonCode') is not None: self.reason_code = m.get('ReasonCode') if m.get('ReasonMessage') is not None: self.reason_message = m.get('ReasonMessage') if m.get('RequestedResource') is not None: temp_model = ListInstancesResponseBodyInstancesRequestedResource() self.requested_resource = temp_model.from_map(m['RequestedResource']) if m.get('ResourceId') is not None: self.resource_id = m.get('ResourceId') if m.get('ResourceName') is not None: self.resource_name = m.get('ResourceName') if m.get('Status') is not None: self.status = m.get('Status') self.tags = [] if m.get('Tags') is not None: for k in m.get('Tags'): temp_model = ListInstancesResponseBodyInstancesTags() self.tags.append(temp_model.from_map(k)) if m.get('TerminalUrl') is not None: self.terminal_url = m.get('TerminalUrl') if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('UserName') is not None: self.user_name = m.get('UserName') if m.get('UserVpc') is not None: temp_model = ListInstancesResponseBodyInstancesUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('WebIDEUrl') is not None: self.web_ideurl = m.get('WebIDEUrl') if m.get('WorkspaceId') is not None: self.workspace_id = m.get('WorkspaceId') if m.get('WorkspaceName') is not None: self.workspace_name = m.get('WorkspaceName') if m.get('WorkspaceSource') is not None: self.workspace_source = m.get('WorkspaceSource') return self class ListInstancesResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instances: List[ListInstancesResponseBodyInstances] = None, message: str = None, request_id: str = None, success: bool = None, total_count: int = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The instances returned on this page. self.instances = instances # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. # # * true # * false self.success = success # The total number of instances. self.total_count = total_count def validate(self): if self.instances: for k in self.instances: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code result['Instances'] = [] if self.instances is not None: for k in self.instances: result['Instances'].append(k.to_map() if k else None) if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success if self.total_count is not None: result['TotalCount'] = self.total_count return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') self.instances = [] if m.get('Instances') is not None: for k in m.get('Instances'): temp_model = ListInstancesResponseBodyInstances() self.instances.append(temp_model.from_map(k)) if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') if m.get('TotalCount') is not None: self.total_count = m.get('TotalCount') return self class ListInstancesResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: ListInstancesResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = ListInstancesResponseBody() self.body = temp_model.from_map(m['body']) return self class StartInstanceResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): self.code = code self.http_status_code = http_status_code self.instance_id = instance_id self.message = message self.request_id = request_id self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class StartInstanceResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: StartInstanceResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = StartInstanceResponseBody() self.body = temp_model.from_map(m['body']) return self class StopInstanceRequest(TeaModel): def __init__( self, save_image: bool = None, ): self.save_image = save_image def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.save_image is not None: result['SaveImage'] = self.save_image return result def from_map(self, m: dict = None): m = m or dict() if m.get('SaveImage') is not None: self.save_image = m.get('SaveImage') return self class StopInstanceResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): self.code = code self.http_status_code = http_status_code self.instance_id = instance_id self.message = message self.request_id = request_id self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class StopInstanceResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: StopInstanceResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = StopInstanceResponseBody() self.body = temp_model.from_map(m['body']) return self class UpdateInstanceRequestAffinityCPU(TeaModel): def __init__( self, enable: bool = None, ): # Specifies whether CPU affinity is enabled. # # * true # * false self.enable = enable def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.enable is not None: result['Enable'] = self.enable return result def from_map(self, m: dict = None): m = m or dict() if m.get('Enable') is not None: self.enable = m.get('Enable') return self class UpdateInstanceRequestAffinity(TeaModel): def __init__( self, cpu: UpdateInstanceRequestAffinityCPU = None, ): # The CPU affinity configuration. Only subscription instances that use general-purpose computing resources support CPU affinity configuration. self.cpu = cpu def validate(self): if self.cpu: self.cpu.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: temp_model = UpdateInstanceRequestAffinityCPU() self.cpu = temp_model.from_map(m['CPU']) return self class UpdateInstanceRequestCloudDisks(TeaModel): def __init__( self, capacity: str = None, sub_type: str = None, ): # If **Resource Type** is **Public Resource** or if **Resource Quota** is subscription-based general-purpose computing resources (CPU cores ≥ 2 and memory ≥ 4 GB, or configured with GPU): # # Each instance has a free system disk quota of 100 GiB for persistent storage. **If the DSW instance is stopped and not launched for more than 15 days, the disk is cleared**. The disk can be expanded. For specific pricing, refer to the console. # # **\ # # **Warning**\ # # * After the expansion, you cannot reduce the storage space. Proceed with caution. # # * After the expansion, the disk is not cleared if the instance is stopped for more than 15 days. However, it will continue to incur fees. # # * If you delete the instance, the system disk is also released and the data stored in the disk is deleted. Make sure that you have backed up your data before you delete the instance. # # If you need persistent storage, you can **mount a dataset** or add the OSS, NAS, or CPFS path to the **storage path**. self.capacity = capacity # Disk type: # # * rootfs: Mounts the disk as a system disk. The system environment is stored on the disk. self.sub_type = sub_type def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.capacity is not None: result['Capacity'] = self.capacity if self.sub_type is not None: result['SubType'] = self.sub_type return result def from_map(self, m: dict = None): m = m or dict() if m.get('Capacity') is not None: self.capacity = m.get('Capacity') if m.get('SubType') is not None: self.sub_type = m.get('SubType') return self class UpdateInstanceRequestDatasets(TeaModel): def __init__( self, dataset_id: str = None, dataset_version: str = None, dynamic: bool = None, mount_access: str = None, mount_path: str = None, option_type: str = None, options: str = None, uri: str = None, ): # The dataset ID. If the dataset is read-only, you cannot change the dataset pemission from read-only to read and write by using MountAccess. # # You can call [ListDatasets](https://help.aliyun.com/document_detail/457222.html) to obtain the dataset ID. If you configure the dataset ID, you cannot configure the dataset URI. self.dataset_id = dataset_id # The dataset version. You must also configure DatasetId. If you leave this parameter empty, the value v1 is used by default. self.dataset_version = dataset_version # Specifies whether dynamic mounting is enabled. Default value: false. # # * Currently, only instances using general-purpose computing resources are supported. # * Currently, only OSS datasets are supported. The mounted datasets are read-only. # * The MountPath of the dynamically mounted dataset must be a subpath of the root path. Example: /mnt/dynamic/data1/\ # * A dynamically mounted dataset must be after non-dynamic datasets. self.dynamic = dynamic # The read and write permissions of the dataset. If the dataset is read-only, it cannot be changed to read and write. self.mount_access = mount_access # The mount path of the dataset. self.mount_path = mount_path # The mount type. You cannot specify Options at the same time. This is deprecated, you can use Options instead. self.option_type = option_type # The custom dataset mount options. Only OSS is supported. You cannot specify OptionType at the same time. For more information, see [DSW mount configurations](https://www.alibabacloud.com/help/en/pai/user-guide/read-and-write-dataset-data). self.options = options # The URI of the storage service directory, which can be directly mounted. This parameter is mutually exclusive with DatasetId. # # URI formats of different types of storage: # # * OSS: oss://bucket-name.oss-cn-shanghai-internal.aliyuncs.com/data/path/\ # * NAS: nas://29\\*\\*d-b12\\*\\*\\*\\*446.cn-hangzhou.nas.aliyuncs.com/data/path/\ # * Extreme NAS: nas://29\\*\\*\\*\\*123-y\\*\\*r.cn-hangzhou.extreme.nas.aliyuncs.com/data/path/\ # * CPFS: cpfs://cpfs-213\\*\\*\\*\\*87.cn-wulanchabu/ptc-292\\*\\*\\*\\*\\*cbb/exp-290\\*\\*\\*\\*\\*\\*\\*\\*03e/data/path/\ # * Lingjun CPFS: bmcpfs://cpfs-290\\*\\*\\*\\*\\*\\*foflh-vpc-x\\*\\*\\*\\*8r.cn-wulanchabu.cpfs.aliyuncs.com/data/path/\ self.uri = uri def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.dataset_id is not None: result['DatasetId'] = self.dataset_id if self.dataset_version is not None: result['DatasetVersion'] = self.dataset_version if self.dynamic is not None: result['Dynamic'] = self.dynamic if self.mount_access is not None: result['MountAccess'] = self.mount_access if self.mount_path is not None: result['MountPath'] = self.mount_path if self.option_type is not None: result['OptionType'] = self.option_type if self.options is not None: result['Options'] = self.options if self.uri is not None: result['Uri'] = self.uri return result def from_map(self, m: dict = None): m = m or dict() if m.get('DatasetId') is not None: self.dataset_id = m.get('DatasetId') if m.get('DatasetVersion') is not None: self.dataset_version = m.get('DatasetVersion') if m.get('Dynamic') is not None: self.dynamic = m.get('Dynamic') if m.get('MountAccess') is not None: self.mount_access = m.get('MountAccess') if m.get('MountPath') is not None: self.mount_path = m.get('MountPath') if m.get('OptionType') is not None: self.option_type = m.get('OptionType') if m.get('Options') is not None: self.options = m.get('Options') if m.get('Uri') is not None: self.uri = m.get('Uri') return self class UpdateInstanceRequestRequestedResource(TeaModel): def __init__( self, cpu: str = None, gpu: str = None, gputype: str = None, memory: str = None, shared_memory: str = None, ): # The number of vCPU cores. self.cpu = cpu # The number of GPUs. self.gpu = gpu # The GPU type. self.gputype = gputype # The memory size. Unit: GB. self.memory = memory # The shared memory size. Unit: GB. self.shared_memory = shared_memory def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.cpu is not None: result['CPU'] = self.cpu if self.gpu is not None: result['GPU'] = self.gpu if self.gputype is not None: result['GPUType'] = self.gputype if self.memory is not None: result['Memory'] = self.memory if self.shared_memory is not None: result['SharedMemory'] = self.shared_memory return result def from_map(self, m: dict = None): m = m or dict() if m.get('CPU') is not None: self.cpu = m.get('CPU') if m.get('GPU') is not None: self.gpu = m.get('GPU') if m.get('GPUType') is not None: self.gputype = m.get('GPUType') if m.get('Memory') is not None: self.memory = m.get('Memory') if m.get('SharedMemory') is not None: self.shared_memory = m.get('SharedMemory') return self class UpdateInstanceRequestUserVpc(TeaModel): def __init__( self, bandwidth_limit: BandwidthLimit = None, default_route: str = None, extended_cidrs: List[str] = None, forward_infos: List[ForwardInfo] = None, security_group_id: str = None, v_switch_id: str = None, vpc_id: str = None, ): self.bandwidth_limit = bandwidth_limit # The default route. Valid values: # # * eth0: The default network interface is used to access the Internet through the public gateway. # * eth1: The user\\"s Elastic Network Interface is used to access the Internet through the private gateway. self.default_route = default_route # The extended CIDR blocks. # # * If you leave VSwitchId empty, this parameter is not required and the system automatically obtains all CIDR blocks in the VPC. # * If VSwitchId is not empty, this parameter is required. Specify all CIDR blocks in the VPC. self.extended_cidrs = extended_cidrs # The forward configuration of the instance. self.forward_infos = forward_infos # The security group ID. self.security_group_id = security_group_id # The vSwitch ID. self.v_switch_id = v_switch_id # The VPC ID. self.vpc_id = vpc_id def validate(self): if self.bandwidth_limit: self.bandwidth_limit.validate() if self.forward_infos: for k in self.forward_infos: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.bandwidth_limit is not None: result['BandwidthLimit'] = self.bandwidth_limit.to_map() if self.default_route is not None: result['DefaultRoute'] = self.default_route if self.extended_cidrs is not None: result['ExtendedCIDRs'] = self.extended_cidrs result['ForwardInfos'] = [] if self.forward_infos is not None: for k in self.forward_infos: result['ForwardInfos'].append(k.to_map() if k else None) if self.security_group_id is not None: result['SecurityGroupId'] = self.security_group_id if self.v_switch_id is not None: result['VSwitchId'] = self.v_switch_id if self.vpc_id is not None: result['VpcId'] = self.vpc_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('BandwidthLimit') is not None: temp_model = BandwidthLimit() self.bandwidth_limit = temp_model.from_map(m['BandwidthLimit']) if m.get('DefaultRoute') is not None: self.default_route = m.get('DefaultRoute') if m.get('ExtendedCIDRs') is not None: self.extended_cidrs = m.get('ExtendedCIDRs') self.forward_infos = [] if m.get('ForwardInfos') is not None: for k in m.get('ForwardInfos'): temp_model = ForwardInfo() self.forward_infos.append(temp_model.from_map(k)) if m.get('SecurityGroupId') is not None: self.security_group_id = m.get('SecurityGroupId') if m.get('VSwitchId') is not None: self.v_switch_id = m.get('VSwitchId') if m.get('VpcId') is not None: self.vpc_id = m.get('VpcId') return self class UpdateInstanceRequest(TeaModel): def __init__( self, accessibility: str = None, affinity: UpdateInstanceRequestAffinity = None, cloud_disks: List[UpdateInstanceRequestCloudDisks] = None, credential_config: CredentialConfig = None, datasets: List[UpdateInstanceRequestDatasets] = None, disassociate_credential: bool = None, disassociate_datasets: bool = None, disassociate_driver: bool = None, disassociate_forward_infos: bool = None, disassociate_vpc: bool = None, driver: str = None, dynamic_mount: DynamicMount = None, ecs_spec: str = None, image_auth: str = None, image_id: str = None, image_url: str = None, instance_name: str = None, priority: int = None, requested_resource: UpdateInstanceRequestRequestedResource = None, user_id: str = None, user_vpc: UpdateInstanceRequestUserVpc = None, workspace_source: str = None, ): # The visibility of the instance. # # Valid values: # # * PUBLIC: Accessible to all members in the workspace. # * PRIVATE: Accessible only to you and the administrator of the workspace. self.accessibility = accessibility # The affinity configuration. self.affinity = affinity # The cloud disks. self.cloud_disks = cloud_disks # The credential configuration. self.credential_config = credential_config # The datasets. self.datasets = datasets # Specifies whether to delete the credential injection information. self.disassociate_credential = disassociate_credential # Specifies whether to delete the associated datasets. # # * true # * false self.disassociate_datasets = disassociate_datasets # Specifies whether to delete the NVIDIA driver configuration. self.disassociate_driver = disassociate_driver # Specifies whether to delete the associated forward information. self.disassociate_forward_infos = disassociate_forward_infos # Specifies whether to delete the associated user VPC. self.disassociate_vpc = disassociate_vpc # The NVIDIA driver configuration. self.driver = driver # The dynamic mount configuration. self.dynamic_mount = dynamic_mount # The ECS instance type of the instance. You can call [ListEcsSpecs](https://help.aliyun.com/document_detail/470423.html) to obtain the ECS instance type. self.ecs_spec = ecs_spec # The Base64-encoded account and password for the user‘s private image. The password will be hidden. self.image_auth = image_auth # The image ID. You can call [ListImages](https://help.aliyun.com/document_detail/449118.html) to obtain the image ID. self.image_id = image_id # The image address. You can call [ListImages](https://help.aliyun.com/document_detail/449118.html) to obtain the image address. self.image_url = image_url # The instance name. Format requirements: # # * The name can contain only letters, digits, and underscores (_). # * The name can be up to 27 characters in length. self.instance_name = instance_name # The priority based on which resources are allocated to instances. Valid values: 1 to 9. # # * 1: the lowest priority. # * 9 is the highest priority. self.priority = priority # The resource configurations. self.requested_resource = requested_resource # the User ID of the instance. self.user_id = user_id # The virtual private cloud (VPC) configurations. self.user_vpc = user_vpc # Specifies the storage corresponding to the working directory. You can mount disks or datasets to /mnt/workspace at the same time. OSS datasets and dynamically mounted datasets are not supported. # # Valid values: # # * rootfsCloudDisk: Mount disk to the working directory. # * Mount path of the dataset, such as /mnt/data: Datasets in URI format only support this method. # * Dataset ID, such as d-vsqjvs\\*\\*\\*\\*rp5l206u: If a single dataset is mounted to multiple paths, the first path is selected. We recommend that you do not use this method, use the mount path instead. # # If you leave this parameter empty: # # * If the instance uses cloud disks, cloud disks are selected by default. # * if no disks are available, the first NAS or CPFS dataset is selected as the working directory. # * If no disk, NAS, or CPFS datasets is available, the host space is used. self.workspace_source = workspace_source def validate(self): if self.affinity: self.affinity.validate() if self.cloud_disks: for k in self.cloud_disks: if k: k.validate() if self.credential_config: self.credential_config.validate() if self.datasets: for k in self.datasets: if k: k.validate() if self.dynamic_mount: self.dynamic_mount.validate() if self.requested_resource: self.requested_resource.validate() if self.user_vpc: self.user_vpc.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.accessibility is not None: result['Accessibility'] = self.accessibility if self.affinity is not None: result['Affinity'] = self.affinity.to_map() result['CloudDisks'] = [] if self.cloud_disks is not None: for k in self.cloud_disks: result['CloudDisks'].append(k.to_map() if k else None) if self.credential_config is not None: result['CredentialConfig'] = self.credential_config.to_map() result['Datasets'] = [] if self.datasets is not None: for k in self.datasets: result['Datasets'].append(k.to_map() if k else None) if self.disassociate_credential is not None: result['DisassociateCredential'] = self.disassociate_credential if self.disassociate_datasets is not None: result['DisassociateDatasets'] = self.disassociate_datasets if self.disassociate_driver is not None: result['DisassociateDriver'] = self.disassociate_driver if self.disassociate_forward_infos is not None: result['DisassociateForwardInfos'] = self.disassociate_forward_infos if self.disassociate_vpc is not None: result['DisassociateVpc'] = self.disassociate_vpc if self.driver is not None: result['Driver'] = self.driver if self.dynamic_mount is not None: result['DynamicMount'] = self.dynamic_mount.to_map() if self.ecs_spec is not None: result['EcsSpec'] = self.ecs_spec if self.image_auth is not None: result['ImageAuth'] = self.image_auth if self.image_id is not None: result['ImageId'] = self.image_id if self.image_url is not None: result['ImageUrl'] = self.image_url if self.instance_name is not None: result['InstanceName'] = self.instance_name if self.priority is not None: result['Priority'] = self.priority if self.requested_resource is not None: result['RequestedResource'] = self.requested_resource.to_map() if self.user_id is not None: result['UserId'] = self.user_id if self.user_vpc is not None: result['UserVpc'] = self.user_vpc.to_map() if self.workspace_source is not None: result['WorkspaceSource'] = self.workspace_source return result def from_map(self, m: dict = None): m = m or dict() if m.get('Accessibility') is not None: self.accessibility = m.get('Accessibility') if m.get('Affinity') is not None: temp_model = UpdateInstanceRequestAffinity() self.affinity = temp_model.from_map(m['Affinity']) self.cloud_disks = [] if m.get('CloudDisks') is not None: for k in m.get('CloudDisks'): temp_model = UpdateInstanceRequestCloudDisks() self.cloud_disks.append(temp_model.from_map(k)) if m.get('CredentialConfig') is not None: temp_model = CredentialConfig() self.credential_config = temp_model.from_map(m['CredentialConfig']) self.datasets = [] if m.get('Datasets') is not None: for k in m.get('Datasets'): temp_model = UpdateInstanceRequestDatasets() self.datasets.append(temp_model.from_map(k)) if m.get('DisassociateCredential') is not None: self.disassociate_credential = m.get('DisassociateCredential') if m.get('DisassociateDatasets') is not None: self.disassociate_datasets = m.get('DisassociateDatasets') if m.get('DisassociateDriver') is not None: self.disassociate_driver = m.get('DisassociateDriver') if m.get('DisassociateForwardInfos') is not None: self.disassociate_forward_infos = m.get('DisassociateForwardInfos') if m.get('DisassociateVpc') is not None: self.disassociate_vpc = m.get('DisassociateVpc') if m.get('Driver') is not None: self.driver = m.get('Driver') if m.get('DynamicMount') is not None: temp_model = DynamicMount() self.dynamic_mount = temp_model.from_map(m['DynamicMount']) if m.get('EcsSpec') is not None: self.ecs_spec = m.get('EcsSpec') if m.get('ImageAuth') is not None: self.image_auth = m.get('ImageAuth') if m.get('ImageId') is not None: self.image_id = m.get('ImageId') if m.get('ImageUrl') is not None: self.image_url = m.get('ImageUrl') if m.get('InstanceName') is not None: self.instance_name = m.get('InstanceName') if m.get('Priority') is not None: self.priority = m.get('Priority') if m.get('RequestedResource') is not None: temp_model = UpdateInstanceRequestRequestedResource() self.requested_resource = temp_model.from_map(m['RequestedResource']) if m.get('UserId') is not None: self.user_id = m.get('UserId') if m.get('UserVpc') is not None: temp_model = UpdateInstanceRequestUserVpc() self.user_vpc = temp_model.from_map(m['UserVpc']) if m.get('WorkspaceSource') is not None: self.workspace_source = m.get('WorkspaceSource') return self class UpdateInstanceResponseBody(TeaModel): def __init__( self, code: str = None, http_status_code: int = None, instance_id: str = None, message: str = None, request_id: str = None, success: bool = None, ): # The status code. Valid values: # # * InternalError: an internal error. All errors, except for parameter validation errors, are classified as internal errors. # * ValidationError: a parameter validation error. self.code = code # The HTTP status code. Valid values: # # * 400 # * 404 self.http_status_code = http_status_code # The instance ID. self.instance_id = instance_id # The response message. self.message = message # The request ID. self.request_id = request_id # Indicates whether the request was successful. Valid values: # # * true # * false self.success = success def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.code is not None: result['Code'] = self.code if self.http_status_code is not None: result['HttpStatusCode'] = self.http_status_code if self.instance_id is not None: result['InstanceId'] = self.instance_id if self.message is not None: result['Message'] = self.message if self.request_id is not None: result['RequestId'] = self.request_id if self.success is not None: result['Success'] = self.success return result def from_map(self, m: dict = None): m = m or dict() if m.get('Code') is not None: self.code = m.get('Code') if m.get('HttpStatusCode') is not None: self.http_status_code = m.get('HttpStatusCode') if m.get('InstanceId') is not None: self.instance_id = m.get('InstanceId') if m.get('Message') is not None: self.message = m.get('Message') if m.get('RequestId') is not None: self.request_id = m.get('RequestId') if m.get('Success') is not None: self.success = m.get('Success') return self class UpdateInstanceResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: UpdateInstanceResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = UpdateInstanceResponseBody() self.body = temp_model.from_map(m['body']) return self class UpdateInstanceLabelsRequestLabels(TeaModel): def __init__( self, key: str = None, value: str = None, ): # The key of the custom tag. # # This parameter is required. self.key = key # The value of the custom tag. # # This parameter is required. self.value = value def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.key is not None: result['Key'] = self.key if self.value is not None: result['Value'] = self.value return result def from_map(self, m: dict = None): m = m or dict() if m.get('Key') is not None: self.key = m.get('Key') if m.get('Value') is not None: self.value = m.get('Value') return self class UpdateInstanceLabelsRequest(TeaModel): def __init__( self, labels: List[UpdateInstanceLabelsRequestLabels] = None, ): # The tags that you want to update. # # This parameter is required. self.labels = labels def validate(self): if self.labels: for k in self.labels: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() result['Labels'] = [] if self.labels is not None: for k in self.labels: result['Labels'].append(k.to_map() if k else None) return result def from_map(self, m: dict = None): m = m or dict() self.labels = [] if m.get('Labels') is not None: for k in m.get('Labels'): temp_model = UpdateInstanceLabelsRequestLabels() self.labels.append(temp_model.from_map(k)) return self class UpdateInstanceLabelsResponseBody(TeaModel): def __init__( self, request_id: str = None, ): # The request ID. self.request_id = request_id def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.request_id is not None: result['RequestId'] = self.request_id return result def from_map(self, m: dict = None): m = m or dict() if m.get('RequestId') is not None: self.request_id = m.get('RequestId') return self class UpdateInstanceLabelsResponse(TeaModel): def __init__( self, headers: Dict[str, str] = None, status_code: int = None, body: UpdateInstanceLabelsResponseBody = None, ): self.headers = headers self.status_code = status_code self.body = body def validate(self): if self.body: self.body.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.status_code is not None: result['statusCode'] = self.status_code if self.body is not None: result['body'] = self.body.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('statusCode') is not None: self.status_code = m.get('statusCode') if m.get('body') is not None: temp_model = UpdateInstanceLabelsResponseBody() self.body = temp_model.from_map(m['body']) return self