Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DeleteCmd = base.DeleteCmd{ ResourceNameSingular: "image", ShortDescription: "Delete 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) }, Delete: func(s state.State, cmd *cobra.Command, resource interface{}) error { image := resource.(*hcloud.Image) if _, err := s.Client().Image().Delete(s, image); err != nil { return err } return nil }, }
View Source
var DescribeCmd = base.DescribeCmd{ ResourceNameSingular: "image", ShortDescription: "Describe an image", JSONKeyGetByID: "image", JSONKeyGetByName: "images", 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))) }, NameSuggestions: func(c hcapi2.Client) func() []string { return c.Image().Names }, Fetch: func(s state.State, cmd *cobra.Command, idOrName string) (interface{}, interface{}, 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.") } img, _, err := s.Client().Image().GetForArchitecture(s, idOrName, hcloud.Architecture(arch)) if err != nil { return nil, nil, err } return img, hcloud.SchemaFromImage(img), nil }, PrintText: func(_ state.State, cmd *cobra.Command, resource interface{}) error { image := resource.(*hcloud.Image) cmd.Printf("ID:\t\t%d\n", image.ID) cmd.Printf("Type:\t\t%s\n", image.Type) cmd.Printf("Status:\t\t%s\n", image.Status) cmd.Printf("Name:\t\t%s\n", util.NA(image.Name)) cmd.Printf("Created:\t%s (%s)\n", util.Datetime(image.Created), humanize.Time(image.Created)) if !image.Deprecated.IsZero() { cmd.Printf("Deprecated:\t%s (%s)\n", util.Datetime(image.Deprecated), humanize.Time(image.Deprecated)) } cmd.Printf("Description:\t%s\n", image.Description) if image.ImageSize != 0 { cmd.Printf("Image size:\t%.2f GB\n", image.ImageSize) } else { cmd.Printf("Image size:\t%s\n", util.NA("")) } cmd.Printf("Disk size:\t%.0f GB\n", image.DiskSize) cmd.Printf("OS flavor:\t%s\n", image.OSFlavor) cmd.Printf("OS version:\t%s\n", util.NA(image.OSVersion)) cmd.Printf("Architecture:\t%s\n", image.Architecture) cmd.Printf("Rapid deploy:\t%s\n", util.YesNo(image.RapidDeploy)) cmd.Printf("Protection:\n") cmd.Printf(" Delete:\t%s\n", util.YesNo(image.Protection.Delete)) cmd.Print("Labels:\n") if len(image.Labels) == 0 { cmd.Print(" No labels\n") } else { for key, value := range image.Labels { cmd.Printf(" %s: %s\n", key, value) } } if !image.Deprecated.IsZero() { cmd.Printf("\nAttention: This image is deprecated and will be removed in the future.\n") } return nil }, }
View Source
var DisableProtectionCmd = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { return &cobra.Command{ Use: "disable-protection <image> <protection-level>...", Short: "Disable resource protection for an image", ValidArgsFunction: cmpl.SuggestArgs( cmpl.SuggestCandidatesF(client.Image().Names), cmpl.SuggestCandidates("delete"), ), TraverseChildren: true, DisableFlagsInUseLine: true, } }, Run: func(s state.State, cmd *cobra.Command, args []string) error { imageID, err := strconv.ParseInt(args[0], 10, 64) if err != nil { return errors.New("invalid image ID") } image := &hcloud.Image{ID: imageID} opts, err := getChangeProtectionOpts(false, args[1:]) if err != nil { return err } return changeProtection(s, cmd, image, false, opts) }, }
View Source
var EnableProtectionCmd = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { return &cobra.Command{ Use: "enable-protection <image> <protection-level>...", Short: "Enable resource protection for an image", ValidArgsFunction: cmpl.SuggestArgs( cmpl.SuggestCandidatesF(client.Image().Names), cmpl.SuggestCandidates("delete"), ), TraverseChildren: true, DisableFlagsInUseLine: true, } }, Run: func(s state.State, cmd *cobra.Command, args []string) error { imageID, err := strconv.ParseInt(args[0], 10, 64) if err != nil { return errors.New("invalid image ID") } image := &hcloud.Image{ID: imageID} opts, err := getChangeProtectionOpts(true, args[1:]) if err != nil { return err } return changeProtection(s, cmd, image, true, opts) }, }
View Source
var LabelCmds = base.LabelCmds{ ResourceNameSingular: "image", ShortDescriptionAdd: "Add a label to an image", 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) if err != nil { return nil, 0, err } if image == nil { return nil, 0, fmt.Errorf("image not found: %s", idOrName) } return image.Labels, image.ID, nil }, SetLabels: func(s state.State, id int64, labels map[string]string) error { opts := hcloud.ImageUpdateOpts{ Labels: labels, } _, _, err := s.Client().Image().Update(s, &hcloud.Image{ID: id}, opts) return err }, }
View Source
var ListCmd = base.ListCmd{ ResourceNamePlural: "Images", JSONKeyGetByName: "images", DefaultColumns: []string{"id", "type", "name", "description", "architecture", "image_size", "disk_size", "created", "deprecated"}, AdditionalFlags: func(cmd *cobra.Command) { cmd.Flags().StringSliceP("type", "t", []string{}, "Only show images of given type: system|app|snapshot|backup") cmd.RegisterFlagCompletionFunc("type", cmpl.SuggestCandidates("backup", "snapshot", "system", "app")) cmd.Flags().StringSliceP("architecture", "a", []string{}, "Only show images of given architecture: x86|arm") cmd.RegisterFlagCompletionFunc("architecture", cmpl.SuggestCandidates(string(hcloud.ArchitectureX86), string(hcloud.ArchitectureARM))) }, Fetch: func(s state.State, flags *pflag.FlagSet, listOpts hcloud.ListOpts, sorts []string) ([]interface{}, error) { opts := hcloud.ImageListOpts{ListOpts: listOpts, IncludeDeprecated: true} types, _ := flags.GetStringSlice("type") var ( unknown []string ) for _, imageType := range types { switch imageType { case string(hcloud.ImageTypeBackup), string(hcloud.ImageTypeSnapshot), string(hcloud.ImageTypeSystem), string(hcloud.ImageTypeApp): opts.Type = append(opts.Type, hcloud.ImageType(imageType)) default: unknown = append(unknown, imageType) } } if len(unknown) > 0 { return nil, fmt.Errorf("unknown image type: %s\n", strings.Join(unknown, ", ")) } architecture, _ := flags.GetStringSlice("architecture") if len(architecture) > 0 { for _, arch := range architecture { opts.Architecture = append(opts.Architecture, hcloud.Architecture(arch)) } } if len(sorts) > 0 { opts.Sort = sorts } images, err := s.Client().Image().AllWithOpts(s, opts) var resources []interface{} for _, n := range images { resources = append(resources, n) } return resources, err }, OutputTable: func(client hcapi2.Client) *output.Table { return output.NewTable(). AddAllowedFields(hcloud.Image{}). AddFieldAlias("imagesize", "image size"). AddFieldAlias("disksize", "disk size"). AddFieldAlias("osflavor", "os flavor"). AddFieldAlias("osversion", "os version"). AddFieldAlias("rapiddeploy", "rapid deploy"). AddFieldAlias("createdfrom", "created from"). AddFieldAlias("boundto", "bound to"). AddFieldFn("name", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) return util.NA(image.Name) })). AddFieldFn("image_size", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) if image.ImageSize == 0 { return util.NA("") } return fmt.Sprintf("%.2f GB", image.ImageSize) })). AddFieldFn("disk_size", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) return fmt.Sprintf("%.0f GB", image.DiskSize) })). AddFieldFn("created", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) return humanize.Time(image.Created) })). AddFieldFn("bound_to", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) if image.BoundTo != nil { return client.Server().ServerName(image.BoundTo.ID) } return util.NA("") })). AddFieldFn("created_from", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) if image.CreatedFrom != nil { return client.Server().ServerName(image.CreatedFrom.ID) } return util.NA("") })). AddFieldFn("protection", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) var protection []string if image.Protection.Delete { protection = append(protection, "delete") } return strings.Join(protection, ", ") })). AddFieldFn("labels", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) return util.LabelsToString(image.Labels) })). AddFieldFn("created", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) return util.Datetime(image.Created) })). AddFieldFn("age", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) return util.Age(image.Created, time.Now()) })). AddFieldFn("deprecated", output.FieldFn(func(obj interface{}) string { image := obj.(*hcloud.Image) if image.Deprecated.IsZero() { return "-" } return util.Datetime(image.Deprecated) })) }, Schema: func(resources []interface{}) interface{} { imageSchemas := make([]schema.Image, 0, len(resources)) for _, resource := range resources { image := resource.(*hcloud.Image) imageSchemas = append(imageSchemas, hcloud.SchemaFromImage(image)) } return imageSchemas }, }
View Source
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")) }, Update: func(s state.State, cmd *cobra.Command, resource interface{}, flags map[string]pflag.Value) error { image := resource.(*hcloud.Image) updOpts := hcloud.ImageUpdateOpts{ Description: hcloud.String(flags["description"].String()), Type: hcloud.ImageType(flags["type"].String()), } _, _, err := s.Client().Image().Update(s, image, updOpts) if err != nil { return err } return nil }, }
Functions ¶
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.