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}