openstack_cli_block_storage/
v3.rs1use clap::{Parser, Subcommand};
17
18use openstack_cli_core::{cli::CliArgs, error::OpenStackCliError};
19use openstack_sdk::{AsyncOpenStack, types::ServiceType};
20
21pub mod attachment;
22pub mod availability_zone;
23pub mod backup;
24pub mod cluster;
25pub mod default_type;
26pub mod extension;
27pub mod group;
28pub mod group_snapshot;
29pub mod group_type;
30pub mod host;
31pub mod limit;
32pub mod message;
33pub mod os_volume_transfer;
34pub mod qos_spec;
35pub mod quota_class_set;
36pub mod quota_set;
37pub mod resource_filter;
38pub mod scheduler_stat;
39pub mod service;
40pub mod snapshot;
41pub mod snapshot_manage;
42pub mod r#type;
43pub mod volume;
44pub mod volume_manage;
45pub mod volume_transfer;
46
47#[derive(Parser)]
49pub struct BlockStorageCommand {
50 #[command(subcommand)]
52 command: BlockStorageCommands,
53}
54
55#[allow(missing_docs)]
57#[derive(Subcommand)]
58pub enum BlockStorageCommands {
59 Attachment(Box<attachment::AttachmentCommand>),
60 AvailabilityZone(Box<availability_zone::AvailabilityZoneCommand>),
61 Backup(Box<backup::BackupCommand>),
62 Cluster(Box<cluster::ClusterCommand>),
63 DefaultType(Box<default_type::DefaultTypeCommand>),
64 Extension(Box<extension::ExtensionCommand>),
65 Group(Box<group::GroupCommand>),
66 GroupSnapshot(Box<group_snapshot::GroupSnapshotCommand>),
67 GroupType(Box<group_type::GroupTypeCommand>),
68 Host(Box<host::HostCommand>),
69 Limit(Box<limit::LimitCommand>),
70 Message(Box<message::MessageCommand>),
71 OsVolumeTransfer(Box<os_volume_transfer::VolumeTransferCommand>),
72 QosSpec(Box<qos_spec::QosSpecCommand>),
73 QuotaClassSet(Box<quota_class_set::QuotaClassSetCommand>),
74 QuotaSet(Box<quota_set::QuotaSetCommand>),
75 SchedulerStat(Box<scheduler_stat::SchedulerStatCommand>),
76 Service(Box<service::ServiceCommand>),
77 Snapshot(Box<snapshot::SnapshotCommand>),
78 SnapshotManage(Box<snapshot_manage::SnapshotManageCommand>),
79 ResourceFilter(Box<resource_filter::ResourceFilterCommand>),
80 Type(Box<r#type::VolumeTypeCommand>),
81 Volume(Box<volume::VolumeCommand>),
82 VolumeManage(Box<volume_manage::VolumeManageCommand>),
83 VolumeTransfer(Box<volume_transfer::VolumeTransferCommand>),
84}
85
86impl BlockStorageCommand {
87 pub async fn take_action<C: CliArgs>(
89 &self,
90 parsed_args: &C,
91 session: &mut AsyncOpenStack,
92 ) -> Result<(), OpenStackCliError> {
93 session
94 .discover_service_endpoint(&ServiceType::BlockStorage)
95 .await?;
96
97 match &self.command {
98 BlockStorageCommands::Attachment(cmd) => cmd.take_action(parsed_args, session).await,
99 BlockStorageCommands::AvailabilityZone(cmd) => {
100 cmd.take_action(parsed_args, session).await
101 }
102 BlockStorageCommands::Backup(cmd) => cmd.take_action(parsed_args, session).await,
103 BlockStorageCommands::Cluster(cmd) => cmd.take_action(parsed_args, session).await,
104 BlockStorageCommands::DefaultType(cmd) => cmd.take_action(parsed_args, session).await,
105 BlockStorageCommands::Extension(cmd) => cmd.take_action(parsed_args, session).await,
106 BlockStorageCommands::Group(cmd) => cmd.take_action(parsed_args, session).await,
107 BlockStorageCommands::GroupSnapshot(cmd) => cmd.take_action(parsed_args, session).await,
108 BlockStorageCommands::GroupType(cmd) => cmd.take_action(parsed_args, session).await,
109 BlockStorageCommands::Host(cmd) => cmd.take_action(parsed_args, session).await,
110 BlockStorageCommands::Limit(cmd) => cmd.take_action(parsed_args, session).await,
111 BlockStorageCommands::Message(cmd) => cmd.take_action(parsed_args, session).await,
112 BlockStorageCommands::OsVolumeTransfer(cmd) => {
113 cmd.take_action(parsed_args, session).await
114 }
115 BlockStorageCommands::QosSpec(cmd) => cmd.take_action(parsed_args, session).await,
116 BlockStorageCommands::QuotaClassSet(cmd) => cmd.take_action(parsed_args, session).await,
117 BlockStorageCommands::QuotaSet(cmd) => cmd.take_action(parsed_args, session).await,
118 BlockStorageCommands::SchedulerStat(cmd) => cmd.take_action(parsed_args, session).await,
119 BlockStorageCommands::Service(cmd) => cmd.take_action(parsed_args, session).await,
120 BlockStorageCommands::Snapshot(cmd) => cmd.take_action(parsed_args, session).await,
121 BlockStorageCommands::SnapshotManage(cmd) => {
122 cmd.take_action(parsed_args, session).await
123 }
124 BlockStorageCommands::ResourceFilter(cmd) => {
125 cmd.take_action(parsed_args, session).await
126 }
127 BlockStorageCommands::Type(cmd) => cmd.take_action(parsed_args, session).await,
128 BlockStorageCommands::Volume(cmd) => cmd.take_action(parsed_args, session).await,
129 BlockStorageCommands::VolumeManage(cmd) => cmd.take_action(parsed_args, session).await,
130 BlockStorageCommands::VolumeTransfer(cmd) => {
131 cmd.take_action(parsed_args, session).await
132 }
133 }
134 }
135}