openstack_cli_placement/v1/resource_provider/aggregate/
set_119.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::aggregate::set_119;
32use openstack_types::placement::v1::resource_provider::aggregate::response;
33
34#[derive(Args)]
41#[command(about = "Update resource provider aggregates (microversion = 1.19)")]
42pub struct AggregateCommand {
43 #[command(flatten)]
45 query: QueryParameters,
46
47 #[command(flatten)]
49 path: PathParameters,
50
51 #[arg(action=clap::ArgAction::Append, help_heading = "Body parameters", long)]
53 aggregates: Vec<String>,
54
55 #[arg(help_heading = "Body parameters", long)]
56 resource_provider_generation: i32,
57}
58
59#[derive(Args)]
61struct QueryParameters {}
62
63#[derive(Args)]
65struct PathParameters {
66 #[arg(
68 help_heading = "Path parameters",
69 id = "path_param_uuid",
70 value_name = "UUID"
71 )]
72 uuid: String,
73}
74
75impl AggregateCommand {
76 pub async fn take_action<C: CliArgs>(
78 &self,
79 parsed_args: &C,
80 client: &mut AsyncOpenStack,
81 ) -> Result<(), OpenStackCliError> {
82 info!("Set Aggregate");
83
84 let op = OutputProcessor::from_args(
85 parsed_args,
86 Some("placement.resource_provider/aggregate"),
87 Some("set"),
88 );
89 op.validate_args(parsed_args)?;
90
91 let mut ep_builder = set_119::Request::builder();
92 ep_builder.header(
93 http::header::HeaderName::from_static("openstack-api-version"),
94 http::header::HeaderValue::from_static("placement 1.19"),
95 );
96
97 ep_builder.uuid(&self.path.uuid);
98
99 ep_builder.aggregates(self.aggregates.iter().map(Into::into).collect::<Vec<_>>());
103
104 ep_builder.resource_provider_generation(self.resource_provider_generation);
106
107 let ep = ep_builder
108 .build()
109 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
110
111 let data: Vec<serde_json::Value> = ep.query_async(client).await?;
112 op.output_list::<response::set::AggregateResponse>(data.clone())?;
113 op.show_command_hint()?;
115 Ok(())
116 }
117}