openstack_cli_placement/v1/resource_provider/inventory/
show.rs1use 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::placement::v1::resource_provider::inventory::get;
32use openstack_types::placement::v1::resource_provider::inventory::response;
33
34#[derive(Args)]
38#[command(about = "Show resource provider inventory")]
39pub struct InventoryCommand {
40 #[command(flatten)]
42 query: QueryParameters,
43
44 #[command(flatten)]
46 path: PathParameters,
47}
48
49#[derive(Args)]
51struct QueryParameters {}
52
53#[derive(Args)]
55struct PathParameters {
56 #[arg(
59 help_heading = "Path parameters",
60 id = "path_param_resource_class",
61 value_name = "RESOURCE_CLASS"
62 )]
63 resource_class: String,
64
65 #[arg(
68 help_heading = "Path parameters",
69 id = "path_param_uuid",
70 value_name = "UUID"
71 )]
72 uuid: String,
73}
74
75impl InventoryCommand {
76 pub async fn take_action<C: CliArgs>(
78 &self,
79 parsed_args: &C,
80 client: &mut AsyncOpenStack,
81 ) -> Result<(), OpenStackCliError> {
82 info!("Show Inventory");
83
84 let op = OutputProcessor::from_args(
85 parsed_args,
86 Some("placement.resource_provider/inventory"),
87 Some("show"),
88 );
89 op.validate_args(parsed_args)?;
90
91 let mut ep_builder = get::Request::builder();
92
93 ep_builder.resource_class(&self.path.resource_class);
94 ep_builder.uuid(&self.path.uuid);
95
96 let ep = ep_builder
97 .build()
98 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
99
100 let data: serde_json::Value = ep.query_async(client).await?;
101
102 op.output_single::<response::get::InventoryResponse>(data.clone())?;
103 op.show_command_hint()?;
105 Ok(())
106 }
107}