aboutsummaryrefslogtreecommitdiff
path: root/src/garage/cli
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-01-03 19:06:04 +0100
committerAlex Auvolat <alex@adnab.me>2022-01-04 12:53:14 +0100
commitdf35feba18787cac06b2a87e3426752fb78da2d5 (patch)
tree9e7de3ade1ced3d47518854287ecd34c91b1a9be /src/garage/cli
parent1bcd6fabbdc0cd9dee88ba28daecb5339f2c13ec (diff)
downloadgarage-df35feba18787cac06b2a87e3426752fb78da2d5.tar.gz
garage-df35feba18787cac06b2a87e3426752fb78da2d5.zip
New buckets for 0.6.0: make bucket id a SK and not a HK, CLI updates
Diffstat (limited to 'src/garage/cli')
-rw-r--r--src/garage/cli/cmd.rs15
-rw-r--r--src/garage/cli/util.rs44
2 files changed, 44 insertions, 15 deletions
diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs
index 515f2143..a90277a0 100644
--- a/src/garage/cli/cmd.rs
+++ b/src/garage/cli/cmd.rs
@@ -165,24 +165,13 @@ pub async fn cmd_admin(
println!("{}", msg);
}
AdminRpc::BucketList(bl) => {
- println!("List of buckets:");
- let mut table = vec![];
- for alias in bl {
- if let Some(alias_bucket) = alias.state.get() {
- table.push(format!("\t{}\t{:?}", alias.name(), alias_bucket));
- }
- }
- format_table(table);
- println!("Buckets that don't have a global alias (i.e. that only exist in the namespace of an access key) are not shown.");
+ print_bucket_list(bl);
}
AdminRpc::BucketInfo(bucket, rk) => {
print_bucket_info(&bucket, &rk);
}
AdminRpc::KeyList(kl) => {
- println!("List of keys:");
- for key in kl {
- println!("{}\t{}", key.0, key.1);
- }
+ print_key_list(kl);
}
AdminRpc::KeyInfo(key, rb) => {
print_key_info(&key, &rb);
diff --git a/src/garage/cli/util.rs b/src/garage/cli/util.rs
index 8d31a4c5..7a7d0e9b 100644
--- a/src/garage/cli/util.rs
+++ b/src/garage/cli/util.rs
@@ -7,6 +7,46 @@ use garage_util::error::*;
use garage_model::bucket_table::*;
use garage_model::key_table::*;
+pub fn print_bucket_list(bl: Vec<Bucket>) {
+ println!("List of buckets:");
+
+ let mut table = vec![];
+ for bucket in bl {
+ let aliases = bucket
+ .aliases()
+ .iter()
+ .filter(|(_, _, active)| *active)
+ .map(|(name, _, _)| name.to_string())
+ .collect::<Vec<_>>();
+ let local_aliases_n = match bucket
+ .local_aliases()
+ .iter()
+ .filter(|(_, _, active)| *active)
+ .count()
+ {
+ 0 => "".into(),
+ 1 => "1 local alias".into(),
+ n => format!("{} local aliases", n),
+ };
+ table.push(format!(
+ "\t{}\t{}\t{}",
+ aliases.join(","),
+ local_aliases_n,
+ hex::encode(bucket.id)
+ ));
+ }
+ format_table(table);
+}
+
+pub fn print_key_list(kl: Vec<(String, String)>) {
+ println!("List of keys:");
+ let mut table = vec![];
+ for key in kl {
+ table.push(format!("\t{}\t{}", key.0, key.1));
+ }
+ format_table(table);
+}
+
pub fn print_key_info(key: &Key, relevant_buckets: &HashMap<Uuid, Bucket>) {
let bucket_global_aliases = |b: &Uuid| {
if let Some(bucket) = relevant_buckets.get(b) {
@@ -99,7 +139,7 @@ pub fn print_bucket_info(bucket: &Bucket, relevant_keys: &HashMap<String, Key>)
.get(key_id)
.map(|k| k.name.get().as_str())
.unwrap_or("");
- table.push(format!("\t{}\t{} ({})", alias, key_id, key_name));
+ table.push(format!("\t{} ({})\t{}", key_id, key_name, alias));
}
}
format_table(table);
@@ -115,7 +155,7 @@ pub fn print_bucket_info(bucket: &Bucket, relevant_keys: &HashMap<String, Key>)
.map(|k| k.name.get().as_str())
.unwrap_or("");
table.push(format!(
- "\t{}{}{}\t{} ({})",
+ "\t{}{}{}\t{}\t{}",
rflag, wflag, oflag, k, key_name
));
}