mirror of
https://github.com/cirruslabs/tart.git
synced 2026-10-18 11:55:36 +02:00
Filter tart list by source (#349)
* Adds Option to filter VMs by 'source' * Tidy up columns for table on some Terminals * Don't show headers if there's an error. * Fixes linting errors. * Update Sources/tart/Commands/List.swift - removing the short name for now, as we don't know if we may need -s in the future - removing the capitalization for the word "source" and adding an example instead Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com> * source should be an Optional flag. Reverts header change. Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
This commit is contained in:
co-authored by
Nikolay Edigaryev
parent
6d7dc40c57
commit
c9caeab098
@@ -5,17 +5,35 @@ import SwiftUI
|
||||
struct List: AsyncParsableCommand {
|
||||
static var configuration = CommandConfiguration(abstract: "List created VMs")
|
||||
|
||||
@Flag(name: [.short, .long], help: ArgumentHelp("Only display VM names"))
|
||||
@Flag(name: [.short, .long], help: ArgumentHelp("Only display VM names."))
|
||||
var quiet: Bool = false
|
||||
|
||||
@Option(help: ArgumentHelp("Only display VMs from the specified source (e.g. --source local, --source oci)."))
|
||||
var source: String?
|
||||
|
||||
func validate() throws {
|
||||
guard let source = source else {
|
||||
return
|
||||
}
|
||||
|
||||
if !["local", "oci"].contains(source) {
|
||||
throw ValidationError("'\(source)' is not a valid <source>")
|
||||
}
|
||||
}
|
||||
|
||||
func run() async throws {
|
||||
do {
|
||||
if !quiet {
|
||||
print("Source\tName")
|
||||
}
|
||||
|
||||
displayTable("local", try VMStorageLocal().list())
|
||||
displayTable("oci", try VMStorageOCI().list().map { (name, vmDir, _) in (name, vmDir) })
|
||||
if source == nil || source == "local" {
|
||||
displayTable("local", try VMStorageLocal().list())
|
||||
}
|
||||
|
||||
if source == nil || source == "oci" {
|
||||
displayTable("oci", try VMStorageOCI().list().map { (name, vmDir, _) in (name, vmDir) })
|
||||
}
|
||||
|
||||
Foundation.exit(0)
|
||||
} catch {
|
||||
@@ -30,6 +48,7 @@ struct List: AsyncParsableCommand {
|
||||
if quiet {
|
||||
print(name)
|
||||
} else {
|
||||
let source = source.padding(toLength: "Source".count, withPad: " ", startingAt: 0)
|
||||
print("\(source)\t\(name)")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user