Skip to content

Commit

Permalink
fix(image): explicitly ask for image architecture in update, delete a…
Browse files Browse the repository at this point in the history
…nd label commands
  • Loading branch information
phm07 committed Aug 14, 2024
1 parent 129f51d commit b31cb2a
Show file tree
Hide file tree
Showing 14 changed files with 92 additions and 19 deletions.
15 changes: 12 additions & 3 deletions internal/cmd/base/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ type LabelCmds struct {
ResourceNameSingular string
ShortDescriptionAdd string
ShortDescriptionRemove string
AdditionalFlags func(cmd *cobra.Command)
NameSuggestions func(client hcapi2.Client) func() []string
LabelKeySuggestions func(client hcapi2.Client) func(idOrName string) []string
FetchLabels func(s state.State, idOrName string) (map[string]string, int64, error)
FetchLabels func(s state.State, cmd *cobra.Command, idOrName string) (map[string]string, int64, error)
SetLabels func(s state.State, id int64, labels map[string]string) error
}

Expand All @@ -39,6 +40,10 @@ func (lc *LabelCmds) AddCobraCommand(s state.State) *cobra.Command {
},
}
cmd.Flags().BoolP("overwrite", "o", false, "Overwrite label if it exists already")

if lc.AdditionalFlags != nil {
lc.AdditionalFlags(cmd)
}
return cmd
}

Expand All @@ -47,7 +52,7 @@ func (lc *LabelCmds) RunAdd(s state.State, cmd *cobra.Command, args []string) er
overwrite, _ := cmd.Flags().GetBool("overwrite")
idOrName := args[0]

labels, id, err := lc.FetchLabels(s, idOrName)
labels, id, err := lc.FetchLabels(s, cmd, idOrName)
if err != nil {
return err
}
Expand Down Expand Up @@ -109,6 +114,10 @@ func (lc *LabelCmds) RemoveCobraCommand(s state.State) *cobra.Command {
},
}
cmd.Flags().BoolP("all", "a", false, "Remove all labels")

if lc.AdditionalFlags != nil {
lc.AdditionalFlags(cmd)
}
return cmd
}

Expand All @@ -117,7 +126,7 @@ func (lc *LabelCmds) RunRemove(s state.State, cmd *cobra.Command, args []string)
all, _ := cmd.Flags().GetBool("all")
idOrName := args[0]

labels, id, err := lc.FetchLabels(s, idOrName)
labels, id, err := lc.FetchLabels(s, cmd, idOrName)
if err != nil {
return err
}
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/certificate/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package certificate
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from an certificate",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Certificate().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.Certificate().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
certificate, _, err := s.Client().Certificate().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/firewall/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package firewall
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from an firewall",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Firewall().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.Firewall().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
firewall, _, err := s.Client().Firewall().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/floatingip/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package floatingip
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from an Floating IP",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.FloatingIP().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.FloatingIP().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
floatingIP, _, err := s.Client().FloatingIP().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
17 changes: 16 additions & 1 deletion internal/cmd/image/delete.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package image

