volcengine_rust_sdk/service/ecs/mod.rs
1/*
2 * @Author: Jerry.Yang
3 * @Date: 2024-10-28 16:35:18
4 * @LastEditors: Jerry.Yang
5 * @LastEditTime: 2025-02-05 16:56:35
6 * @Description: Module for ECS (Elastic Compute Service) operations
7 */
8use crate::volcengine::client::client;
9use crate::volcengine::error::error;
10use crate::volcengine::session::session;
11use std::future::Future;
12use volcengine_sdk_protobuf::protobuf::ecs_image;
13use volcengine_sdk_protobuf::protobuf::ecs_instance;
14use volcengine_sdk_protobuf::protobuf::ecs_zone;
15
16// Public module for ECS service related operations.
17pub mod service_ecs;
18
19// Submodules for various ECS API operations.
20// These modules contain the specific implementations for different ECS operations such as describing images, instances, regions, zones, modifying instance specifications, running instances, stopping single and multiple instances.
21mod api_describe_images;
22mod api_describe_images_models;
23mod api_describe_instances;
24mod api_describe_instances_model;
25mod api_describe_regions;
26mod api_describe_regions_model;
27mod api_describe_zones;
28mod api_describe_zones_models;
29mod api_modify_instance_spec;
30mod api_modify_instance_spec_model;
31mod api_run_instances;
32mod api_run_instances_model;
33mod api_stop_instance;
34mod api_stop_instance_model;
35mod api_stop_instances;
36mod api_stop_instances_models;
37
38// Test module for ECS operations.
39mod tests;
40
41/// The `EcsService` trait defines the interface for interacting with the ECS (Elastic Compute Service).
42/// It provides methods for various ECS operations such as running instances, describing instances, stopping instances,
43/// modifying instance specifications, and describing images, regions, and zones.
44pub trait EcsService {
45 /// Creates a new instance of the `Ecs` struct using the provided session.
46 ///
47 /// # Parameters:
48 /// - `session`: A `Session` object containing authentication and configuration information.
49 ///
50 /// # Returns:
51 /// A `Result` containing an `Ecs` instance on success or an `error::Error` on failure.
52 fn new_ecs(session: session::Session) -> Result<Ecs, error::Error>;
53
54 /// Initiates a request to run instances in ECS.
55 ///
56 /// # Parameters:
57 /// - `request`: A `RunInstancesReq` object containing the parameters for running instances.
58 ///
59 /// # Returns:
60 /// A `Future` that resolves to a `Result` containing a `RunInstancesResp` on success or an `error::Error` on failure.
61 fn new_run_instances(
62 &self,
63 request: ecs_instance::RunInstancesReq,
64 ) -> impl Future<Output = Result<ecs_instance::RunInstancesResp, error::Error>>;
65
66 /// Initiates a request to describe instances in ECS.
67 ///
68 /// # Parameters:
69 /// - `request`: A `DescribeInstancesReq` object containing the parameters for describing instances.
70 ///
71 /// # Returns:
72 /// A `Future` that resolves to a `Result` containing a `DescribeInstancesResp` on success or an `error::Error` on failure.
73 fn new_describe_instances(
74 &self,
75 request: ecs_instance::DescribeInstancesReq,
76 ) -> impl Future<Output = Result<ecs_instance::DescribeInstancesResp, error::Error>>;
77
78 /// Initiates a request to stop a single instance in ECS.
79 ///
80 /// # Parameters:
81 /// - `request`: A `StopInstanceReq` object containing the parameters for stopping a single instance.
82 ///
83 /// # Returns:
84 /// A `Future` that resolves to a `Result` containing a `StopInstanceResp` on success or an `error::Error` on failure.
85 fn new_stop_instance(
86 &self,
87 request: ecs_instance::StopInstanceReq,
88 ) -> impl Future<Output = Result<ecs_instance::StopInstanceResp, error::Error>>;
89
90 /// Initiates a request to stop multiple instances in ECS.
91 ///
92 /// # Parameters:
93 /// - `request`: A `StopInstancesReq` object containing the parameters for stopping multiple instances.
94 ///
95 /// # Returns:
96 /// A `Future` that resolves to a `Result` containing a `StopInstancesResp` on success or an `error::Error` on failure.
97 fn new_stop_instances(
98 &self,
99 request: ecs_instance::StopInstancesReq,
100 ) -> impl Future<Output = Result<ecs_instance::StopInstancesResp, error::Error>>;
101
102 /// Initiates a request to modify the specifications of an instance in ECS.
103 ///
104 /// # Parameters:
105 /// - `request`: A `ModifyInstanceSpecReq` object containing the parameters for modifying instance specifications.
106 ///
107 /// # Returns:
108 /// A `Future` that resolves to a `Result` containing a `ModifyInstanceSpecResp` on success or an `error::Error` on failure.
109 fn new_modify_instance_spec(
110 &self,
111 request: ecs_instance::ModifyInstanceSpecReq,
112 ) -> impl Future<Output = Result<ecs_instance::ModifyInstanceSpecResp, error::Error>>;
113
114 /// Initiates a request to describe images in ECS.
115 ///
116 /// # Parameters:
117 /// - `request`: A `DescribeImagesReq` object containing the parameters for describing images.
118 ///
119 /// # Returns:
120 /// A `Future` that resolves to a `Result` containing a `DescribeImagesResp` on success or an `error::Error` on failure.
121 fn new_describe_images(
122 &self,
123 request: ecs_image::DescribeImagesReq,
124 ) -> impl Future<Output = Result<ecs_image::DescribeImagesResp, error::Error>>;
125
126 /// Initiates a request to describe regions in ECS.
127 ///
128 /// # Parameters:
129 /// - `request`: A `DescribeRegionsReq` object containing the parameters for describing regions.
130 ///
131 /// # Returns:
132 /// A `Future` that resolves to a `Result` containing a `DescribeRegionsResp` on success or an `error::Error` on failure.
133 fn new_describe_regions(
134 &self,
135 request: ecs_zone::DescribeRegionsReq,
136 ) -> impl Future<Output = Result<ecs_zone::DescribeRegionsResp, error::Error>>;
137
138 /// Initiates a request to describe zones in ECS.
139 ///
140 /// # Parameters:
141 /// - `request`: A `DescribeZonesReq` object containing the parameters for describing zones.
142 ///
143 /// # Returns:
144 /// A `Future` that resolves to a `Result` containing a `DescribeZonesResp` on success or an `error::Error` on failure.
145 fn new_describe_zones(
146 &self,
147 request: ecs_zone::DescribeZonesReq,
148 ) -> impl Future<Output = Result<ecs_zone::DescribeZonesResp, error::Error>>;
149}
150
151/// The `Ecs` struct represents the client for interacting with the ECS (Elastic Compute Service).
152/// It encapsulates the client configuration and provides methods for various ECS operations.
153#[derive(Debug, Clone)]
154pub struct Ecs {
155 /// The client configuration used for making requests to the ECS service.
156 client: client::Client,
157}