use clap::{Parser, Subcommand};
use openstack_sdk::{AsyncOpenStack, types::ServiceType};
use crate::{Cli, OpenStackCliError};
pub mod attachment;
pub mod availability_zone;
pub mod backup;
pub mod cluster;
pub mod default_type;
pub mod extension;
pub mod group;
pub mod group_snapshot;
pub mod group_type;
pub mod host;
pub mod limit;
pub mod message;
pub mod os_volume_transfer;
pub mod qos_spec;
pub mod quota_class_set;
pub mod quota_set;
pub mod resource_filter;
pub mod scheduler_stat;
pub mod service;
pub mod snapshot;
pub mod snapshot_manage;
pub mod r#type;
pub mod volume;
pub mod volume_manage;
pub mod volume_transfer;
#[derive(Parser)]
pub struct BlockStorageCommand {
#[command(subcommand)]
command: BlockStorageCommands,
}
#[allow(missing_docs)]
#[derive(Subcommand)]
pub enum BlockStorageCommands {
Attachment(Box<attachment::AttachmentCommand>),
AvailabilityZone(Box<availability_zone::AvailabilityZoneCommand>),
Backup(Box<backup::BackupCommand>),
Cluster(Box<cluster::ClusterCommand>),
DefaultType(Box<default_type::DefaultTypeCommand>),
Extension(Box<extension::ExtensionCommand>),
Group(Box<group::GroupCommand>),
GroupSnapshot(Box<group_snapshot::GroupSnapshotCommand>),
GroupType(Box<group_type::GroupTypeCommand>),
Host(Box<host::HostCommand>),
Limit(Box<limit::LimitCommand>),
Message(Box<message::MessageCommand>),
OsVolumeTransfer(Box<os_volume_transfer::VolumeTransferCommand>),
QosSpec(Box<qos_spec::QosSpecCommand>),
QuotaClassSet(Box<quota_class_set::QuotaClassSetCommand>),
QuotaSet(Box<quota_set::QuotaSetCommand>),
SchedulerStat(Box<scheduler_stat::SchedulerStatCommand>),
Service(Box<service::ServiceCommand>),
Snapshot(Box<snapshot::SnapshotCommand>),
SnapshotManage(Box<snapshot_manage::SnapshotManageCommand>),
ResourceFilter(Box<resource_filter::ResourceFilterCommand>),
Type(Box<r#type::VolumeTypeCommand>),
Volume(Box<volume::VolumeCommand>),
VolumeManage(Box<volume_manage::VolumeManageCommand>),
VolumeTransfer(Box<volume_transfer::VolumeTransferCommand>),
}
impl BlockStorageCommand {
pub async fn take_action(
&self,
parsed_args: &Cli,
session: &mut AsyncOpenStack,
) -> Result<(), OpenStackCliError> {
session
.discover_service_endpoint(&ServiceType::BlockStorage)
.await?;
match &self.command {
BlockStorageCommands::Attachment(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::AvailabilityZone(cmd) => {
cmd.take_action(parsed_args, session).await
}
BlockStorageCommands::Backup(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Cluster(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::DefaultType(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Extension(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Group(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::GroupSnapshot(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::GroupType(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Host(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Limit(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Message(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::OsVolumeTransfer(cmd) => {
cmd.take_action(parsed_args, session).await
}
BlockStorageCommands::QosSpec(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::QuotaClassSet(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::QuotaSet(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::SchedulerStat(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Service(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Snapshot(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::SnapshotManage(cmd) => {
cmd.take_action(parsed_args, session).await
}
BlockStorageCommands::ResourceFilter(cmd) => {
cmd.take_action(parsed_args, session).await
}
BlockStorageCommands::Type(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::Volume(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::VolumeManage(cmd) => cmd.take_action(parsed_args, session).await,
BlockStorageCommands::VolumeTransfer(cmd) => {
cmd.take_action(parsed_args, session).await
}
}
}
}