import (
"fmt"
"os"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/cmd/cmpl"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
"github.com/hetznercloud/hcloud-go/v2/hcloud"
Expand All @@ -14,8 +18,19 @@ var DeleteCmd = base.DeleteCmd{
ResourceNamePlural: "images",
ShortDescription: "Delete an image",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Image().Names },
AdditionalFlags: func(cmd *cobra.Command) {
cmd.Flags().StringP("architecture", "a", string(hcloud.ArchitectureX86), "architecture of the image, default is x86")
_ = cmd.RegisterFlagCompletionFunc("architecture", cmpl.SuggestCandidates(string(hcloud.ArchitectureX86), string(hcloud.ArchitectureARM)))
},
Fetch: func(s state.State, cmd *cobra.Command, idOrName string) (interface{}, *hcloud.Response, error) {
return s.Client().Image().Get(s, idOrName)
arch, err := cmd.Flags().GetString("architecture")
if err != nil {
return nil, nil, err
}
if !cmd.Flags().Changed("architecture") {
_, _ = fmt.Fprintln(os.Stderr, "INFO: This command only returns x86 images by default. Explicitly set the --architecture=x86|arm flag to hide this message.")
}
return s.Client().Image().GetForArchitecture(s, idOrName, hcloud.Architecture(arch))
},
Delete: func(s state.State, cmd *cobra.Command, resource interface{}) (*hcloud.Action, error) {
image := resource.(*hcloud.Image)
Expand Down
20 changes: 18 additions & 2 deletions internal/cmd/image/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ package image

import (
"fmt"
"os"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/cmd/cmpl"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
"github.com/hetznercloud/hcloud-go/v2/hcloud"
Expand All @@ -15,8 +19,20 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from an image",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Image().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.Image().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
image, _, err := s.Client().Image().Get(s, idOrName)
AdditionalFlags: func(cmd *cobra.Command) {
// We can't use the -a shortcut here, because it is already used for --all
cmd.Flags().String("architecture", string(hcloud.ArchitectureX86), "architecture of the image, default is x86")
_ = cmd.RegisterFlagCompletionFunc("architecture", cmpl.SuggestCandidates(string(hcloud.ArchitectureX86), string(hcloud.ArchitectureARM)))
},
FetchLabels: func(s state.State, cmd *cobra.Command, idOrName string) (map[string]string, int64, error) {
arch, err := cmd.Flags().GetString("architecture")
if err != nil {
return nil, 0, err
}
if !cmd.Flags().Changed("architecture") {
_, _ = fmt.Fprintln(os.Stderr, "INFO: This command only returns x86 images by default. Explicitly set the --architecture=x86|arm flag to hide this message.")
}
image, _, err := s.Client().Image().GetForArchitecture(s, idOrName, hcloud.Architecture(arch))
if err != nil {
return nil, 0, err
}
Expand Down
19 changes: 16 additions & 3 deletions internal/cmd/image/update.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package image

import (
"fmt"
"os"

"github.com/spf13/cobra"
"github.com/spf13/pflag"

Expand All @@ -15,13 +18,23 @@ var UpdateCmd = base.UpdateCmd{
ResourceNameSingular: "Image",
ShortDescription: "Update an image",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Image().Names },
Fetch: func(s state.State, cmd *cobra.Command, idOrName string) (interface{}, *hcloud.Response, error) {
return s.Client().Image().Get(s, idOrName)
},
DefineFlags: func(cmd *cobra.Command) {
cmd.Flags().String("description", "", "Image description")
cmd.Flags().String("type", "", "Image type")
cmd.RegisterFlagCompletionFunc("type", cmpl.SuggestCandidates("snapshot"))

cmd.Flags().StringP("architecture", "a", string(hcloud.ArchitectureX86), "architecture of the image, default is x86")
_ = cmd.RegisterFlagCompletionFunc("architecture", cmpl.SuggestCandidates(string(hcloud.ArchitectureX86), string(hcloud.ArchitectureARM)))
},
Fetch: func(s state.State, cmd *cobra.Command, idOrName string) (interface{}, *hcloud.Response, error) {
arch, err := cmd.Flags().GetString("architecture")
if err != nil {
return nil, nil, err
}
if !cmd.Flags().Changed("architecture") {
_, _ = fmt.Fprintln(os.Stderr, "INFO: This command only returns x86 images by default. Explicitly set the --architecture=x86|arm flag to hide this message.")
}
return s.Client().Image().GetForArchitecture(s, idOrName, hcloud.Architecture(arch))
},
Update: func(s state.State, cmd *cobra.Command, resource interface{}, flags map[string]pflag.Value) error {
image := resource.(*hcloud.Image)
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/loadbalancer/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package loadbalancer
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a Load Balancer",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.LoadBalancer().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.LoadBalancer().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
loadBalancer, _, err := s.Client().LoadBalancer().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/network/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package network
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a Network",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Network().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.Network().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
network, _, err := s.Client().Network().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/placementgroup/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package placementgroup
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a placement group",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.PlacementGroup().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.PlacementGroup().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
placementGroup, _, err := s.Client().PlacementGroup().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/primaryip/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package primaryip
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a Primary IP",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.PrimaryIP().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.PrimaryIP().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
primaryIP, _, err := s.Client().PrimaryIP().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/server/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package server
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
state "github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a server",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Server().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.Server().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
server, _, err := s.Client().Server().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/sshkey/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package sshkey
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a SSH Key",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.SSHKey().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.SSHKey().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
sshKey, _, err := s.Client().SSHKey().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down
4 changes: 3 additions & 1 deletion internal/cmd/volume/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package volume
import (
"fmt"

"github.com/spf13/cobra"

"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/cli/internal/state"
Expand All @@ -15,7 +17,7 @@ var LabelCmds = base.LabelCmds{
ShortDescriptionRemove: "Remove a label from a Volume",
NameSuggestions: func(c hcapi2.Client) func() []string { return c.Volume().Names },
LabelKeySuggestions: func(c hcapi2.Client) func(idOrName string) []string { return c.Volume().LabelKeys },
FetchLabels: func(s state.State, idOrName string) (map[string]string, int64, error) {
FetchLabels: func(s state.State, _ *cobra.Command, idOrName string) (map[string]string, int64, error) {
volume, _, err := s.Client().Volume().Get(s, idOrName)
if err != nil {
return nil, 0, err
Expand Down

0 comments on commit b31cb2a

Please sign in to comment.