Skip to content

Commit 8e713ae

Browse files
committed
feat: split datacenter name input
1 parent 921e4ae commit 8e713ae

File tree

2 files changed

+43
-11
lines changed

2 files changed

+43
-11
lines changed

internal/cmd/primaryip/create.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package primaryip
22

33
import (
44
"fmt"
5+
"strings"
56

67
"github.com/spf13/cobra"
78

@@ -34,10 +35,10 @@ See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters`,
3435

3536
cmd.Flags().Int64("assignee-id", 0, "Assignee (usually a Server) to assign Primary IP to")
3637

37-
cmd.Flags().String("location", "", "Location of Primary IP")
38+
cmd.Flags().String("location", "", "Location (ID or name) of Primary IP")
3839
_ = cmd.RegisterFlagCompletionFunc("location", cmpl.SuggestCandidatesF(client.Location().Names))
3940

40-
cmd.Flags().String("datacenter", "", "Datacenter (ID or name) (deprecated)")
41+
cmd.Flags().String("datacenter", "", "Datacenter (name) (deprecated)")
4142
_ = cmd.RegisterFlagCompletionFunc("datacenter", cmpl.SuggestCandidatesF(client.Datacenter().Names))
4243

4344
cmd.Flags().StringToString("label", nil, "User-defined labels ('key=value') (can be specified multiple times)")
@@ -70,7 +71,6 @@ See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters`,
7071
Type: hcloud.PrimaryIPType(typ),
7172
Name: name,
7273
AssigneeType: "server",
73-
Datacenter: datacenter,
7474
Labels: labels,
7575
}
7676
if assigneeID != 0 {
@@ -91,6 +91,17 @@ See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters`,
9191
}
9292
if cmd.Flags().Changed("datacenter") {
9393
cmd.PrintErrln("Warning: The --datacenter flag is deprecated. Use --location or --assignee-id instead.")
94+
95+
// Backward compatible datacenter argument.
96+
// datacenter hel1-dc2 => location hel1
97+
parts := strings.Split(datacenter, "-")
98+
99+
if len(parts) != 2 {
100+
return nil, nil, fmt.Errorf("Datacenter name is not valid, expected format $LOCATION-$DATACENTER, but got: %s", datacenter)
101+
}
102+
103+
locationName := parts[0]
104+
createOpts.Location = locationName
94105
}
95106

96107
result, _, err := s.Client().PrimaryIP().Create(s, createOpts)

internal/cmd/server/create.go

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"mime/multipart"
1010
"net/textproto"
1111
"os"
12+
"strconv"
1213
"strings"
1314
"time"
1415

@@ -439,16 +440,36 @@ func createOptsFromFlags(
439440
if datacenterIDOrName != "" {
440441
cmd.PrintErrln("Warning: The --datacenter flag is deprecated. Use --location instead.")
441442

442-
var datacenter *hcloud.Datacenter
443-
datacenter, _, err = s.Client().Datacenter().Get(s, datacenterIDOrName)
443+
// If parseable as ID -> GetByID and use Location Name
444+
// Else -> Backwards-compatible split
445+
var datacenterID int64
446+
datacenterID, err = strconv.ParseInt(datacenterIDOrName, 10, 64)
447+
444448
if err != nil {
445-
return
446-
}
447-
if datacenter == nil {
448-
err = fmt.Errorf("Datacenter not found: %s", datacenterIDOrName)
449-
return
449+
// Input was a valid number/ID
450+
var datacenter *hcloud.Datacenter
451+
datacenter, _, err = s.Client().Datacenter().GetByID(s, datacenterID)
452+
if err != nil {
453+
return
454+
}
455+
if datacenter == nil {
456+
err = fmt.Errorf("Datacenter not found: %s", datacenterIDOrName)
457+
return
458+
}
459+
createOpts.Location = datacenter.Location
460+
} else {
461+
// Input was not a valid number/ID, probably DC name
462+
463+
// Backward compatible datacenter argument.
464+
// datacenter hel1-dc2 => location hel1
465+
parts := strings.Split(datacenterIDOrName, "-")
466+
467+
if len(parts) != 2 {
468+
err = fmt.Errorf("Datacenter name is not valid, expected format $LOCATION-$DATACENTER, but got: %s", datacenterIDOrName)
469+
}
470+
471+
createOpts.Location = &hcloud.Location{Name: parts[0]}
450472
}
451-
createOpts.Datacenter = datacenter
452473
}
453474

454475
if locationIDOrName != "" {

0 commit comments

Comments
 (0)