Skip to main content

openstack_cli_compute/v2/server/
show.rs

1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License at
4//
5//     http://www.apache.org/licenses/LICENSE-2.0
6//
7// Unless required by applicable law or agreed to in writing, software
8// distributed under the License is distributed on an "AS IS" BASIS,
9// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10// See the License for the specific language governing permissions and
11// limitations under the License.
12//
13// SPDX-License-Identifier: Apache-2.0
14//
15// WARNING: This file is automatically generated from OpenAPI schema using
16// `openstack-codegenerator`.
17
18//! Show Server command
19//!
20//! Wraps invoking of the `v2.1/servers/{id}` with `GET` method
21
22use clap::Args;
23use tracing::info;
24
25use openstack_cli_core::cli::CliArgs;
26use openstack_cli_core::error::OpenStackCliError;
27use openstack_cli_core::output::OutputProcessor;
28use openstack_sdk::AsyncOpenStack;
29
30use openstack_sdk::api::QueryAsync;
31use openstack_sdk::api::compute::v2::server::find;
32use openstack_sdk::api::find;
33use openstack_types::compute::v2::server::response;
34
35/// Shows details for a server.
36///
37/// Includes server details including configuration drive, extended status, and
38/// server usage information.
39///
40/// The extended status information appears in the `OS-EXT-STS:vm_state`,
41/// `OS-EXT-STS:power_state`, and `OS-EXT-STS:task_state` attributes.
42///
43/// The server usage information appears in the `OS-SRV-USG:launched_at` and
44/// `OS-SRV-USG:terminated_at` attributes.
45///
46/// HostId is unique per account and is not globally unique.
47///
48/// **Preconditions**
49///
50/// The server must exist.
51///
52/// Normal response codes: 200
53///
54/// Error response codes: unauthorized(401), forbidden(403), itemNotFound(404)
55#[derive(Args)]
56#[command(about = "Show Server Details")]
57pub struct ServerCommand {
58    /// Request Query parameters
59    #[command(flatten)]
60    query: QueryParameters,
61
62    /// Path parameters
63    #[command(flatten)]
64    path: PathParameters,
65}
66
67/// Query parameters
68#[derive(Args)]
69struct QueryParameters {}
70
71/// Path parameters
72#[derive(Args)]
73struct PathParameters {
74    /// id parameter for /v2.1/servers/{id} API
75    #[arg(
76        help_heading = "Path parameters",
77        id = "path_param_id",
78        value_name = "ID"
79    )]
80    id: String,
81}
82
83impl ServerCommand {
84    /// Perform command action
85    pub async fn take_action<C: CliArgs>(
86        &self,
87        parsed_args: &C,
88        client: &mut AsyncOpenStack,
89    ) -> Result<(), OpenStackCliError> {
90        info!("Show Server");
91
92        let op = OutputProcessor::from_args(parsed_args, Some("compute.server"), Some("show"));
93        op.validate_args(parsed_args)?;
94
95        let mut find_builder = find::Request::builder();
96
97        find_builder.id(&self.path.id);
98
99        let find_ep = find_builder
100            .build()
101            .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
102        let find_data: serde_json::Value = find(find_ep).query_async(client).await?;
103
104        op.output_single::<response::get_20::ServerResponse>(find_data.clone())
105            .or_else(|_| {
106                op.output_single::<response::get_2100_a::ServerResponse>(find_data.clone())
107            })
108            .or_else(|_| {
109                op.output_single::<response::get_2100_b::ServerResponse>(find_data.clone())
110            })
111            .or_else(|_| op.output_single::<response::get_216::ServerResponse>(find_data.clone()))
112            .or_else(|_| op.output_single::<response::get_219::ServerResponse>(find_data.clone()))
113            .or_else(|_| op.output_single::<response::get_226::ServerResponse>(find_data.clone()))
114            .or_else(|_| op.output_single::<response::get_23::ServerResponse>(find_data.clone()))
115            .or_else(|_| op.output_single::<response::get_247::ServerResponse>(find_data.clone()))
116            .or_else(|_| op.output_single::<response::get_263::ServerResponse>(find_data.clone()))
117            .or_else(|_| op.output_single::<response::get_269_a::ServerResponse>(find_data.clone()))
118            .or_else(|_| op.output_single::<response::get_269_b::ServerResponse>(find_data.clone()))
119            .or_else(|_| op.output_single::<response::get_271_a::ServerResponse>(find_data.clone()))
120            .or_else(|_| op.output_single::<response::get_271_b::ServerResponse>(find_data.clone()))
121            .or_else(|_| op.output_single::<response::get_273_a::ServerResponse>(find_data.clone()))
122            .or_else(|_| op.output_single::<response::get_273_b::ServerResponse>(find_data.clone()))
123            .or_else(|_| op.output_single::<response::get_29::ServerResponse>(find_data.clone()))
124            .or_else(|_| op.output_single::<response::get_290_a::ServerResponse>(find_data.clone()))
125            .or_else(|_| op.output_single::<response::get_290_b::ServerResponse>(find_data.clone()))
126            .or_else(|_| op.output_single::<response::get_296_a::ServerResponse>(find_data.clone()))
127            .or_else(|_| op.output_single::<response::get_296_b::ServerResponse>(find_data.clone()))
128            .or_else(|_| op.output_single::<response::get_298_a::ServerResponse>(find_data.clone()))
129            .or_else(|_| {
130                op.output_single::<response::get_298_b::ServerResponse>(find_data.clone())
131            })?;
132        // Show command specific hints
133        op.show_command_hint()?;
134        Ok(())
135    }
136}