Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var AddToPlacementGroupCommand = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { cmd := &cobra.Command{ Use: "add-to-placement-group [FLAGS] SERVER", Short: "Add a server to a placement group", Args: cobra.ExactArgs(1), ValidArgsFunction: cmpl.SuggestArgs(cmpl.SuggestCandidatesF(client.Server().Names)), } cmd.Flags().StringP("placement-group", "g", "", "Placement Group (ID or name) (required)") cmd.RegisterFlagCompletionFunc("placement-group", cmpl.SuggestCandidatesF(client.PlacementGroup().Names)) cmd.MarkFlagRequired(("placement-group")) return cmd }, Run: func(ctx context.Context, client hcapi2.Client, actionWaiter state.ActionWaiter, cmd *cobra.Command, args []string) error { idOrName := args[0] server, _, err := client.Server().Get(ctx, idOrName) if err != nil { return err } if server == nil { return fmt.Errorf("server not found %s", idOrName) } placementGroupIDOrName, _ := cmd.Flags().GetString("placement-group") placementGroup, _, err := client.PlacementGroup().Get(ctx, placementGroupIDOrName) if err != nil { return err } if placementGroup == nil { return fmt.Errorf("placement group not found %s", placementGroupIDOrName) } action, _, err := client.Server().AddToPlacementGroup(ctx, server, placementGroup) if err != nil { return err } if err := actionWaiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Server %d added to placement group %s\n", server.ID, placementGroupIDOrName) return nil }, }
View Source
var CreateCmd = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { cmd := &cobra.Command{ Use: "create FLAGS", Short: "Create a server", } cmd.Flags().String("name", "", "Server name (required)") cmd.MarkFlagRequired("name") cmd.Flags().String("type", "", "Server type (ID or name) (required)") cmd.RegisterFlagCompletionFunc("type", cmpl.SuggestCandidatesF(client.ServerType().Names)) cmd.MarkFlagRequired("type") cmd.Flags().String("image", "", "Image (ID or name) (required)") cmd.RegisterFlagCompletionFunc("image", cmpl.SuggestCandidatesF(client.Image().Names)) cmd.MarkFlagRequired("image") cmd.Flags().String("location", "", "Location (ID or name)") cmd.RegisterFlagCompletionFunc("location", cmpl.SuggestCandidatesF(client.Location().Names)) cmd.Flags().String("datacenter", "", "Datacenter (ID or name)") cmd.RegisterFlagCompletionFunc("datacenter", cmpl.SuggestCandidatesF(client.Datacenter().Names)) cmd.Flags().StringSlice("ssh-key", nil, "ID or name of SSH key to inject (can be specified multiple times)") cmd.RegisterFlagCompletionFunc("ssh-key", cmpl.SuggestCandidatesF(client.SSHKey().Names)) cmd.Flags().StringToString("label", nil, "User-defined labels ('key=value') (can be specified multiple times)") cmd.Flags().StringArray("user-data-from-file", []string{}, "Read user data from specified file (use - to read from stdin)") cmd.Flags().Bool("start-after-create", true, "Start server right after creation") cmd.Flags().StringSlice("volume", nil, "ID or name of volume to attach (can be specified multiple times)") cmd.RegisterFlagCompletionFunc("volume", cmpl.SuggestCandidatesF(client.Volume().Names)) cmd.Flags().StringSlice("network", nil, "ID or name of network to attach the server to (can be specified multiple times)") cmd.RegisterFlagCompletionFunc("network", cmpl.SuggestCandidatesF(client.Network().Names)) cmd.Flags().StringSlice("firewall", nil, "ID or name of Firewall to attach the server to (can be specified multiple times)") cmd.RegisterFlagCompletionFunc("firewall", cmpl.SuggestCandidatesF(client.Firewall().Names)) cmd.Flags().Bool("automount", false, "Automount volumes after attach (default: false)") cmd.Flags().Bool("allow-deprecated-image", false, "Enable the use of deprecated images (default: false)") cmd.Flags().String("placement-group", "", "Placement Group (ID of name)") cmd.RegisterFlagCompletionFunc("placement-group", cmpl.SuggestCandidatesF(client.PlacementGroup().Names)) cmd.Flags().String("primary-ipv4", "", "Primary IPv4 (ID of name)") cmd.RegisterFlagCompletionFunc("primary-ipv4", cmpl.SuggestCandidatesF(client.PrimaryIP().IPv4Names)) cmd.Flags().String("primary-ipv6", "", "Primary IPv6 (ID of name)") cmd.RegisterFlagCompletionFunc("primary-ipv6", cmpl.SuggestCandidatesF(client.PrimaryIP().IPv6Names)) cmd.Flags().Bool("without-ipv4", false, "Creates the server without an IPv4 (default: false)") cmd.Flags().Bool("without-ipv6", false, "Creates the server without an IPv6 (default: false)") return cmd }, Run: func(ctx context.Context, client hcapi2.Client, actionWaiter state.ActionWaiter, cmd *cobra.Command, args []string) error { opts, err := createOptsFromFlags(ctx, client, cmd.Flags()) if err != nil { return err } result, _, err := client.Server().Create(ctx, opts) if err != nil { return err } if err := actionWaiter.ActionProgress(ctx, result.Action); err != nil { return err } if err := actionWaiter.WaitForActions(ctx, result.NextActions); err != nil { return err } server, _, err := client.Server().GetByID(ctx, result.Server.ID) if err != nil { return err } fmt.Printf("Server %d created\n", result.Server.ID) if !server.PublicNet.IPv4.IsUnspecified() { fmt.Printf("IPv4: %s\n", server.PublicNet.IPv4.IP.String()) } if !server.PublicNet.IPv6.IsUnspecified() { fmt.Printf("IPv6: %s1\n", server.PublicNet.IPv6.Network.IP.String()) fmt.Printf("IPv6 Network: %s\n", server.PublicNet.IPv6.Network.String()) } if len(server.PrivateNet) > 0 { var networks []string for _, network := range server.PrivateNet { networks = append(networks, fmt.Sprintf("- %s (%s)", network.IP.String(), client.Network().Name(network.Network.ID))) } fmt.Printf("Private Networks:\n\t%s\n", strings.Join(networks, "\n")) } if result.RootPassword != "" { fmt.Printf("Root password: %s\n", result.RootPassword) } return nil }, }
CreateCmd defines a command for creating a server.
View Source
var ListCmd = base.ListCmd{ ResourceNamePlural: "servers", DefaultColumns: []string{"id", "name", "status", "ipv4", "ipv6", "private_net", "datacenter"}, Fetch: func(ctx context.Context, client hcapi2.Client, cmd *cobra.Command, listOpts hcloud.ListOpts, sorts []string) ([]interface{}, error) { opts := hcloud.ServerListOpts{ListOpts: listOpts} if len(sorts) > 0 { opts.Sort = sorts } servers, err := client.Server().AllWithOpts(ctx, opts) var resources []interface{} for _, r := range servers { resources = append(resources, r) } return resources, err }, OutputTable: func(client hcapi2.Client) *output.Table { return output.NewTable(). AddAllowedFields(hcloud.Server{}). AddFieldFn("ipv4", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) if server.PublicNet.IPv4.IsUnspecified() { return "-" } return server.PublicNet.IPv4.IP.String() })). AddFieldFn("ipv6", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) if server.PublicNet.IPv6.IsUnspecified() { return "-" } return server.PublicNet.IPv6.Network.String() })). AddFieldFn("included_traffic", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return humanize.IBytes(server.IncludedTraffic) })). AddFieldFn("ingoing_traffic", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return humanize.IBytes(server.IngoingTraffic) })). AddFieldFn("outgoing_traffic", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return humanize.IBytes(server.OutgoingTraffic) })). AddFieldFn("datacenter", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return server.Datacenter.Name })). AddFieldFn("location", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return server.Datacenter.Location.Name })). AddFieldFn("labels", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return util.LabelsToString(server.Labels) })). AddFieldFn("type", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return server.ServerType.Name })). AddFieldFn("volumes", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) var volumes []string for _, volume := range server.Volumes { volumeID := strconv.Itoa(volume.ID) volumes = append(volumes, volumeID) } return strings.Join(volumes, ", ") })). AddFieldFn("private_net", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) var networks []string for _, network := range server.PrivateNet { networks = append(networks, fmt.Sprintf("%s (%s)", network.IP.String(), client.Network().Name(network.Network.ID))) } return util.NA(strings.Join(networks, ", ")) })). AddFieldFn("protection", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) var protection []string if server.Protection.Delete { protection = append(protection, "delete") } if server.Protection.Rebuild { protection = append(protection, "rebuild") } return strings.Join(protection, ", ") })). AddFieldFn("created", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) return util.Datetime(server.Created) })). AddFieldFn("placement_group", output.FieldFn(func(obj interface{}) string { server := obj.(*hcloud.Server) if server.PlacementGroup == nil { return "-" } return server.PlacementGroup.Name })) }, JSONSchema: func(resources []interface{}) interface{} { var serversSchema []schema.Server for _, resource := range resources { server := resource.(*hcloud.Server) serverSchema := schema.Server{ ID: server.ID, Name: server.Name, Status: string(server.Status), Created: server.Created, Datacenter: util.DatacenterToSchema(*server.Datacenter), ServerType: util.ServerTypeToSchema(*server.ServerType), PublicNet: schema.ServerPublicNet{ IPv4: schema.ServerPublicNetIPv4{ IP: server.PublicNet.IPv4.IP.String(), Blocked: server.PublicNet.IPv4.Blocked, DNSPtr: server.PublicNet.IPv4.DNSPtr, }, IPv6: schema.ServerPublicNetIPv6{ IP: server.PublicNet.IPv6.IP.String(), Blocked: server.PublicNet.IPv6.Blocked, }, }, RescueEnabled: server.RescueEnabled, BackupWindow: hcloud.String(server.BackupWindow), OutgoingTraffic: &server.OutgoingTraffic, IngoingTraffic: &server.IngoingTraffic, IncludedTraffic: server.IncludedTraffic, Protection: schema.ServerProtection{ Delete: server.Protection.Delete, Rebuild: server.Protection.Rebuild, }, Labels: server.Labels, PrimaryDiskSize: server.PrimaryDiskSize, } if server.Image != nil { serverImage := util.ImageToSchema(*server.Image) serverSchema.Image = &serverImage } if server.ISO != nil { serverISO := util.ISOToSchema(*server.ISO) serverSchema.ISO = &serverISO } for ip, dnsPTR := range server.PublicNet.IPv6.DNSPtr { serverSchema.PublicNet.IPv6.DNSPtr = append(serverSchema.PublicNet.IPv6.DNSPtr, schema.ServerPublicNetIPv6DNSPtr{ IP: ip, DNSPtr: dnsPTR, }) } for _, floatingIP := range server.PublicNet.FloatingIPs { serverSchema.PublicNet.FloatingIPs = append(serverSchema.PublicNet.FloatingIPs, floatingIP.ID) } for _, volume := range server.Volumes { serverSchema.Volumes = append(serverSchema.Volumes, volume.ID) } for _, privateNet := range server.PrivateNet { privateNetSchema := schema.ServerPrivateNet{ Network: privateNet.Network.ID, IP: privateNet.IP.String(), MACAddress: privateNet.MACAddress, } for _, aliasIP := range privateNet.Aliases { privateNetSchema.AliasIPs = append(privateNetSchema.AliasIPs, aliasIP.String()) } serverSchema.PrivateNet = append(serverSchema.PrivateNet, privateNetSchema) } serversSchema = append(serversSchema, serverSchema) } return serversSchema }, }
View Source
var RemoveFromPlacementGroup = base.Cmd{ BaseCobraCommand: func(client hcapi2.Client) *cobra.Command { cmd := &cobra.Command{ Use: "remove-from-placement-group SERVER", Short: "Removes a server from a placement group", Args: cobra.ExactArgs(1), ValidArgsFunction: cmpl.SuggestArgs(cmpl.SuggestCandidatesF(client.Server().Names)), } return cmd }, Run: func(ctx context.Context, client hcapi2.Client, actionWaiter state.ActionWaiter, cmd *cobra.Command, args []string) error { idOrName := args[0] server, _, err := client.Server().Get(ctx, idOrName) if err != nil { return err } if server == nil { return fmt.Errorf("server not found: %s", idOrName) } action, _, err := client.Server().RemoveFromPlacementGroup(ctx, server) if err != nil { return err } if err := actionWaiter.ActionProgress(ctx, action); err != nil { return err } fmt.Printf("Server %d removed from placement group\n", server.ID) return nil }, }
Functions ¶
Types ¶
This section is empty.
Source Files
¶
- add_to_placement_group.go
- attach_iso.go
- attach_to_network.go
- change_alias_ips.go
- change_type.go
- create.go
- create_image.go
- delete.go
- describe.go
- detach_from_network.go
- detach_iso.go
- disable_backup.go
- disable_protection.go
- disable_rescue.go
- enable_backup.go
- enable_protection.go
- enable_rescue.go
- ip.go
- labels.go
- list.go
- metrics.go
- poweroff.go
- poweron.go
- reboot.go
- rebuild.go
- remove_from_placement_group.go
- request_console.go
- reset.go
- reset_password.go
- server.go
- set_rdns.go
- shutdown.go
- ssh.go
- update.go
Click to show internal directories.
Click to hide internal directories.