From b42cad3b8ea23f1e33501192b0d3e419d1148697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 8 Jul 2022 14:53:42 +0200 Subject: [PATCH] improve interfaces and descriptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Grünbichler --- src/bin/proxmox-offline-mirror.rs | 4 ++-- src/bin/proxmox_offline_mirror_cmds/config.rs | 8 ++++---- src/bin/proxmox_offline_mirror_cmds/medium.rs | 20 ++++++++++++------- src/bin/proxmox_offline_mirror_cmds/mirror.rs | 20 +++++++++++++++---- .../subscription.rs | 17 ++++++++++++---- src/config.rs | 5 +++-- src/types.rs | 7 +++++++ 7 files changed, 58 insertions(+), 23 deletions(-) diff --git a/src/bin/proxmox-offline-mirror.rs b/src/bin/proxmox-offline-mirror.rs index 11f22b3..fc24e57 100644 --- a/src/bin/proxmox-offline-mirror.rs +++ b/src/bin/proxmox-offline-mirror.rs @@ -15,7 +15,7 @@ use proxmox_offline_mirror::helpers::tty::{ use proxmox_offline_mirror::{ config::{save_config, MediaConfig, MirrorConfig}, mirror, - types::{ProductType, MIRROR_ID_SCHEMA}, + types::{ProductType, MEDIA_ID_SCHEMA, MIRROR_ID_SCHEMA}, }; mod proxmox_offline_mirror_cmds; @@ -463,7 +463,7 @@ fn action_add_medium(config: &SectionConfigData) -> Result { let id = loop { let mut id = read_string_from_tty("Enter medium ID", None)?; - while let Err(err) = MIRROR_ID_SCHEMA.parse_simple_value(&id) { + while let Err(err) = MEDIA_ID_SCHEMA.parse_simple_value(&id) { eprintln!("Not a valid medium ID: {err}"); id = read_string_from_tty("Enter medium ID", None)?; } diff --git a/src/bin/proxmox_offline_mirror_cmds/config.rs b/src/bin/proxmox_offline_mirror_cmds/config.rs index 9cc29af..57aa5fe 100644 --- a/src/bin/proxmox_offline_mirror_cmds/config.rs +++ b/src/bin/proxmox_offline_mirror_cmds/config.rs @@ -10,7 +10,7 @@ use proxmox_schema::{api, param_bail, ApiType, ArraySchema, ReturnType}; use proxmox_offline_mirror::{ config::{MediaConfig, MediaConfigUpdater, MirrorConfig, MirrorConfigUpdater}, mirror, - types::MIRROR_ID_SCHEMA, + types::{MEDIA_ID_SCHEMA, MIRROR_ID_SCHEMA}, }; pub const DEFAULT_CONFIG_PATH: &str = "/etc/proxmox-apt-mirror.cfg"; @@ -313,7 +313,7 @@ async fn list_media(config: Option, param: Value) -> Result CommandLineInterface { let cmd_def = CliCommandMap::new() - .insert("gc", CliCommand::new(&API_METHOD_GARBAGE_COLLECT)) - .insert("status", CliCommand::new(&API_METHOD_STATUS)) - .insert("sync", CliCommand::new(&API_METHOD_SYNC)); + .insert( + "gc", + CliCommand::new(&API_METHOD_GARBAGE_COLLECT).arg_param(&["id"]), + ) + .insert( + "status", + CliCommand::new(&API_METHOD_STATUS).arg_param(&["id"]), + ) + .insert("sync", CliCommand::new(&API_METHOD_SYNC).arg_param(&["id"])); cmd_def.into() } diff --git a/src/bin/proxmox_offline_mirror_cmds/mirror.rs b/src/bin/proxmox_offline_mirror_cmds/mirror.rs index 888db75..6b4da0d 100644 --- a/src/bin/proxmox_offline_mirror_cmds/mirror.rs +++ b/src/bin/proxmox_offline_mirror_cmds/mirror.rs @@ -177,13 +177,25 @@ async fn garbage_collect(config: Option, id: String, _param: Value) -> R } pub fn mirror_commands() -> CommandLineInterface { let snapshot_cmds = CliCommandMap::new() - .insert("create", CliCommand::new(&API_METHOD_CREATE_SNAPSHOT)) - .insert("list", CliCommand::new(&API_METHOD_LIST_SNAPSHOTS)) - .insert("remove", CliCommand::new(&API_METHOD_REMOVE_SNAPSHOT)); + .insert( + "create", + CliCommand::new(&API_METHOD_CREATE_SNAPSHOT).arg_param(&["id"]), + ) + .insert( + "list", + CliCommand::new(&API_METHOD_LIST_SNAPSHOTS).arg_param(&["id"]), + ) + .insert( + "remove", + CliCommand::new(&API_METHOD_REMOVE_SNAPSHOT).arg_param(&["id", "snapshot"]), + ); let cmd_def = CliCommandMap::new() .insert("snapshot", snapshot_cmds) - .insert("gc", CliCommand::new(&API_METHOD_GARBAGE_COLLECT)); + .insert( + "gc", + CliCommand::new(&API_METHOD_GARBAGE_COLLECT).arg_param(&["id"]), + ); cmd_def.into() } diff --git a/src/bin/proxmox_offline_mirror_cmds/subscription.rs b/src/bin/proxmox_offline_mirror_cmds/subscription.rs index fe14dd0..9d638f4 100644 --- a/src/bin/proxmox_offline_mirror_cmds/subscription.rs +++ b/src/bin/proxmox_offline_mirror_cmds/subscription.rs @@ -348,14 +348,23 @@ async fn remove_key(config: Option, key: String, _param: Value) -> Resul pub fn key_commands() -> CommandLineInterface { CliCommandMap::new() - .insert("add", CliCommand::new(&API_METHOD_ADD_KEY)) + .insert( + "add", + CliCommand::new(&API_METHOD_ADD_KEY).arg_param(&["key", "server-id"]), + ) .insert( "add-mirror-key", - CliCommand::new(&API_METHOD_ADD_MIRROR_KEY), + CliCommand::new(&API_METHOD_ADD_MIRROR_KEY).arg_param(&["key"]), + ) + .insert( + "update", + CliCommand::new(&API_METHOD_UPDATE_KEY).arg_param(&["key"]), ) - .insert("update", CliCommand::new(&API_METHOD_UPDATE_KEY)) .insert("refresh", CliCommand::new(&API_METHOD_REFRESH_KEYS)) - .insert("remove", CliCommand::new(&API_METHOD_REMOVE_KEY)) + .insert( + "remove", + CliCommand::new(&API_METHOD_REMOVE_KEY).arg_param(&["key"]), + ) .insert("list", CliCommand::new(&API_METHOD_LIST_KEYS)) .into() } diff --git a/src/config.rs b/src/config.rs index 3d3a6c8..42705a8 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,7 +10,8 @@ use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlug use proxmox_sys::fs::{replace_file, CreateOptions}; use crate::types::{ - ProductType, MIRROR_ID_SCHEMA, PROXMOX_SERVER_ID_SCHEMA, PROXMOX_SUBSCRIPTION_KEY_SCHEMA, + ProductType, MEDIA_ID_SCHEMA, MIRROR_ID_SCHEMA, PROXMOX_SERVER_ID_SCHEMA, + PROXMOX_SUBSCRIPTION_KEY_SCHEMA, }; #[api( @@ -69,7 +70,7 @@ pub struct MirrorConfig { #[api( properties: { id: { - schema: MIRROR_ID_SCHEMA, + schema: MEDIA_ID_SCHEMA, }, mountpoint: { type: String, diff --git a/src/types.rs b/src/types.rs index cf15c0b..7a1348a 100644 --- a/src/types.rs +++ b/src/types.rs @@ -26,6 +26,13 @@ pub const MIRROR_ID_SCHEMA: Schema = StringSchema::new("Mirror name.") .max_length(32) .schema(); +/// Schema for config IDs +pub const MEDIA_ID_SCHEMA: Schema = StringSchema::new("Medium name.") + .format(&PROXMOX_SAFE_ID_FORMAT) + .min_length(3) + .max_length(32) + .schema(); + #[rustfmt::skip] #[macro_export] macro_rules! PROXMOX_SUBSCRIPTION_KEY_REGEX_STR { () => { r"(?:pom-|pve\d+[a-z]-|pbs[a-z]-|pmg[a-z]-).*" }; }