openstack_cli/placement/v1/allocation/
set_128.rs1use clap::Args;
23use tracing::info;
24
25use openstack_sdk::AsyncOpenStack;
26
27use crate::Cli;
28use crate::OpenStackCliError;
29use crate::output::OutputProcessor;
30
31use crate::common::parse_key_val;
32use openstack_sdk::api::QueryAsync;
33use openstack_sdk::api::placement::v1::allocation::set_128;
34use serde_json::Value;
35
36#[derive(Args)]
45#[command(about = "Update allocations (microversion = 1.28)")]
46pub struct AllocationCommand {
47 #[command(flatten)]
49 query: QueryParameters,
50
51 #[command(flatten)]
53 path: PathParameters,
54
55 #[arg(help_heading = "Body parameters", long, value_name="key=value", value_parser=parse_key_val::<String, Value>)]
56 allocations: Vec<(String, Value)>,
57
58 #[arg(help_heading = "Body parameters", long)]
59 consumer_generation: Option<i32>,
60
61 #[arg(help_heading = "Body parameters", long)]
62 project_id: String,
63
64 #[arg(help_heading = "Body parameters", long)]
65 user_id: String,
66}
67
68#[derive(Args)]
70struct QueryParameters {}
71
72#[derive(Args)]
74struct PathParameters {
75 #[arg(
77 help_heading = "Path parameters",
78 id = "path_param_consumer_uuid",
79 value_name = "CONSUMER_UUID"
80 )]
81 consumer_uuid: String,
82}
83
84impl AllocationCommand {
85 pub async fn take_action(
87 &self,
88 parsed_args: &Cli,
89 client: &mut AsyncOpenStack,
90 ) -> Result<(), OpenStackCliError> {
91 info!("Set Allocation");
92
93 let op = OutputProcessor::from_args(parsed_args, Some("placement.allocation"), Some("set"));
94 op.validate_args(parsed_args)?;
95
96 let mut ep_builder = set_128::Request::builder();
97 ep_builder.header(
98 http::header::HeaderName::from_static("openstack-api-version"),
99 http::header::HeaderValue::from_static("placement 1.28"),
100 );
101
102 ep_builder.consumer_uuid(&self.path.consumer_uuid);
103
104 ep_builder.allocations(
108 self.allocations
109 .iter()
110 .map(|(k, v)| {
111 serde_json::from_value(v.to_owned()).map(|v: set_128::AllocationsItem| (k, v))
112 })
113 .collect::<Result<Vec<_>, _>>()?
114 .into_iter(),
115 );
116
117 if let Some(val) = &self.consumer_generation {
119 ep_builder.consumer_generation(*val);
120 }
121
122 ep_builder.project_id(&self.project_id);
124
125 ep_builder.user_id(&self.user_id);
127
128 let ep = ep_builder
129 .build()
130 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
131 openstack_sdk::api::ignore(ep).query_async(client).await?;
132 op.show_command_hint()?;
134 Ok(())
135 }
136}