Skip to main content

openstack_cli_block_storage/
v3.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//! Block storage v3 commands
16use 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/// Block Storage (Volume) service (Cinder) commands
48#[derive(Parser)]
49pub struct BlockStorageCommand {
50    /// subcommand
51    #[command(subcommand)]
52    command: BlockStorageCommands,
53}
54
55/// Supported subcommands
56#[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    /// Perform command action
88    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}