Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var AttachCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { cmd := &cobra.Command{ Use: "attach [FLAGS] VOLUME", Short: "Attach a volume to a server", Args: cobra.ExactArgs(1), ValidArgsFunction: cmpl.SuggestArgs(cmpl.SuggestCandidatesF(client.Volume().Names)), TraverseChildren: true, DisableFlagsInUseLine: true, } cmd.Flags().String("server", "", "Server (ID or name) (required)") cmd.RegisterFlagCompletionFunc("server", cmpl.SuggestCandidatesF(client.Server().Names)) cmd.MarkFlagRequired("server") cmd.Flags().Bool("automount", false, "Automount volume after attach") return cmd }, Run: func(ctx context.Context, client hcapi2.Client, waiter state.ActionWaiter, cmd *cobra.Command, args []string) error { volume, _, err := client.Volume().Get(ctx, args[0]) if err != nil { return err } if volume == nil { return fmt.Errorf("volume not found: %s", args[0]) } serverIDOrName, _ := cmd.Flags().GetString("server") server, _, err := client.Server().Get(ctx, serverIDOrName) if err != nil { return err } if server == nil { return fmt.Errorf("server not found: %s", serverIDOrName) } automount, _ := cmd.Flags().GetBool("automount") action, _, err := client.Volume().AttachWithOpts(ctx, volume, hcloud.VolumeAttachOpts{ Server: server, Automount: &automount, }) if err != nil { return err } if err := waiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Volume %d attached to server %s\n", volume.ID, server.Name) return nil }, }
View Source
var CreateCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { cmd := &cobra.Command{ Use: "create FLAGS", Short: "Create a volume", Args: cobra.NoArgs, TraverseChildren: true, DisableFlagsInUseLine: true, } cmd.Flags().String("name", "", "Volume name (required)") cmd.MarkFlagRequired("name") cmd.Flags().String("server", "", "Server (ID or name)") cmd.RegisterFlagCompletionFunc("server", cmpl.SuggestCandidatesF(client.Server().Names)) cmd.Flags().String("location", "", "Location (ID or name)") cmd.RegisterFlagCompletionFunc("location", cmpl.SuggestCandidatesF(client.Location().Names)) cmd.Flags().Int("size", 0, "Size (GB) (required)") cmd.MarkFlagRequired("size") cmd.Flags().Bool("automount", false, "Automount volume after attach (server must be provided)") cmd.Flags().String("format", "", "Format volume after creation (automount must be enabled)") cmd.Flags().StringToString("label", nil, "User-defined labels ('key=value') (can be specified multiple times)") return cmd }, Run: func(ctx context.Context, client hcapi2.Client, waiter state.ActionWaiter, cmd *cobra.Command, args []string) error { name, _ := cmd.Flags().GetString("name") serverIDOrName, _ := cmd.Flags().GetString("server") size, _ := cmd.Flags().GetInt("size") location, _ := cmd.Flags().GetString("location") automount, _ := cmd.Flags().GetBool("automount") format, _ := cmd.Flags().GetString("format") labels, _ := cmd.Flags().GetStringToString("label") opts := hcloud.VolumeCreateOpts{ Name: name, Size: size, Labels: labels, } if location != "" { id, err := strconv.Atoi(location) if err == nil { opts.Location = &hcloud.Location{ID: id} } else { opts.Location = &hcloud.Location{Name: location} } } if serverIDOrName != "" { server, _, err := client.Server().Get(ctx, serverIDOrName) if err != nil { return err } if server == nil { return fmt.Errorf("server not found: %s", serverIDOrName) } opts.Server = server } if automount { opts.Automount = &automount if format != "" { opts.Format = &format } } result, _, err := client.Volume().Create(ctx, opts) if err != nil { return err } if err := waiter.ActionProgress(ctx, result.Action); err != nil { return err } if err := waiter.WaitForActions(ctx, result.NextActions); err != nil { return err } fmt.Printf("Volume %d created\n", result.Volume.ID) return nil }, }
View Source
var DetachCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { return &cobra.Command{ Use: "detach [FLAGS] VOLUME", Short: "Detach a volume", Args: cobra.ExactArgs(1), ValidArgsFunction: cmpl.SuggestArgs(cmpl.SuggestCandidatesF(client.Volume().Names)), TraverseChildren: true, DisableFlagsInUseLine: true, } }, Run: func(ctx context.Context, client hcapi2.Client, waiter state.ActionWaiter, cmd *cobra.Command, args []string) error { volume, _, err := client.Volume().Get(ctx, args[0]) if err != nil { return err } if volume == nil { return fmt.Errorf("volume not found: %s", args[0]) } action, _, err := client.Volume().Detach(ctx, volume) if err != nil { return err } if err := waiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Volume %d detached\n", volume.ID) return nil }, }
View Source
var DisableProtectionCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { return &cobra.Command{ Use: "disable-protection [FLAGS] VOLUME PROTECTIONLEVEL [PROTECTIONLEVEL...]", Short: "Disable resource protection for a volume", Args: cobra.MinimumNArgs(2), ValidArgsFunction: cmpl.SuggestArgs( cmpl.SuggestCandidatesF(client.Volume().Names), cmpl.SuggestCandidates("delete"), ), TraverseChildren: true, DisableFlagsInUseLine: true, } }, Run: func(ctx context.Context, client hcapi2.Client, waiter state.ActionWaiter, cmd *cobra.Command, args []string) error { volume, _, err := client.Volume().Get(ctx, args[0]) if err != nil { return err } if volume == nil { return fmt.Errorf("volume not found: %s", args[0]) } var unknown []string opts := hcloud.VolumeChangeProtectionOpts{} for _, arg := range args[1:] { switch strings.ToLower(arg) { case "delete": opts.Delete = hcloud.Bool(false) default: unknown = append(unknown, arg) } } if len(unknown) > 0 { return fmt.Errorf("unknown protection level: %s", strings.Join(unknown, ", ")) } action, _, err := client.Volume().ChangeProtection(ctx, volume, opts) if err != nil { return err } if err := waiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Resource protection disabled for volume %d\n", volume.ID) return nil }, }
View Source
var EnableProtectionCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { return &cobra.Command{ Use: "enable-protection [FLAGS] VOLUME PROTECTIONLEVEL [PROTECTIONLEVEL...]", Short: "Enable resource protection for a volume", Args: cobra.MinimumNArgs(2), ValidArgsFunction: cmpl.SuggestArgs( cmpl.SuggestCandidatesF(client.Volume().Names), cmpl.SuggestCandidates("delete"), ), TraverseChildren: true, DisableFlagsInUseLine: true, } }, Run: func(ctx context.Context, client hcapi2.Client, waiter state.ActionWaiter, cmd *cobra.Command, args []string) error { volume, _, err := client.Volume().Get(ctx, args[0]) if err != nil { return err } if volume == nil { return fmt.Errorf("volume not found: %s", args[0]) } var unknown []string opts := hcloud.VolumeChangeProtectionOpts{} for _, arg := range args[1:] { switch strings.ToLower(arg) { case "delete": opts.Delete = hcloud.Bool(true) default: unknown = append(unknown, arg) } } if len(unknown) > 0 { return fmt.Errorf("unknown protection level: %s", strings.Join(unknown, ", ")) } action, _, err := client.Volume().ChangeProtection(ctx, volume, opts) if err != nil { return err } if err := waiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Resource protection enabled for volume %d\n", volume.ID) return nil }, }
View Source
var ResizeCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { cmd := &cobra.Command{ Use: "resize [FLAGS] VOLUME", Short: "Resize a volume", Args: cobra.ExactArgs(1), ValidArgsFunction: cmpl.SuggestArgs(cmpl.SuggestCandidatesF(client.Volume().Names)), TraverseChildren: true, DisableFlagsInUseLine: true, } cmd.Flags().Int("size", 0, "New size (GB) of the volume (required)") cmd.MarkFlagRequired("size") return cmd }, Run: func(ctx context.Context, client hcapi2.Client, waiter state.ActionWaiter, cmd *cobra.Command, args []string) error { volume, _, err := client.Volume().Get(ctx, args[0]) if err != nil { return err } if volume == nil { return fmt.Errorf("volume not found: %s", args[0]) } size, _ := cmd.Flags().GetInt("size") action, _, err := client.Volume().Resize(ctx, volume, size) if err != nil { return err } if err := waiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Volume %d resized\n", volume.ID) fmt.Printf("You might need to adjust the filesystem size on the server too\n") return nil }, }
Functions ¶
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.