diff --git a/docs/reference/manual/hcloud_primary-ip_create.md b/docs/reference/manual/hcloud_primary-ip_create.md index b28a7fba4..b3b639782 100644 --- a/docs/reference/manual/hcloud_primary-ip_create.md +++ b/docs/reference/manual/hcloud_primary-ip_create.md @@ -6,9 +6,6 @@ Create a Primary IP Create a Primary IP. -The --datacenter flag is deprecated. Use --location or --assignee-id instead. -See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters. - The --assignee-type flag will be required together with the --assignee-id flag. Using the default value (server) for the --assignee-type flag is deprecated. Consider explicitly setting the --assignee-type flag. @@ -27,7 +24,6 @@ hcloud primary-ip create [options] --type --name --assignee-id int Assignee (usually a Server) to assign Primary IP to --assignee-type string Assignee Type to assign Primary IP to (default: server) (default "server") --auto-delete Delete Primary IP if assigned resource is deleted (true, false) - --datacenter string Datacenter (name) (deprecated) --enable-protection strings Enable protection (delete) (default: none) -h, --help help for create --label stringToString User-defined labels ('key=value') (can be specified multiple times) (default []) diff --git a/docs/reference/manual/hcloud_server_create.md b/docs/reference/manual/hcloud_server_create.md index a3ac55bb0..cb510059e 100644 --- a/docs/reference/manual/hcloud_server_create.md +++ b/docs/reference/manual/hcloud_server_create.md @@ -6,9 +6,6 @@ Create a Server Create a Server. -The --datacenter flag is deprecated. Use --location instead. -See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters. - ``` hcloud server create [options] --name --type --image ``` @@ -18,7 +15,6 @@ hcloud server create [options] --name --type --image location hel1 - parts := strings.Split(datacenter, "-") - - if len(parts) != 2 { - return nil, nil, fmt.Errorf("Datacenter name is not valid, expected format $LOCATION-$DATACENTER, but got: %s", datacenter) - } - - locationName := parts[0] - createOpts.Location = locationName - } result, _, err := s.Client().PrimaryIP().Create(s, createOpts) if err != nil { diff --git a/internal/cmd/primaryip/create_test.go b/internal/cmd/primaryip/create_test.go index 99b93141f..898eba753 100644 --- a/internal/cmd/primaryip/create_test.go +++ b/internal/cmd/primaryip/create_test.go @@ -33,6 +33,10 @@ func TestCreate(t *testing.T) { Labels: map[string]string{"foo": "bar"}, } + fx.Client.LocationClient.EXPECT(). + Get(gomock.Any(), "fsn1"). + Return(&hcloud.Location{Name: "fsn1"}, &hcloud.Response{}, nil) + fx.Client.PrimaryIPClient.EXPECT(). Create( gomock.Any(), @@ -59,16 +63,14 @@ func TestCreate(t *testing.T) { GetByID(gomock.Any(), primaryIP.ID). Return(primaryIP, &hcloud.Response{}, nil) - out, errOut, err := fx.Run(cmd, []string{"--name=my-ip", "--type=ipv4", "--datacenter=fsn1-dc14", "--auto-delete", "--label", "foo=bar"}) - - expErr := "Warning: The --datacenter flag is deprecated. Use --location or --assignee-id instead.\n" + out, errOut, err := fx.Run(cmd, []string{"--name=my-ip", "--type=ipv4", "--location=fsn1", "--auto-delete", "--label", "foo=bar"}) expOut := `Primary IP 1 created IPv4: 192.168.2.1 ` require.NoError(t, err) - assert.Equal(t, expErr, errOut) + assert.Empty(t, errOut) assert.Equal(t, expOut, out) } @@ -89,11 +91,6 @@ func TestCreateJSON(t *testing.T) { Location: &hcloud.Location{ Name: "fsn1", }, - Datacenter: &hcloud.Datacenter{ - ID: 1, - Name: "fsn1-dc14", - Location: &hcloud.Location{ID: 1, Name: "fsn1"}, - }, Created: time.Date(2016, 1, 30, 23, 50, 0, 0, time.UTC), Labels: map[string]string{"foo": "bar"}, AutoDelete: true, @@ -102,6 +99,10 @@ func TestCreateJSON(t *testing.T) { DNSPtr: map[string]string{}, } + fx.Client.LocationClient.EXPECT(). + Get(gomock.Any(), "fsn1"). + Return(&hcloud.Location{Name: "fsn1"}, nil, nil) + fx.Client.PrimaryIPClient.EXPECT(). Create( gomock.Any(), @@ -125,10 +126,9 @@ func TestCreateJSON(t *testing.T) { GetByID(gomock.Any(), primaryIP.ID). Return(primaryIP, nil, nil) - jsonOut, out, err := fx.Run(cmd, []string{"-o=json", "--name=my-ip", "--type=ipv4", "--datacenter=fsn1-dc14", "--auto-delete", "--label", "foo=bar"}) + jsonOut, out, err := fx.Run(cmd, []string{"-o=json", "--name=my-ip", "--type=ipv4", "--location=fsn1", "--auto-delete", "--label", "foo=bar"}) - expOut := `Warning: The --datacenter flag is deprecated. Use --location or --assignee-id instead. -Primary IP 1 created + expOut := `Primary IP 1 created ` require.NoError(t, err) diff --git a/internal/cmd/primaryip/describe.go b/internal/cmd/primaryip/describe.go index f78e31dee..c39a6c042 100644 --- a/internal/cmd/primaryip/describe.go +++ b/internal/cmd/primaryip/describe.go @@ -8,7 +8,6 @@ import ( "github.com/spf13/cobra" "github.com/hetznercloud/cli/internal/cmd/base" - "github.com/hetznercloud/cli/internal/cmd/datacenter" "github.com/hetznercloud/cli/internal/cmd/location" "github.com/hetznercloud/cli/internal/cmd/util" "github.com/hetznercloud/cli/internal/hcapi2" @@ -27,7 +26,7 @@ var DescribeCmd = base.DescribeCmd[*hcloud.PrimaryIP]{ } return ip, hcloud.SchemaFromPrimaryIP(ip), nil }, - PrintText: func(s state.State, _ *cobra.Command, out io.Writer, primaryIP *hcloud.PrimaryIP) error { + PrintText: func(_ state.State, _ *cobra.Command, out io.Writer, primaryIP *hcloud.PrimaryIP) error { fmt.Fprintf(out, "ID:\t%d\n", primaryIP.ID) fmt.Fprintf(out, "Name:\t%s\n", primaryIP.Name) fmt.Fprintf(out, "Created:\t%s (%s)\n", util.Datetime(primaryIP.Created), humanize.Time(primaryIP.Created)) @@ -66,12 +65,6 @@ var DescribeCmd = base.DescribeCmd[*hcloud.PrimaryIP]{ fmt.Fprintf(out, "Location:\n") fmt.Fprintf(out, "%s", util.PrefixLines(location.DescribeLocation(primaryIP.Location), " ")) - if primaryIP.Datacenter != nil { - fmt.Fprintln(out) - fmt.Fprintf(out, "Datacenter:\n") - fmt.Fprintf(out, "%s", util.PrefixLines(datacenter.DescribeDatacenter(s.Client(), primaryIP.Datacenter, true), " ")) - } - return nil }, } diff --git a/internal/cmd/primaryip/testdata/create_response.json b/internal/cmd/primaryip/testdata/create_response.json index 383bf1e23..fd2b4a8f0 100644 --- a/internal/cmd/primaryip/testdata/create_response.json +++ b/internal/cmd/primaryip/testdata/create_response.json @@ -15,21 +15,6 @@ "name": "fsn1", "network_zone": "" }, - "datacenter": { - "description": "", - "id": 1, - "location": { - "city": "", - "country": "", - "description": "", - "id": 1, - "latitude": 0, - "longitude": 0, - "name": "fsn1", - "network_zone": "" - }, - "name": "fsn1-dc14" - }, "dns_ptr": [], "id": 1, "ip": "192.168.2.1", diff --git a/internal/cmd/server/create.go b/internal/cmd/server/create.go index c8b16cd5c..45a5f817c 100644 --- a/internal/cmd/server/create.go +++ b/internal/cmd/server/create.go @@ -9,7 +9,6 @@ import ( "mime/multipart" "net/textproto" "os" - "strconv" "strings" "time" @@ -42,10 +41,7 @@ var CreateCmd = base.CreateCmd[*createResult]{ cmd := &cobra.Command{ Use: "create [options] --name --type --image ", Short: "Create a Server", - Long: `Create a Server. - -The --datacenter flag is deprecated. Use --location instead. -See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters.`, + Long: `Create a Server.`, } cmd.Flags().String("name", "", "Server name (required)") @@ -62,9 +58,6 @@ See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters.`, cmd.Flags().String("location", "", "Location (ID or name)") _ = cmd.RegisterFlagCompletionFunc("location", cmpl.SuggestCandidatesF(client.Location().Names)) - cmd.Flags().String("datacenter", "", "Datacenter (ID or name) (deprecated)") - _ = 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)) @@ -114,8 +107,6 @@ See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters.`, var locName string if createOpts.Location != nil { locName = createOpts.Location.Name - } else if createOpts.Datacenter != nil { - locName = createOpts.Datacenter.Location.Name } cmd.Print(deprecatedServerTypeWarning(createOpts.ServerType, locName)) @@ -275,7 +266,6 @@ func createOptsFromFlags( serverTypeName, _ := flags.GetString("type") imageIDorName, _ := flags.GetString("image") locationIDOrName, _ := flags.GetString("location") - datacenterIDOrName, _ := flags.GetString("datacenter") userDataFiles, _ := flags.GetStringArray("user-data-from-file") startAfterCreate, _ := flags.GetBool("start-after-create") sshKeys, _ := flags.GetStringSlice("ssh-key") @@ -438,41 +428,6 @@ func createOptsFromFlags( createOpts.Firewalls = append(createOpts.Firewalls, &hcloud.ServerCreateFirewall{Firewall: *firewall}) } - if datacenterIDOrName != "" { - cmd.PrintErrln("Warning: The --datacenter flag is deprecated. Use --location instead.") - - // If parseable as ID -> GetByID and use Location Name - // Else -> Backwards-compatible split - var datacenterID int64 - datacenterID, err = strconv.ParseInt(datacenterIDOrName, 10, 64) - if err == nil { - // Input was a valid number/ID - var datacenter *hcloud.Datacenter - datacenter, _, err = s.Client().Datacenter().GetByID(s, datacenterID) - if err != nil { - return - } - if datacenter == nil { - err = fmt.Errorf("Datacenter not found: %s", datacenterIDOrName) - return - } - createOpts.Location = datacenter.Location - } else { - // Input was not a valid number/ID, probably DC name - - // Backward compatible datacenter argument. - // datacenter hel1-dc2 => location hel1 - parts := strings.Split(datacenterIDOrName, "-") - - if len(parts) != 2 { - err = fmt.Errorf("Datacenter name is not valid, expected format $LOCATION-$DATACENTER, but got: %s", datacenterIDOrName) - return - } - - createOpts.Location = &hcloud.Location{Name: parts[0]} - } - } - if locationIDOrName != "" { var location *hcloud.Location location, _, err = s.Client().Location().Get(s, locationIDOrName) diff --git a/internal/cmd/server/create_test.go b/internal/cmd/server/create_test.go index c12d473e4..a778a3475 100644 --- a/internal/cmd/server/create_test.go +++ b/internal/cmd/server/create_test.go @@ -134,14 +134,6 @@ func TestCreateJSON(t *testing.T) { }, Created: time.Date(2016, 1, 30, 23, 50, 0, 0, time.UTC), Labels: make(map[string]string), - Datacenter: &hcloud.Datacenter{ - ID: 1, - Name: "fsn1-dc14", - Location: &hcloud.Location{ - ID: 1, - Name: "fsn1", - }, - }, ServerType: &hcloud.ServerType{ ID: 1, Name: "cpx22", diff --git a/internal/cmd/server/describe.go b/internal/cmd/server/describe.go index cf308eaa2..501dc942e 100644 --- a/internal/cmd/server/describe.go +++ b/internal/cmd/server/describe.go @@ -9,7 +9,6 @@ import ( "github.com/spf13/cobra" "github.com/hetznercloud/cli/internal/cmd/base" - "github.com/hetznercloud/cli/internal/cmd/datacenter" "github.com/hetznercloud/cli/internal/cmd/image" "github.com/hetznercloud/cli/internal/cmd/iso" "github.com/hetznercloud/cli/internal/cmd/location" @@ -149,12 +148,6 @@ var DescribeCmd = base.DescribeCmd[*hcloud.Server]{ fmt.Fprintf(out, "Location:\n") fmt.Fprint(out, util.PrefixLines(location.DescribeLocation(server.Location), " ")) - if server.Datacenter != nil { - fmt.Fprintln(out) - fmt.Fprintf(out, "Datacenter:\n") - fmt.Fprintf(out, "%s", util.PrefixLines(datacenter.DescribeDatacenter(s.Client(), server.Datacenter, true), " ")) - } - fmt.Fprintln(out) if server.BackupWindow != "" { fmt.Fprintf(out, "Backup Window:\t%s\n", server.BackupWindow) diff --git a/internal/cmd/server/list.go b/internal/cmd/server/list.go index 1acc324ed..97f847d1c 100644 --- a/internal/cmd/server/list.go +++ b/internal/cmd/server/list.go @@ -88,12 +88,6 @@ var ListCmd = &base.ListCmd[*hcloud.Server, schema.Server]{ AddFieldFn("outgoing_traffic", func(server *hcloud.Server) string { return humanize.IBytes(server.OutgoingTraffic) }). - AddFieldFn("datacenter", func(server *hcloud.Server) string { - if server.Datacenter != nil { - return server.Datacenter.Name - } - return "-" - }). AddFieldFn("location", func(server *hcloud.Server) string { return server.Location.Name }). @@ -139,8 +133,7 @@ var ListCmd = &base.ListCmd[*hcloud.Server, schema.Server]{ return "-" } return server.PlacementGroup.Name - }). - MarkFieldAsDeprecated("datacenter", "The datacenter column is deprecated. Use location column instead.") + }) }, Schema: hcloud.SchemaFromServer, diff --git a/internal/cmd/server/testdata/create_response.json b/internal/cmd/server/testdata/create_response.json index 7124fe38d..25a61997d 100644 --- a/internal/cmd/server/testdata/create_response.json +++ b/internal/cmd/server/testdata/create_response.json @@ -13,21 +13,6 @@ "name": "", "network_zone": "" }, - "datacenter": { - "description": "", - "id": 1, - "location": { - "city": "", - "country": "", - "description": "", - "id": 1, - "latitude": 0, - "longitude": 0, - "name": "fsn1", - "network_zone": "" - }, - "name": "fsn1-dc14" - }, "id": 1234, "image": { "architecture": "", @@ -106,8 +91,20 @@ "prices": null, "storage_type": "local", "locations": [ - { "id": 1, "name": "fsn1", "deprecation": null, "available": true, "recommended": true }, - { "id": 2, "name": "nbg1", "deprecation": null, "available": true, "recommended": false } + { + "id": 1, + "name": "fsn1", + "deprecation": null, + "available": true, + "recommended": true + }, + { + "id": 2, + "name": "nbg1", + "deprecation": null, + "available": true, + "recommended": false + } ] }, "status": "running",