From 983fcbdad3c217b07dd8ec6004fa42209a8ec2f9 Mon Sep 17 00:00:00 2001 From: Pavel Anni Date: Fri, 31 Jan 2025 11:04:53 -0500 Subject: [PATCH] add version command; fix get_server etc. --- .goreleaser.yaml | 6 ++++ cmd/delete_lab.go | 2 +- cmd/get_key.go | 8 ++++++ cmd/get_lab.go | 6 ++-- cmd/get_server.go | 8 ++++++ cmd/get_volume.go | 8 ++++++ cmd/root.go | 1 + cmd/version.go | 23 ++++++++++++++++ docs/adr/0010-using-limactl.md | 47 ++++++++++++++++++++++++++++++++ internal/lab/lab.go | 2 -- internal/provider/lima/server.go | 2 +- internal/version/version.go | 8 ++++++ 12 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 cmd/version.go create mode 100644 docs/adr/0010-using-limactl.md create mode 100644 internal/version/version.go diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 2a998c6..e4f32d7 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -18,6 +18,12 @@ before: builds: - env: - CGO_ENABLED=0 + ldflags: + - -s -w -trimpath + - -X {{ .ModulePath }}/internal/version.Version={{.Version}} + - -X {{ .ModulePath }}/internal/version.Commit={{.Commit}} + - -X {{ .ModulePath }}/internal/version.Date={{.Date}} + - -X {{ .ModulePath }}/internal/version.GoVersion={{.GoVersion}} goos: - linux - darwin diff --git a/cmd/delete_lab.go b/cmd/delete_lab.go index b8c64c5..de10875 100644 --- a/cmd/delete_lab.go +++ b/cmd/delete_lab.go @@ -31,7 +31,7 @@ func NewDeleteLabCmd() *cobra.Command { } // Delete the lab using lab manager if err := labSvc.Delete(labName, skipTimeCheck); err != nil { - return fmt.Errorf("failed to delete lab: %w", err) + return fmt.Errorf("error deleting lab: %w", err) } fmt.Printf("Successfully deleted lab %s\n", labName) diff --git a/cmd/get_key.go b/cmd/get_key.go index d3c7b7a..6f3e198 100644 --- a/cmd/get_key.go +++ b/cmd/get_key.go @@ -27,6 +27,10 @@ func NewGetKeyCmd() *cobra.Command { } func listKeys() error { + err := initProvider(useProvider) + if err != nil { + return err + } keys, err := providerSvc.AllSSHKeys() if err != nil { return err @@ -55,6 +59,10 @@ func listKeys() error { } func getKey(name string) error { + err := initProvider(useProvider) + if err != nil { + return err + } key, err := providerSvc.GetSSHKey(name) if err != nil { return err diff --git a/cmd/get_lab.go b/cmd/get_lab.go index 1ea65da..bcfa93b 100644 --- a/cmd/get_lab.go +++ b/cmd/get_lab.go @@ -84,8 +84,10 @@ func getLab(labName string) error { if err != nil { return err } - initLabManager() - fmt.Printf("Getting details for lab: %s\n", labName) + err = initLabManager() + if err != nil { + return err + } lab, err := labSvc.Get(labName) if err != nil { return err diff --git a/cmd/get_server.go b/cmd/get_server.go index cc91f6c..d7586dd 100644 --- a/cmd/get_server.go +++ b/cmd/get_server.go @@ -29,6 +29,10 @@ func NewGetServerCmd() *cobra.Command { } func listServers() error { + err := initProvider(useProvider) + if err != nil { + return err + } servers, err := providerSvc.AllServers() if err != nil { return err @@ -52,6 +56,10 @@ func listServers() error { } func getServer(serverID string) error { + err := initProvider(useProvider) + if err != nil { + return err + } server, err := providerSvc.GetServer(serverID) if err != nil { return err diff --git a/cmd/get_volume.go b/cmd/get_volume.go index f86fa51..49a0400 100644 --- a/cmd/get_volume.go +++ b/cmd/get_volume.go @@ -29,6 +29,10 @@ func NewGetVolumeCmd() *cobra.Command { } func listVolumes() error { + err := initProvider(useProvider) + if err != nil { + return err + } volumes, err := providerSvc.AllVolumes() if err != nil { return err @@ -53,6 +57,10 @@ func listVolumes() error { } func getVolume(volumeID string) error { + err := initProvider(useProvider) + if err != nil { + return err + } volume, err := providerSvc.GetVolume(volumeID) if err != nil { return err diff --git a/cmd/root.go b/cmd/root.go index 77ccfb3..d8f4074 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -64,6 +64,7 @@ func NewRootCmd() *cobra.Command { NewConfigCmd(), NewCreateCmd(), NewSyncCmd(), + NewVersionCmd(), ) return cmd diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000..cbf14f0 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,23 @@ +package cmd + +import ( + "fmt" + "runtime" + + "github.com/pavelanni/storctl/internal/version" + "github.com/spf13/cobra" +) + +func NewVersionCmd() *cobra.Command { + return &cobra.Command{ + Use: "version", + Short: "Print version information", + Run: func(cmd *cobra.Command, args []string) { + fmt.Printf("Version: %s\n", version.Version) + fmt.Printf("Commit: %s\n", version.Commit) + fmt.Printf("Build Date: %s\n", version.Date) + fmt.Printf("Go Version: %s\n", version.GoVersion) + fmt.Printf("OS/Arch: %s/%s\n", runtime.GOOS, runtime.GOARCH) + }, + } +} diff --git a/docs/adr/0010-using-limactl.md b/docs/adr/0010-using-limactl.md new file mode 100644 index 0000000..d352b23 --- /dev/null +++ b/docs/adr/0010-using-limactl.md @@ -0,0 +1,47 @@ +# Using limactl + +## Status + +Accepted + +## Date + +2024-01-29 + +## Context + +- Need to work with virtual machines on a macOS or Linux host +- Lima is a tool of choice on macOS and also available on Linux +- Lima can use QEMU as a backend virtualization engine +- Lima is written in Go +- There is an option to use Lima's Go library or use the CLI tool `limactl` from inside our Go code +- There is also Colima that is a wrapper for Lima but it uses Docker instead of `containerd` as a containerization engine + +## Decision + +Use `limactl` CLI calls from inside Go code. + +1. The Go library used by Lima developers is not created for external consumption. + To use it we would have to go deep into its ecosystem and import a lot of other dependencies. + +2. The CLI interface is more stable so we are more safe in this case. + +3. In our case, performance is not a significant factor, so there is not much gain in using the native Go library. + +## Consequences + +### Positive + +- More stable interface +- Fewer imports/dependencies + +### Negative + +- Need to parse the command JSON output +- Slightly lower performance (but not visible by the end user) + +## Related Decisions + + +## Notes + diff --git a/internal/lab/lab.go b/internal/lab/lab.go index 949062c..8429e20 100644 --- a/internal/lab/lab.go +++ b/internal/lab/lab.go @@ -316,8 +316,6 @@ func (m *ManagerSvc) createLabLima(lab *types.Lab) error { Format: false, }) } - // DEBUG - fmt.Printf("Additional disks: %v\n", additionalDisks) specServers := lab.Spec.Servers for _, serverSpec := range specServers { s := &types.Server{ diff --git a/internal/provider/lima/server.go b/internal/provider/lima/server.go index 2985c0f..784e2f4 100644 --- a/internal/provider/lima/server.go +++ b/internal/provider/lima/server.go @@ -299,7 +299,7 @@ func createVM(ctx context.Context, name, configPath string) error { if ctx.Err() == context.DeadlineExceeded { return fmt.Errorf("timeout while creating VM: %w", err) } - return fmt.Errorf("creating VM: %w", err) + return fmt.Errorf("error creating VM: %w", err) } fmt.Printf("Successfully created VM %s\n", name) diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..afdc44c --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,8 @@ +package version + +var ( + Version = "dev" + Commit = "none" + Date = "unknown" + GoVersion = "unknown" +)