tencent_cloud_sdk/services/cvm/
instance.rs

1//! 实例相关接口
2//! 
3//! 包含创建实例接口和基础数据结构
4
5use serde::{Deserialize, Serialize};
6
7use crate::client::TencentCloudClient;
8use crate::error::Result;
9
10/// 实例计费类型
11#[derive(Debug, Clone, Serialize, Deserialize)]
12#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
13pub enum InstanceChargeType {
14    /// 预付费,即包年包月
15    Prepaid,
16    /// 按小时后付费
17    PostpaidByHour,
18    /// 独享子机(基于专用宿主机创建,宿主机部分的资源不收费)
19    Cdhpaid,
20    /// 竞价付费
21    Spotpaid,
22    /// 专用集群付费
23    Cdcpaid,
24}
25
26/// 预付费模式,即包年包月相关参数设置
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct InstanceChargePrepaid {
29    /// 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60。
30    pub Period: i32,
31
32    /// 自动续费标识。取值范围:
33    /// NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
34    /// NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
35    /// DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费
36    /// 
37    /// 默认取值:NOTIFY_AND_MANUAL_RENEW。若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub RenewFlag: Option<String>,
40}
41
42/// 描述了实例的位置
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct Placement {
45    /// 实例所属的可用区名称。该参数可以通过调用 DescribeZones 的返回值中的Zone字段来获取。
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub Zone: Option<String>,
48
49    /// 实例所属项目ID。该参数可以通过调用 DescribeProjects 的返回值中的 projectId 字段来获取。
50    /// 不填为默认项目。
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub ProjectId: Option<i32>,
53
54    /// 实例所属的专用宿主机ID列表,仅用于入参。如果您有购买专用宿主机并且指定了该参数,则您购买的实例就会随机的部署在这些专用宿主机上。
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub HostIds: Option<Vec<String>>,
57
58    /// 指定母机机型,默认值为:S5
59    /// 
60    /// 全局母机:S1,S2,S3,S4,S5,S6,S4.LARGE16,S4.LARGE32,S4.LARGE48
61    /// FPGA母机:SF.V10001
62    /// 
63    /// 各个地域的主机类型一般情况下不同,详情参考控制台。
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub HostIps: Option<Vec<String>>,
66
67    /// 指定专用集群ID
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub DedicatedClusterId: Option<String>,
70}
71
72/// 描述了操作系统所在块设备即系统盘的信息
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct SystemDisk {
75    /// 系统盘类型。系统盘类型限制详见存储概述。取值范围:
76    /// LOCAL_BASIC:本地硬盘
77    /// LOCAL_SSD:本地SSD硬盘
78    /// CLOUD_BASIC:普通云硬盘
79    /// CLOUD_SSD:SSD云硬盘
80    /// CLOUD_PREMIUM:高性能云硬盘
81    /// 
82    /// 默认取值:当前有库存的硬盘类型。
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub DiskType: Option<String>,
85
86    /// 系统盘ID。参数diskType取值为LOCAL_BASIC或LOCAL_SSD时,无需指定该参数。
87    /// 取值为磁盘ID或者快照ID,如:disk-kdt0sq6m或者snap-m4m5vafo。
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub DiskId: Option<String>,
90
91    /// 系统盘大小,单位:GB。默认值为 50
92    /// 取值范围:20-500
93    /// 不同系统盘类型的默认值各不同。若使用cloud盘,默认值为50。
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub DiskSize: Option<i32>,
96}
97
98/// 描述了数据盘的信息
99#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct DataDisk {
101    /// 数据盘类型。数据盘类型限制详见存储概述。取值范围:
102    /// LOCAL_BASIC:本地硬盘
103    /// LOCAL_SSD:本地SSD硬盘
104    /// LOCAL_NVME:本地NVME硬盘,与InstanceType强相关
105    /// LOCAL_PRO:本地HDD硬盘,与InstanceType强相关
106    /// CLOUD_BASIC:普通云硬盘
107    /// CLOUD_PREMIUM:高性能云硬盘
108    /// CLOUD_SSD:SSD云硬盘
109    /// CLOUD_HSSD:增强型SSD云硬盘
110    /// CLOUD_TSSD:极速型SSD云硬盘
111    /// 
112    /// 默认取值:LOCAL_BASIC。
113    /// 
114    /// 该参数对ResizeInstanceDisk接口无效。
115    pub DiskType: String,
116
117    /// 数据盘ID。
118    /// 可以通过DescribeDisks接口查询已有云硬盘的ID,请参考DescribeDisks接口。
119    /// 该参数可以指定数据盘的ID,表示数据盘来源于指定的快照创建。
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub DiskId: Option<String>,
122
123    /// 数据盘大小,单位:GB。最小调整步长为10G,不同数据盘类型取值范围不同,具体限制详见:存储概述。默认值为0,表示不购买数据盘。更多限制详见产品文档。
124    pub DiskSize: i32,
125
126    /// 数据盘是否随子机销毁。取值范围:
127    /// TRUE:子机销毁时,销毁数据盘,只支持按小时后付费云盘
128    /// FALSE:子机销毁时,保留数据盘
129    /// 
130    /// 默认取值:TRUE
131    /// 
132    /// 该参数目前仅用于 RunInstances 接口。
133    /// 
134    /// 注意:此字段可能返回 null,表示取不到有效值。
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub DeleteWithInstance: Option<bool>,
137}
138
139/// 描述了VPC相关信息,包括子网,私有IP
140#[derive(Debug, Clone, Serialize, Deserialize)]
141pub struct VirtualPrivateCloud {
142    /// 私有网络ID,形如vpc-xxx。有效的VpcId可通过登录控制台查询;也可以调用接口 DescribeVpcEx ,从接口返回中的unVpcId字段获取。
143    /// 若在创建子机时VpcId与SubnetId同时传入SubnetId将自动忽略。通过指定该参数可以指定私有网络的子网IP。
144    pub VpcId: String,
145
146    /// 私有网络子网ID,形如subnet-xxx。有效的私有网络子网ID可通过登录控制台查询;也可以调用接口 DescribeSubnets ,从接口返回中的unSubnetId字段获取。
147    pub SubnetId: String,
148
149    /// 是否用作公网网关。公网网关只有在实例拥有公网IP以及处于私有网络下时才能正常使用。取值范围:
150    /// TRUE:表示用作公网网关
151    /// FALSE:表示不用作公网网关
152    /// 
153    /// 默认取值:FALSE。
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub AsVpcGateway: Option<bool>,
156
157    /// 私有网络子网 IP 数组,在创建实例、修改实例vpc属性操作中可使用此参数。
158    /// 当前仅批量创建多台实例时支持传入相同子网的多个 IP。
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub PrivateIpAddresses: Option<Vec<String>>,
161}
162
163/// 描述了实例的公网可访问性,声明了实例的公网使用计费模式,最大带宽等
164#[derive(Debug, Clone, Serialize, Deserialize)]
165pub struct InternetAccessible {
166    /// 网络计费类型。取值范围:
167    /// BANDWIDTH_PREPAID:预付费按带宽结算
168    /// TRAFFIC_POSTPAID_BY_HOUR:流量按小时后付费
169    /// BANDWIDTH_POSTPAID_BY_HOUR:带宽按小时后付费
170    /// BANDWIDTH_PACKAGE:带宽包用户
171    /// 
172    /// 默认取值:非带宽包用户默认与子机付费类型保持一致。
173    pub InternetChargeType: String,
174
175    /// 公网出带宽上限,单位:Mbps。默认值:0Mbps。不同机型带宽上限范围不一致,具体限制详见购买网络带宽。
176    pub InternetMaxBandwidthOut: i32,
177
178    /// 是否分配公网IP。取值范围:
179    /// TRUE:表示分配公网IP
180    /// FALSE:表示不分配公网IP
181    /// 
182    /// 当公网带宽大于0Mbps时,可自由选择开通与否,默认开通公网IP;当公网带宽为0,则不允许分配公网IP。
183    /// 
184    /// 该参数仅在RunInstances接口中作为入参使用。
185    #[serde(skip_serializing_if = "Option::is_none")]
186    pub PublicIpAssigned: Option<bool>,
187
188    /// 带宽包ID。可通过DescribeBandwidthPackages接口返回值中的BandwidthPackageId获取。
189    #[serde(skip_serializing_if = "Option::is_none")]
190    pub BandwidthPackageId: Option<String>,
191}
192
193/// 描述了实例登录相关配置与信息
194#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct LoginSettings {
196    /// 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下:
197    /// Linux实例密码必须8到30位,至少包括两项[a-z],[A-Z]、[0-9] 和 [( ) ` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? / ]中的特殊符号。
198    /// Windows实例密码必须12到30位,至少包括三项[a-z],[A-Z],[0-9] 和 [( ) ` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? /]中的特殊符号。
199    /// 
200    /// 若不指定该参数,则由系统随机生成密码,并通过站内信方式通知到用户。
201    /// 
202    /// 注意:此字段可能返回 null,表示取不到有效值。
203    #[serde(skip_serializing_if = "Option::is_none")]
204    pub Password: Option<String>,
205
206    /// 密钥ID列表。关联密钥后,就可以通过对应的私钥来访问实例。
207    /// 密钥与密码不能同时指定。
208    /// 密钥ID列表可以通过接口DescribeKeyPairs获取
209    /// 
210    /// 注意:此字段可能返回 null,表示取不到有效值。
211    #[serde(skip_serializing_if = "Option::is_none")]
212    pub KeyIds: Option<Vec<String>>,
213
214    /// 保持镜像的原始设置。该参数与Password或KeyIds.N不能同时指定。
215    /// 只有使用自定义镜像、共享镜像或外部导入镜像创建实例时才能指定该参数为TRUE。
216    /// 取值范围:
217    /// TRUE:表示保持镜像的登录设置
218    /// FALSE:表示不保持镜像的登录设置
219    /// 
220    /// 默认取值:FALSE。
221    /// 
222    /// 注意:此字段可能返回 null,表示取不到有效值。
223    #[serde(skip_serializing_if = "Option::is_none")]
224    pub KeepImageLogin: Option<bool>,
225}
226
227/// 描述了实例的增强服务启用情况与其设置
228#[derive(Debug, Clone, Serialize, Deserialize)]
229pub struct EnhancedService {
230    /// 开启云安全服务。若不指定该参数,则默认开启云安全服务。
231    #[serde(skip_serializing_if = "Option::is_none")]
232    pub SecurityService: Option<RunSecurityServiceEnabled>,
233
234    /// 开启云监控服务。若不指定该参数,则默认开启云监控服务。
235    #[serde(skip_serializing_if = "Option::is_none")]
236    pub MonitorService: Option<RunMonitorServiceEnabled>,
237
238    /// 开启云自动化助手服务(TencentCloud Automation Tools,TAT)。若不指定该参数,则默认不开启云自动化助手服务。
239    #[serde(skip_serializing_if = "Option::is_none")]
240    pub AutomationService: Option<RunAutomationServiceEnabled>,
241}
242
243/// 描述了实例的云监控服务
244#[derive(Debug, Clone, Serialize, Deserialize)]
245pub struct RunMonitorServiceEnabled {
246    /// 是否开启云监控服务。取值范围:
247    /// TRUE:表示开启云监控服务
248    /// FALSE:表示不开启云监控服务
249    /// 
250    /// 默认取值:TRUE。
251    pub Enabled: bool,
252}
253
254/// 描述了实例的安全服务
255#[derive(Debug, Clone, Serialize, Deserialize)]
256pub struct RunSecurityServiceEnabled {
257    /// 是否开启云安全服务。取值范围:
258    /// TRUE:表示开启云安全服务
259    /// FALSE:表示不开启云安全服务
260    /// 
261    /// 默认取值:TRUE。
262    pub Enabled: bool,
263}
264
265/// 描述了实例的TAT服务
266#[derive(Debug, Clone, Serialize, Deserialize)]
267pub struct RunAutomationServiceEnabled {
268    /// 是否开启TAT服务。取值范围:
269    /// TRUE:表示开启云自动化助手服务
270    /// FALSE:表示不开启云自动化助手服务
271    /// 
272    /// 默认取值:FALSE。
273    pub Enabled: bool,
274}
275
276/// 描述了标签对
277#[derive(Debug, Clone, Serialize, Deserialize)]
278pub struct TagSpecification {
279    /// 标签绑定的资源类型,当前支持类型:"instance"、"host"、"image"、"snapshot"、"disk"、"vpc"、"subnet"、"security-group"、"region-route-table"
280    pub ResourceType: String,
281
282    /// 标签对列表
283    pub Tags: Vec<Tag>,
284}
285
286/// 标签
287#[derive(Debug, Clone, Serialize, Deserialize)]
288pub struct Tag {
289    /// 标签键
290    pub Key: String,
291
292    /// 标签值
293    pub Value: String,
294}
295
296/// 定时任务
297#[derive(Debug, Clone, Serialize, Deserialize)]
298pub struct ActionTimer {
299    /// 定时器动作,目前仅支持销毁云主机
300    /// 取值范围:TerminateInstances
301    pub TimerAction: String,
302    
303    /// 执行时间,格式形如:"2018-5-29 11:26:40",北京时间
304    pub ActionTime: String,
305}
306
307/// CPU拓扑结构
308#[derive(Debug, Clone, Serialize, Deserialize)]
309pub struct CpuTopology {
310    /// 每个核心的线程数
311    pub ThreadsPerCore: i32,
312    
313    /// 核心数
314    pub CoreCount: i32,
315}
316
317/// 实例市场相关选项
318#[derive(Debug, Clone, Serialize, Deserialize)]
319pub struct InstanceMarketOptionsRequest {
320    /// 竞价相关选项
321    pub SpotOptions: SpotMarketOptions,
322    
323    /// 市场选项类型,当前只支持取值:spot
324    pub MarketType: String,
325}
326
327/// 竞价相关选项
328#[derive(Debug, Clone, Serialize, Deserialize)]
329pub struct SpotMarketOptions {
330    /// 竞价出价,只需要关注SpotMaxPrice参数
331    #[serde(skip_serializing_if = "Option::is_none")]
332    pub MaxPrice: Option<String>,
333
334    /// 竞价实例类型,默认取值:one-time
335    /// one-time:表示竞价实例呗释放后不会再次竞价
336    /// persistent:表示竞价实例呗释放后还会再次竞价
337    /// 默认取值:one-time
338    #[serde(skip_serializing_if = "Option::is_none")]
339    pub SpotInstanceType: Option<String>,
340    
341    /// 竞价实例竞价时长,单位:小时
342    /// 该参数默认取值为1,最大值为6
343    #[serde(skip_serializing_if = "Option::is_none")]
344    pub SpotDurationHours: Option<i32>,
345}
346
347/// 实例启动模板
348#[derive(Debug, Clone, Serialize, Deserialize)]
349pub struct LaunchTemplate {
350    /// 实例启动模板ID,通过DescribeLaunchTemplates查询
351    #[serde(skip_serializing_if = "Option::is_none")]
352    pub LaunchTemplateId: Option<String>,
353    
354    /// 实例启动模板版本号,通过DescribeLaunchTemplateVersions查询
355    #[serde(skip_serializing_if = "Option::is_none")]
356    pub LaunchTemplateVersion: Option<String>,
357}
358
359/// 创建实例的请求参数
360#[derive(Debug, Clone, Serialize)]
361pub struct RunInstancesRequest {
362    /// 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。
363    #[serde(skip_serializing_if = "Option::is_none")]
364    pub Placement: Option<Placement>,
365
366    /// 指定有效的镜像ID,格式形如img-xxx。镜像类型分为四种:
367    /// 公共镜像
368    /// 自定义镜像
369    /// 共享镜像
370    /// 服务市场镜像
371    #[serde(skip_serializing_if = "Option::is_none")]
372    pub ImageId: Option<String>,
373
374    /// 实例计费类型。
375    #[serde(skip_serializing_if = "Option::is_none")]
376    pub InstanceChargeType: Option<InstanceChargeType>,
377
378    /// 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。
379    /// 若指定实例的付费模式为预付费则该参数必传。
380    #[serde(skip_serializing_if = "Option::is_none")]
381    pub InstanceChargePrepaid: Option<InstanceChargePrepaid>,
382
383    /// 实例机型。不同实例机型指定了不同的资源规格。
384    #[serde(skip_serializing_if = "Option::is_none")]
385    pub InstanceType: Option<String>,
386
387    /// 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。
388    #[serde(skip_serializing_if = "Option::is_none")]
389    pub SystemDisk: Option<SystemDisk>,
390
391    /// 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。
392    #[serde(skip_serializing_if = "Option::is_none")]
393    pub DataDisks: Option<Vec<DataDisk>>,
394
395    /// 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。
396    #[serde(skip_serializing_if = "Option::is_none")]
397    pub VirtualPrivateCloud: Option<VirtualPrivateCloud>,
398
399    /// 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。
400    #[serde(skip_serializing_if = "Option::is_none")]
401    pub InternetAccessible: Option<InternetAccessible>,
402
403    /// 购买实例数量。包年包月实例取值范围:[1,500],按量计费实例取值范围:[1,500]。默认取值:1。
404    #[serde(skip_serializing_if = "Option::is_none")]
405    pub InstanceCount: Option<i32>,
406
407    /// 实例显示名称。不指定实例显示名称则默认显示'未命名'。
408    #[serde(skip_serializing_if = "Option::is_none")]
409    pub InstanceName: Option<String>,
410
411    /// 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。
412    #[serde(skip_serializing_if = "Option::is_none")]
413    pub LoginSettings: Option<LoginSettings>,
414
415    /// 实例所属安全组。该参数可以通过调用 DescribeSecurityGroups 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。
416    #[serde(skip_serializing_if = "Option::is_none")]
417    pub SecurityGroupIds: Option<Vec<String>>,
418
419    /// 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认公共镜像开启云监控、云安全服务;自定义镜像与镜像市场镜像默认不开启云监控,云安全服务,而使用镜像里保留的服务。
420    #[serde(skip_serializing_if = "Option::is_none")]
421    pub EnhancedService: Option<EnhancedService>,
422
423    /// 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
424    #[serde(skip_serializing_if = "Option::is_none")]
425    pub ClientToken: Option<String>,
426
427    /// 实例主机名。
428    #[serde(skip_serializing_if = "Option::is_none")]
429    pub HostName: Option<String>,
430
431    /// 标签描述列表。通过指定该参数可以同时绑定标签到相应的云服务器、云硬盘实例。
432    #[serde(skip_serializing_if = "Option::is_none")]
433    pub TagSpecification: Option<Vec<TagSpecification>>,
434
435    /// 实例所属项目ID。该参数可以通过调用 DescribeProjects 的返回值中的 projectId 字段来获取。不填为默认项目。
436    #[serde(skip_serializing_if = "Option::is_none")]
437    pub ProjectId: Option<i32>,
438
439    /// 实例自定义数据,需要以Base64方式编码
440    /// 支持的最大数据大小为16KB
441    /// 当实例启动时,系统将会执行该脚本
442    /// Linux系统使用cloud-init执行,Windows系统使用cloudbase-init执行
443    #[serde(skip_serializing_if = "Option::is_none")]
444    pub UserData: Option<String>,
445    
446    /// 定时任务。通过该参数可以为实例指定定时任务,目前仅支持定时销毁。
447    #[serde(skip_serializing_if = "Option::is_none")]
448    pub ActionTimer: Option<ActionTimer>,
449    
450    /// 置放群组ID列表,仅支持指定一个。
451    #[serde(skip_serializing_if = "Option::is_none")]
452    pub DisasterRecoverGroupIds: Option<Vec<String>>,
453    
454    /// 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费但没有传递该参数时,默认按当前固定折扣价格出价。
455    #[serde(skip_serializing_if = "Option::is_none")]
456    pub InstanceMarketOptions: Option<InstanceMarketOptionsRequest>,
457    
458    /// 是否只预检此次请求。
459    /// true:发送检查请求,不会创建实例。检查项包括是否填写了必需参数,请求格式,业务限制和云服务器库存。
460    /// 如果检查不通过,则返回对应错误码;
461    /// 如果检查通过,则返回RequestId.
462    /// false(默认):发送正常请求,通过检查后直接创建实例
463    #[serde(skip_serializing_if = "Option::is_none")]
464    pub DryRun: Option<bool>,
465    
466    /// 描述了实例CPU拓扑结构的相关信息。若不指定该参数,则按系统资源情况决定。
467    #[serde(skip_serializing_if = "Option::is_none")]
468    pub CpuTopology: Option<CpuTopology>,
469    
470    /// CAM角色名称。可通过DescribeRoleList接口返回值中的roleName获取。
471    #[serde(skip_serializing_if = "Option::is_none")]
472    pub CamRoleName: Option<String>,
473    
474    /// 高性能计算集群ID。若创建的实例为高性能计算实例,需指定实例放置的集群,否则不可指定。
475    #[serde(skip_serializing_if = "Option::is_none")]
476    pub HpcClusterId: Option<String>,
477    
478    /// 实例启动模板。
479    #[serde(skip_serializing_if = "Option::is_none")]
480    pub LaunchTemplate: Option<LaunchTemplate>,
481    
482    /// 指定专用集群创建。
483    #[serde(skip_serializing_if = "Option::is_none")]
484    pub DedicatedClusterId: Option<String>,
485    
486    /// 指定CHC物理服务器来创建CHC云主机。
487    #[serde(skip_serializing_if = "Option::is_none")]
488    pub ChcIds: Option<Vec<String>>,
489    
490    /// 实例销毁保护标志,表示是否允许通过api接口删除实例。取值范围:
491    /// true:表示开启实例保护,不允许通过api接口删除实例
492    /// false:表示关闭实例保护,允许通过api接口删除实例
493    /// 默认取值:false。
494    #[serde(skip_serializing_if = "Option::is_none")]
495    pub DisableApiTermination: Option<bool>,
496}
497
498/// 创建实例的响应
499#[derive(Debug, Deserialize)]
500pub struct RunInstancesResponse {
501    /// 当通过本接口来创建实例时会返回该参数,表示一个或多个实例ID。返回实例ID列表并不代表实例创建成功。
502    pub InstanceIdSet: Vec<String>,
503    
504    /// 唯一请求 ID
505    pub RequestId: String,
506}
507
508/// API响应通用结构
509#[derive(Debug, Deserialize)]
510pub struct ApiResponse<T> {
511    /// 响应数据
512    pub Response: T,
513}
514
515/// 创建实例响应类型
516pub type RunInstancesResponseType = ApiResponse<RunInstancesResponse>;
517
518/// 查询实例列表的过滤条件
519#[derive(Debug, Clone, Serialize, Deserialize)]
520pub struct Filter {
521    /// 过滤键的名称,支持各种实例相关的过滤条件
522    pub Name: String,
523    
524    /// 过滤值列表
525    pub Values: Vec<String>,
526}
527
528/// 实例服务
529pub struct InstanceService<'a> {
530    client: &'a TencentCloudClient,
531}
532
533impl<'a> InstanceService<'a> {
534    /// 创建新的实例服务
535    pub fn new(client: &'a TencentCloudClient) -> Self {
536        Self { client }
537    }
538
539    /// 创建一个或多个指定配置的实例
540    /// 
541    /// 本接口(RunInstances)用于创建一个或多个指定配置的实例。
542    pub async fn run_instances(&self, request: &RunInstancesRequest, region: &str) -> Result<RunInstancesResponseType> {
543        // 使用client发送请求
544        self.client.request(
545            "RunInstances", 
546            request, 
547            "cvm", 
548            "2017-03-12", 
549            Some(region)
550        ).await
551    }
552}
553
554/// 实例详情
555#[derive(Debug, Clone, Deserialize)]
556pub struct Instance {
557    /// 实例ID
558    pub InstanceId: String,
559    
560    /// 实例名称
561    pub InstanceName: String,
562    
563    /// 实例类型
564    pub InstanceType: String,
565    
566    /// 实例计费模式。取值范围:
567    /// PREPAID:表示预付费,即包年包月
568    /// POSTPAID_BY_HOUR:表示后付费,即按量计费
569    /// CDHPAID:表示CDH付费,即只对CDH计费,不对CDH上的实例计费
570    /// SPOTPAID:表示竞价实例付费
571    pub InstanceChargeType: String,
572    
573    /// 实例状态。取值范围:
574    /// PENDING:表示创建中
575    /// LAUNCH_FAILED:表示创建失败
576    /// RUNNING:表示运行中
577    /// STOPPED:表示关机
578    /// STARTING:表示开机中
579    /// STOPPING:表示关机中
580    /// REBOOTING:表示重启中
581    /// SHUTDOWN:表示停止待销毁
582    /// TERMINATING:表示销毁中
583    pub InstanceState: String,
584    
585    /// 实例的CPU核数,单位:核
586    pub CPU: i32,
587    
588    /// 实例内存容量,单位:GB
589    pub Memory: i32,
590    
591    /// 创建时间
592    pub CreatedTime: String,
593    
594    /// 实例的到期时间,若为按量计费模式则为空
595    #[serde(skip_serializing_if = "Option::is_none")]
596    pub ExpiredTime: Option<String>,
597    
598    /// 操作系统名称
599    pub OsName: String,
600    
601    /// 实例所属安全组列表
602    #[serde(skip_serializing_if = "Option::is_none")]
603    pub SecurityGroupIds: Option<Vec<String>>,
604    
605    /// 实例登录设置
606    #[serde(skip_serializing_if = "Option::is_none")]
607    pub LoginSettings: Option<LoginSettings>,
608    
609    /// 实例公网IP地址
610    #[serde(skip_serializing_if = "Option::is_none")]
611    pub PublicIpAddresses: Option<Vec<String>>,
612    
613    /// 实例私网IP地址
614    #[serde(skip_serializing_if = "Option::is_none")]
615    pub PrivateIpAddresses: Option<Vec<String>>,
616    
617    /// 实例所在的可用区
618    pub Placement: Placement,
619    
620    /// 实例系统盘信息
621    #[serde(skip_serializing_if = "Option::is_none")]
622    pub SystemDisk: Option<SystemDisk>,
623    
624    /// 实例数据盘信息
625    #[serde(skip_serializing_if = "Option::is_none")]
626    pub DataDisks: Option<Vec<DataDisk>>,
627    
628    /// 实例所属虚拟私有网络信息
629    #[serde(skip_serializing_if = "Option::is_none")]
630    pub VirtualPrivateCloud: Option<VirtualPrivateCloud>,
631    
632    /// 实例的网络接口
633    #[serde(skip_serializing_if = "Option::is_none")]
634    pub InternetAccessible: Option<InternetAccessible>,
635}