Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package hcloud-cli for openSUSE:Factory 
checked in at 2026-01-12 10:25:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hcloud-cli (Old)
 and      /work/SRC/openSUSE:Factory/.hcloud-cli.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "hcloud-cli"

Mon Jan 12 10:25:31 2026 rev:13 rq:1326627 version:1.59.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/hcloud-cli/hcloud-cli.changes    2025-12-19 
16:47:01.188817311 +0100
+++ /work/SRC/openSUSE:Factory/.hcloud-cli.new.1928/hcloud-cli.changes  
2026-01-12 10:34:08.837160892 +0100
@@ -1,0 +2,47 @@
+Sun Jan 11 08:52:25 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.59.0:
+  * Deprecation of datacenter attribute for Primary IPs and Servers
+    The datacenter attribute is deprecated in the Primary IPs and
+    Servers API resources and will be removed after 1 July 2026.
+    See
+    https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+    for more details.
+    The location attribute already exists for Servers, and was
+    added for Primary IPs.
+    Therefor the datacenter attribute is deprecated in favor of the
+    location attribute in the following commands:
+    - hcloud server create
+    - hcloud server describe
+    - hcloud server list
+    - hcloud primary-ip create
+    - hcloud primary-ip describe
+    - hcloud primary-ip list
+    In list commands, the datacenter columns is not longer shown by
+    default, and is replaced with the location column.
+  * Features
+    - server,primary-ip: deprecate datacenter (#1278)
+  * Changelog
+    - chore(main): release v1.59.0 (#1296)
+    - feat(server,primary-ip): deprecate datacenter (#1278)
+    - deps: update dependency goreleaser/goreleaser to v2.13.2
+      (#1294)
+    - ci(mise): annotate GitHub dependencies for renovate (#1293)
+    - deps: update module github.com/hetznercloud/hcloud-go/v2 to
+      v2.33.0 (#1285)
+    - deps: update module github.com/jedib0t/go-pretty/v6 to v6.7.8
+      (#1291)
+    - deps: update dependency jdx/mise to v2025.12.13 (#1292)
+    - deps: update golang.org/x/exp digest to 944ab1f (#1289)
+    - ci(mise): go backend no longer experimental (#1283)
+    - ci(mise): replace deprecated ubi backend (#1284)
+    - deps: update dependency jdx/mise to v2025.12.12 (#1287)
+    - ci: automatically update mise version in GitHub Action
+      (#1286)
+    - deps: update actions/cache action to v5 (#1281)
+    - deps: update actions/checkout action to v6 (#1282)
+    - ci: add link check workflow (#1224)
+    - chore: rename goreleaser `archive.builds` to `archive.ids`
+      (#1280)
+
+-------------------------------------------------------------------

Old:
----
  hcloud-cli-1.58.0.obscpio

New:
----
  hcloud-cli-1.59.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ hcloud-cli.spec ++++++
--- /var/tmp/diff_new_pack.1rPrNL/_old  2026-01-12 10:34:09.549190196 +0100
+++ /var/tmp/diff_new_pack.1rPrNL/_new  2026-01-12 10:34:09.553190360 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package hcloud-cli
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %define executable_name hcloud
 
 Name:           hcloud-cli
-Version:        1.58.0
+Version:        1.59.0
 Release:        0
 Summary:        A command-line interface for Hetzner Cloud
 License:        MIT
@@ -29,7 +29,7 @@
 BuildRequires:  bash-completion
 BuildRequires:  fish
 BuildRequires:  zsh
-BuildRequires:  golang(API) >= 1.23
+BuildRequires:  golang(API) >= 1.24
 Provides:       hcloud = %{version}
 
 %description

++++++ _service ++++++
--- /var/tmp/diff_new_pack.1rPrNL/_old  2026-01-12 10:34:09.613192830 +0100
+++ /var/tmp/diff_new_pack.1rPrNL/_new  2026-01-12 10:34:09.621193158 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/hetznercloud/cli</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v1.58.0</param>
+    <param name="revision">v1.59.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.1rPrNL/_old  2026-01-12 10:34:09.653194476 +0100
+++ /var/tmp/diff_new_pack.1rPrNL/_new  2026-01-12 10:34:09.657194641 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/hetznercloud/cli</param>
-              <param 
name="changesrevision">d5b8b962bee7a9e71e91cab973dd26807d994ea7</param></service></servicedata>
+              <param 
name="changesrevision">e01a16ea40bdf213362675eeb94d61776619be01</param></service></servicedata>
 (No newline at EOF)
 

++++++ hcloud-cli-1.58.0.obscpio -> hcloud-cli-1.59.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/.golangci.yml 
new/hcloud-cli-1.59.0/.golangci.yml
--- old/hcloud-cli-1.58.0/.golangci.yml 2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/.golangci.yml 2026-01-05 17:16:10.000000000 +0100
@@ -63,6 +63,9 @@
           - revive
         path: internal/cmd/(util|context)/.+\.go
         text: var-naming
+      - linters:
+          - staticcheck
+        text: Datacenter is deprecated
 
 formatters:
   enable:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/.goreleaser.yml 
new/hcloud-cli-1.59.0/.goreleaser.yml
--- old/hcloud-cli-1.58.0/.goreleaser.yml       2025-12-18 17:46:45.000000000 
+0100
+++ new/hcloud-cli-1.59.0/.goreleaser.yml       2026-01-05 17:16:10.000000000 
+0100
@@ -84,7 +84,7 @@
 
 archives:
   - id: hcloud-archive
-    builds:
+    ids:
       - hcloud-build
       - hcloud-build-darwin
     name_template: "{{ .Binary }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ .Arm 
}}{{ end }}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/CHANGELOG.md 
new/hcloud-cli-1.59.0/CHANGELOG.md
--- old/hcloud-cli-1.58.0/CHANGELOG.md  2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/CHANGELOG.md  2026-01-05 17:16:10.000000000 +0100
@@ -1,5 +1,28 @@
 # Changelog
 
+## [v1.59.0](https://github.com/hetznercloud/cli/releases/tag/v1.59.0)
+
+### Deprecation of `datacenter` attribute for Primary IPs and Servers
+
+The `datacenter` attribute is deprecated in the `Primary IPs` and `Servers` 
API resources and will be removed after 1 July 2026. See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters for 
more details.
+
+The `location` attribute already exists for Servers, and was added for Primary 
IPs.
+
+Therefor the `datacenter` attribute is deprecated in favor of the `location` 
attribute in the following commands:
+
+- `hcloud server create`
+- `hcloud server describe`
+- `hcloud server list`
+- `hcloud primary-ip create`
+- `hcloud primary-ip describe`
+- `hcloud primary-ip list`
+
+In list commands, the `datacenter` columns is not longer shown by default, and 
is replaced with the `location` column.
+
+### Features
+
+- **server,primary-ip**: deprecate datacenter (#1278)
+
 ## [v1.58.0](https://github.com/hetznercloud/cli/releases/tag/v1.58.0)
 
 ### Features
@@ -80,7 +103,7 @@
 
 This release adds support for the new [DNS 
API](https://docs.hetzner.cloud/reference/cloud#dns).
 
-The DNS API is currently in **beta**, which will likely end on 10 November 
2025. After the beta ended, it will no longer be possible to create new zones 
in the old DNS system. See the [DNS Beta 
FAQ](https://docs.hetzner.com/networking/dns/faq/beta) for more details.
+The DNS API is currently in **beta**, which will likely end on 10 November 
2025. After the beta ended, it will no longer be possible to create new zones 
in the old DNS system. See the [DNS Beta 
FAQ](https://docs.hetzner.com/networking/dns/faq/beta/) for more details.
 
 Future minor releases of this project may include breaking changes for 
features that are related to the DNS API.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/docs/README.md 
new/hcloud-cli-1.59.0/docs/README.md
--- old/hcloud-cli-1.58.0/docs/README.md        2025-12-18 17:46:45.000000000 
+0100
+++ new/hcloud-cli-1.59.0/docs/README.md        2026-01-05 17:16:10.000000000 
+0100
@@ -11,4 +11,4 @@
 ## Getting help
 
 - 🐛 Report bugs using [our issue 
tracker](https://github.com/hetznercloud/cli/issues/new?template=bug.yaml).
-- 🙋 If you need help, reach us using the [Support 
Center](https://console.hetzner.cloud/support).
+- 🙋 If you need help, reach us using the [Support 
Center](https://console.hetzner.com/support).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/docs/guides/using-output-options.md 
new/hcloud-cli-1.59.0/docs/guides/using-output-options.md
--- old/hcloud-cli-1.58.0/docs/guides/using-output-options.md   2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/docs/guides/using-output-options.md   2026-01-05 
17:16:10.000000000 +0100
@@ -116,7 +116,7 @@
 ## Go Template Format
 
 `describe` commands support the Go string template format as well. You can 
read up on the syntax in the 
-[Go documentation](https://pkg.go.dev/text/template/). The data structures 
passed to the template are defined
+[Go documentation](https://pkg.go.dev/text/template). The data structures 
passed to the template are defined
 by our API and can be found in 
[hcloud-go](https://pkg.go.dev/github.com/hetznercloud/hcloud-go/v2/hcloud/schema).
 
 For example, you could obtain the number of cores of a server using the 
following command:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/docs/reference/manual/hcloud_primary-ip_create.md 
new/hcloud-cli-1.59.0/docs/reference/manual/hcloud_primary-ip_create.md
--- old/hcloud-cli-1.58.0/docs/reference/manual/hcloud_primary-ip_create.md     
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/docs/reference/manual/hcloud_primary-ip_create.md     
2026-01-05 17:16:10.000000000 +0100
@@ -2,6 +2,13 @@
 
 Create a Primary IP
 
+### Synopsis
+
+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.
+
 ```
 hcloud primary-ip create [options] --type <ipv4|ipv6> --name <name>
 ```
@@ -9,12 +16,13 @@
 ### Options
 
 ```
-      --assignee-id int             Assignee (usually a Server) to assign 
Primary IP to (required if 'datacenter' is not specified)
+      --assignee-id int             Assignee (usually a Server) to assign 
Primary IP to
       --auto-delete                 Delete Primary IP if assigned resource is 
deleted (true, false)
-      --datacenter string           Datacenter (ID or name) (required if 
'assignee-id' is not specified)
+      --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 [])
+      --location string             Location (ID or name) of Primary IP
       --name string                 Name (required)
   -o, --output stringArray          output options: json|yaml
       --type string                 Type (ipv4 or ipv6) (required)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/docs/reference/manual/hcloud_server_create.md 
new/hcloud-cli-1.59.0/docs/reference/manual/hcloud_server_create.md
--- old/hcloud-cli-1.58.0/docs/reference/manual/hcloud_server_create.md 
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/docs/reference/manual/hcloud_server_create.md 
2026-01-05 17:16:10.000000000 +0100
@@ -2,6 +2,13 @@
 
 Create a Server
 
+### Synopsis
+
+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 <name> --type <server-type> --image 
<image>
 ```
@@ -11,7 +18,7 @@
 ```
       --allow-deprecated-image            Enable the use of deprecated Images 
(default: false) (true, false)
       --automount                         Automount Volumes after attach 
(default: false) (true, false)
-      --datacenter string                 Datacenter (ID or name)
+      --datacenter string                 Datacenter (ID or name) (deprecated)
       --enable-backup                     Enable automatic backups (true, 
false)
       --enable-protection strings         Enable protection (delete, rebuild) 
(default: none)
       --firewall strings                  ID or name of Firewall to attach the 
Server to (can be specified multiple times)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/docs/reference/manual/hcloud_zone_change-primary-nameservers.md
 
new/hcloud-cli-1.59.0/docs/reference/manual/hcloud_zone_change-primary-nameservers.md
--- 
old/hcloud-cli-1.58.0/docs/reference/manual/hcloud_zone_change-primary-nameservers.md
       2025-12-18 17:46:45.000000000 +0100
+++ 
new/hcloud-cli-1.59.0/docs/reference/manual/hcloud_zone_change-primary-nameservers.md
       2026-01-05 17:16:10.000000000 +0100
@@ -6,7 +6,8 @@
 
 Changes the primary nameservers of a secondary Zone.
 
-Input file has to be in JSON format. You can find the schema at 
https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zone-primary-nameservers
+Input file has to be in JSON format. You can find the schema at
+https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zones-primary-nameservers
 
 Example file content:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/docs/tutorials/setup-hcloud-cli.md 
new/hcloud-cli-1.59.0/docs/tutorials/setup-hcloud-cli.md
--- old/hcloud-cli-1.58.0/docs/tutorials/setup-hcloud-cli.md    2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/docs/tutorials/setup-hcloud-cli.md    2026-01-05 
17:16:10.000000000 +0100
@@ -6,7 +6,7 @@
 
 Before you begin, ensure you have the following:
 
-- A [Hetzner Cloud account](https://console.hetzner.cloud).
+- A [Hetzner Cloud account](https://console.hetzner.com).
 
 ## 1. Install the hcloud CLI
 
@@ -144,7 +144,7 @@
 The hcloud CLI uses contexts to manage multiple Hetzner Cloud tokens and set 
configuration preferences.
 
 First, you need to create an API token.
-Follow the instructions in the [Hetzner Cloud 
documentation](https://docs.hetzner.com/cloud/api/getting-started/generating-api-token)
 to create your project API token.
+Follow the instructions in the [Hetzner Cloud 
documentation](https://docs.hetzner.com/cloud/api/getting-started/generating-api-token/)
 to create your project API token.
 
 Once you have your token, you can create a context using the following command:
 
@@ -179,4 +179,4 @@
 If you see this output, congratulations! You have successfully set up the 
hcloud CLI on your local machine.
 
 If there are any problems, make sure you followed all steps of this tutorial 
correctly. If there still are problems,
-you can reach out to our [Support](https://console.hetzner.cloud/support) to 
get help.
+you can reach out to our [Support](https://console.hetzner.com/support) to get 
help.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/go.mod new/hcloud-cli-1.59.0/go.mod
--- old/hcloud-cli-1.58.0/go.mod        2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/go.mod        2026-01-05 17:16:10.000000000 +0100
@@ -12,8 +12,8 @@
        github.com/fatih/structs v1.1.0
        github.com/goccy/go-yaml v1.19.1
        github.com/guptarohit/asciigraph v0.7.3
-       github.com/hetznercloud/hcloud-go/v2 v2.32.0
-       github.com/jedib0t/go-pretty/v6 v6.7.7
+       github.com/hetznercloud/hcloud-go/v2 v2.33.0
+       github.com/jedib0t/go-pretty/v6 v6.7.8
        github.com/spf13/cast v1.10.0
        github.com/spf13/cobra v1.10.2
        github.com/spf13/pflag v1.0.10
@@ -22,7 +22,7 @@
        github.com/swaggest/assertjson v1.10.0
        go.uber.org/mock v0.6.0
        golang.org/x/crypto v0.46.0
-       golang.org/x/exp v0.0.0-20251209150349-8475f28825e9
+       golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93
        golang.org/x/net v0.48.0
        golang.org/x/term v0.38.0
        golang.org/x/text v0.32.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/go.sum new/hcloud-cli-1.59.0/go.sum
--- old/hcloud-cli-1.58.0/go.sum        2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/go.sum        2026-01-05 17:16:10.000000000 +0100
@@ -36,14 +36,14 @@
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/guptarohit/asciigraph v0.7.3 
h1:p05XDDn7cBTWiBqWb30mrwxd6oU0claAjqeytllnsPY=
 github.com/guptarohit/asciigraph v0.7.3/go.mod 
h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag=
-github.com/hetznercloud/hcloud-go/v2 v2.32.0 
h1:BRe+k7ESdYv3xQLBGdKUfk+XBFRJNGKzq70nJI24ciM=
-github.com/hetznercloud/hcloud-go/v2 v2.32.0/go.mod 
h1:hAanyyfn9M0cMmZ68CXzPCF54KRb9EXd8eiE2FHKGIE=
+github.com/hetznercloud/hcloud-go/v2 v2.33.0 
h1:g9hwuo60IXbupXJCYMlO4xDXgxxMPuFk31iOpLXDCV4=
+github.com/hetznercloud/hcloud-go/v2 v2.33.0/go.mod 
h1:GzYEl7slIGKc6Ttt08hjiJvGj8/PbWzcQf6IUi02dIs=
 github.com/iancoleman/orderedmap v0.3.0 
h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc=
 github.com/iancoleman/orderedmap v0.3.0/go.mod 
h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE=
 github.com/inconshreveable/mousetrap v1.1.0 
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod 
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jedib0t/go-pretty/v6 v6.7.7 
h1:Y1Id3lJ3k4UB8uwWWy3l8EVFnUlx5chR5+VbsofPNX0=
-github.com/jedib0t/go-pretty/v6 v6.7.7/go.mod 
h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU=
+github.com/jedib0t/go-pretty/v6 v6.7.8 
h1:BVYrDy5DPBA3Qn9ICT+PokP9cvCv1KaHv2i+Hc8sr5o=
+github.com/jedib0t/go-pretty/v6 v6.7.8/go.mod 
h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU=
 github.com/klauspost/compress v1.18.0 
h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
 github.com/klauspost/compress v1.18.0/go.mod 
h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -120,8 +120,8 @@
 go.yaml.in/yaml/v3 v3.0.4/go.mod 
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
 golang.org/x/crypto v0.46.0/go.mod 
h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
-golang.org/x/exp v0.0.0-20251209150349-8475f28825e9 
h1:MDfG8Cvcqlt9XXrmEiD4epKn7VJHZO84hejP9Jmp0MM=
-golang.org/x/exp v0.0.0-20251209150349-8475f28825e9/go.mod 
h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
+golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 
h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0=
+golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod 
h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
 golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
 golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/all/list_test.go 
new/hcloud-cli-1.59.0/internal/cmd/all/list_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/all/list_test.go 2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/all/list_test.go 2026-01-05 
17:16:10.000000000 +0100
@@ -41,6 +41,7 @@
                                        },
                                },
                                Created:    time.Now().Add(-72 * time.Hour),
+                               Location:   &hcloud.Location{Name: "hel1"},
                                Datacenter: &hcloud.Datacenter{Name: 
"hel1-dc2"},
                        },
                }, nil)
@@ -236,8 +237,8 @@
 
        expOut := `SERVERS
 ---
-ID    NAME        STATUS    IPV4        IPV6   PRIVATE NET   DATACENTER   AGE
-123   my server   running   192.0.2.1   -      -             hel1-dc2     3d 
+ID    NAME        STATUS    IPV4        IPV6   PRIVATE NET   LOCATION   AGE
+123   my server   running   192.0.2.1   -      -             hel1       3d 
 
 IMAGES
 ---
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/config/add_test.go 
new/hcloud-cli-1.59.0/internal/cmd/config/add_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/config/add_test.go       2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/config/add_test.go       2026-01-05 
17:16:10.000000000 +0100
@@ -44,7 +44,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -83,7 +83,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3", "a", "b", "c"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -111,7 +111,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3", "a", "b", "c"]
@@ -140,7 +140,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -170,7 +170,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -204,7 +204,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/config/get_test.go 
new/hcloud-cli-1.59.0/internal/cmd/config/get_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/config/get_test.go       2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/config/get_test.go       2026-01-05 
17:16:10.000000000 +0100
@@ -34,7 +34,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -66,7 +66,7 @@
                },
                {
                        key:    "endpoint",
-                       expOut: "https://test-endpoint.com\n";,
+                       expOut: "https://example.com\n";,
                },
                {
                        key:    "poll-interval",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/config/list_test.go 
new/hcloud-cli-1.59.0/internal/cmd/config/list_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/config/list_test.go      2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/config/list_test.go      2026-01-05 
17:16:10.000000000 +0100
@@ -34,7 +34,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -58,14 +58,14 @@
                {
                        name: "default",
                        args: []string{},
-                       expOut: `KEY                    VALUE                   
 
-context                test_context             
-debug                  yes                      
-deeply.nested.option   bar                      
-endpoint               https://test-endpoint.com
-poll-interval          1.234s                   
-quiet                  yes                      
-token                  [redacted]               
+                       expOut: `KEY                    VALUE              
+context                test_context       
+debug                  yes                
+deeply.nested.option   bar                
+endpoint               https://example.com
+poll-interval          1.234s             
+quiet                  yes                
+token                  [redacted]         
 `,
                },
                {
@@ -84,26 +84,26 @@
                {
                        name: "no header",
                        args: []string{"-o=noheader"},
-                       expOut: `context                test_context            
 
-debug                  yes                      
-deeply.nested.option   bar                      
-endpoint               https://test-endpoint.com
-poll-interval          1.234s                   
-quiet                  yes                      
-token                  [redacted]               
+                       expOut: `context                test_context       
+debug                  yes                
+deeply.nested.option   bar                
+endpoint               https://example.com
+poll-interval          1.234s             
+quiet                  yes                
+token                  [redacted]         
 `,
                },
                {
                        name: "allow sensitive",
                        args: []string{"--allow-sensitive"},
-                       expOut: `KEY                    VALUE                   
 
-context                test_context             
-debug                  yes                      
-deeply.nested.option   bar                      
-endpoint               https://test-endpoint.com
-poll-interval          1.234s                   
-quiet                  yes                      
-token                  super secret token       
+                       expOut: `KEY                    VALUE              
+context                test_context       
+debug                  yes                
+deeply.nested.option   bar                
+endpoint               https://example.com
+poll-interval          1.234s             
+quiet                  yes                
+token                  super secret token 
 `,
                },
                {
@@ -125,7 +125,7 @@
     },
     {
       "key": "endpoint",
-      "value": "https://test-endpoint.com";
+      "value": "https://example.com";
     },
     {
       "key": "poll-interval",
@@ -165,6 +165,6 @@
 func setTestValues(cfg config.Config) {
        _ = os.Setenv("HCLOUD_POLL_INTERVAL", "1234ms")
        _ = os.Setenv("HCLOUD_DEBUG", "true")
-       _ = cfg.FlagSet().Set("endpoint", "https://test-endpoint.com";)
+       _ = cfg.FlagSet().Set("endpoint", "https://example.com";)
        _ = cfg.FlagSet().Set("quiet", "true")
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/config/remove_test.go 
new/hcloud-cli-1.59.0/internal/cmd/config/remove_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/config/remove_test.go    2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/config/remove_test.go    2026-01-05 
17:16:10.000000000 +0100
@@ -44,7 +44,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -84,7 +84,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -111,7 +111,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1", "2", "3"]
@@ -146,7 +146,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       array_option = ["1"]
@@ -174,7 +174,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["1", "2", "3"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
 
 [[contexts]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/config/set_test.go 
new/hcloud-cli-1.59.0/internal/cmd/config/set_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/config/set_test.go       2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/config/set_test.go       2026-01-05 
17:16:10.000000000 +0100
@@ -52,7 +52,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
 
 [[contexts]]
@@ -90,7 +90,7 @@
   token = "super secret token"
   [contexts.preferences]
     debug_file = "debug.log"
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
 
 [[contexts]]
@@ -123,7 +123,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
 
 [[contexts]]
@@ -149,7 +149,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
 
 [[contexts]]
@@ -174,7 +174,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       option = "bar"
@@ -201,7 +201,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -230,7 +230,7 @@
   token = "super secret token"
   [contexts.preferences]
     array_option = ["a", "b", "c"]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
 
 [[contexts]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/config/unset_test.go 
new/hcloud-cli-1.59.0/internal/cmd/config/unset_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/config/unset_test.go     2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/config/unset_test.go     2026-01-05 
17:16:10.000000000 +0100
@@ -43,7 +43,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -85,7 +85,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
         option = "bar"
@@ -122,7 +122,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -149,7 +149,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -187,7 +187,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -217,7 +217,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.deeply]
       [contexts.preferences.deeply.nested]
@@ -245,7 +245,7 @@
   name = "test_context"
   token = "super secret token"
   [contexts.preferences]
-    endpoint = "https://test-endpoint.com";
+    endpoint = "https://example.com";
     quiet = true
     [contexts.preferences.nested]
       option = "foo"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/datacenter/describe.go 
new/hcloud-cli-1.59.0/internal/cmd/datacenter/describe.go
--- old/hcloud-cli-1.58.0/internal/cmd/datacenter/describe.go   2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/datacenter/describe.go   2026-01-05 
17:16:10.000000000 +0100
@@ -41,14 +41,14 @@
        fmt.Fprintf(&sb, "Name:\t%s\n", datacenter.Name)
        fmt.Fprintf(&sb, "Description:\t%s\n", datacenter.Description)
 
-       fmt.Fprintln(&sb)
-       fmt.Fprintf(&sb, "Location:\n")
-       fmt.Fprint(&sb, 
util.PrefixLines(location.DescribeLocation(datacenter.Location), "  "))
-
        if short {
                return sb.String()
        }
 
+       fmt.Fprintln(&sb)
+       fmt.Fprintf(&sb, "Location:\n")
+       fmt.Fprint(&sb, 
util.PrefixLines(location.DescribeLocation(datacenter.Location), "  "))
+
        type ServerTypeStatus struct {
                ID        int64
                Available bool
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/primaryip/create.go 
new/hcloud-cli-1.59.0/internal/cmd/primaryip/create.go
--- old/hcloud-cli-1.58.0/internal/cmd/primaryip/create.go      2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/primaryip/create.go      2026-01-05 
17:16:10.000000000 +0100
@@ -2,6 +2,7 @@
 
 import (
        "fmt"
+       "strings"
 
        "github.com/spf13/cobra"
 
@@ -16,8 +17,12 @@
 var CreateCmd = base.CreateCmd[*hcloud.PrimaryIP]{
        BaseCobraCommand: func(client hcapi2.Client) *cobra.Command {
                cmd := &cobra.Command{
-                       Use:                   "create [options] --type 
<ipv4|ipv6> --name <name>",
-                       Short:                 "Create a Primary IP",
+                       Use:   "create [options] --type <ipv4|ipv6> --name 
<name>",
+                       Short: "Create a Primary IP",
+                       Long: `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.`,
                        TraverseChildren:      true,
                        DisableFlagsInUseLine: true,
                }
@@ -28,9 +33,12 @@
                cmd.Flags().String("name", "", "Name (required)")
                _ = cmd.MarkFlagRequired("name")
 
-               cmd.Flags().Int64("assignee-id", 0, "Assignee (usually a 
Server) to assign Primary IP to (required if 'datacenter' is not specified)")
+               cmd.Flags().Int64("assignee-id", 0, "Assignee (usually a 
Server) to assign Primary IP to")
+
+               cmd.Flags().String("location", "", "Location (ID or name) of 
Primary IP")
+               _ = cmd.RegisterFlagCompletionFunc("location", 
cmpl.SuggestCandidatesF(client.Location().Names))
 
-               cmd.Flags().String("datacenter", "", "Datacenter (ID or name) 
(required if 'assignee-id' is not specified)")
+               cmd.Flags().String("datacenter", "", "Datacenter (name) 
(deprecated)")
                _ = cmd.RegisterFlagCompletionFunc("datacenter", 
cmpl.SuggestCandidatesF(client.Datacenter().Names))
 
                cmd.Flags().StringToString("label", nil, "User-defined labels 
('key=value') (can be specified multiple times)")
@@ -40,8 +48,8 @@
 
                cmd.Flags().Bool("auto-delete", false, "Delete Primary IP if 
assigned resource is deleted (true, false)")
 
-               cmd.MarkFlagsOneRequired("assignee-id", "datacenter")
-               cmd.MarkFlagsMutuallyExclusive("assignee-id", "datacenter")
+               cmd.MarkFlagsOneRequired("assignee-id", "datacenter", 
"location")
+               cmd.MarkFlagsMutuallyExclusive("assignee-id", "datacenter", 
"location")
                return cmd
        },
        Run: func(s state.State, cmd *cobra.Command, _ []string) 
(*hcloud.PrimaryIP, any, error) {
@@ -49,6 +57,7 @@
                name, _ := cmd.Flags().GetString("name")
                assigneeID, _ := cmd.Flags().GetInt64("assignee-id")
                datacenter, _ := cmd.Flags().GetString("datacenter")
+               locationIDOrName, _ := cmd.Flags().GetString("location")
                labels, _ := cmd.Flags().GetStringToString("label")
                protection, _ := cmd.Flags().GetStringSlice("enable-protection")
                autoDelete, _ := cmd.Flags().GetBool("auto-delete")
@@ -62,7 +71,6 @@
                        Type:         hcloud.PrimaryIPType(typ),
                        Name:         name,
                        AssigneeType: "server",
-                       Datacenter:   datacenter,
                        Labels:       labels,
                }
                if assigneeID != 0 {
@@ -71,6 +79,30 @@
                if cmd.Flags().Changed("auto-delete") {
                        createOpts.AutoDelete = &autoDelete
                }
+               if cmd.Flags().Changed("location") {
+                       location, _, err := s.Client().Location().Get(s, 
locationIDOrName)
+                       if err != nil {
+                               return nil, nil, err
+                       }
+                       if location == nil {
+                               return nil, nil, fmt.Errorf("Location not 
found: %s", locationIDOrName)
+                       }
+                       createOpts.Location = location.Name
+               }
+               if cmd.Flags().Changed("datacenter") {
+                       cmd.PrintErrln("Warning: The --datacenter flag is 
deprecated. Use --location or --assignee-id instead.")
+
+                       // Backward compatible datacenter argument.
+                       // datacenter hel1-dc2 => 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/primaryip/create_test.go 
new/hcloud-cli-1.59.0/internal/cmd/primaryip/create_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/primaryip/create_test.go 2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/primaryip/create_test.go 2026-01-05 
17:16:10.000000000 +0100
@@ -39,7 +39,7 @@
                        hcloud.PrimaryIPCreateOpts{
                                Name:         "my-ip",
                                Type:         "ipv4",
-                               Datacenter:   "fsn1-dc14",
+                               Location:     "fsn1",
                                Labels:       map[string]string{"foo": "bar"},
                                AssigneeType: "server",
                                AutoDelete:   hcloud.Ptr(true),
@@ -62,12 +62,14 @@
 
        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"
+
        expOut := `Primary IP 1 created
 IPv4: 192.168.2.1
 `
 
        require.NoError(t, err)
-       assert.Empty(t, errOut)
+       assert.Equal(t, expErr, errOut)
        assert.Equal(t, expOut, out)
 }
 
@@ -85,6 +87,9 @@
                Name: "my-ip",
                IP:   net.ParseIP("192.168.2.1"),
                Type: "ipv4",
+               Location: &hcloud.Location{
+                       Name: "fsn1",
+               },
                Datacenter: &hcloud.Datacenter{
                        ID:       1,
                        Name:     "fsn1-dc14",
@@ -104,7 +109,7 @@
                        hcloud.PrimaryIPCreateOpts{
                                Name:         "my-ip",
                                Type:         "ipv4",
-                               Datacenter:   "fsn1-dc14",
+                               Location:     "fsn1",
                                Labels:       map[string]string{"foo": "bar"},
                                AssigneeType: "server",
                                AutoDelete:   hcloud.Ptr(true),
@@ -124,7 +129,9 @@
 
        jsonOut, out, err := fx.Run(cmd, []string{"-o=json", "--name=my-ip", 
"--type=ipv4", "--datacenter=fsn1-dc14", "--auto-delete", "--label", "foo=bar"})
 
-       expOut := "Primary IP 1 created\n"
+       expOut := `Warning: The --datacenter flag is deprecated. Use --location 
or --assignee-id instead.
+Primary IP 1 created
+`
 
        require.NoError(t, err)
        assert.Equal(t, expOut, out)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/primaryip/describe.go 
new/hcloud-cli-1.59.0/internal/cmd/primaryip/describe.go
--- old/hcloud-cli-1.58.0/internal/cmd/primaryip/describe.go    2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/primaryip/describe.go    2026-01-05 
17:16:10.000000000 +0100
@@ -9,6 +9,7 @@
 
        "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"
        "github.com/hetznercloud/cli/internal/state"
@@ -62,8 +63,15 @@
                util.DescribeLabels(out, primaryIP.Labels, "")
 
                fmt.Fprintln(out)
-               fmt.Fprintf(out, "Datacenter:\n")
-               fmt.Fprintf(out, "%s", 
util.PrefixLines(datacenter.DescribeDatacenter(s.Client(), 
primaryIP.Datacenter, true), "  "))
+               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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/primaryip/describe_test.go 
new/hcloud-cli-1.59.0/internal/cmd/primaryip/describe_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/primaryip/describe_test.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/primaryip/describe_test.go       
2026-01-05 17:16:10.000000000 +0100
@@ -35,7 +35,16 @@
                Blocked:      true,
                AutoDelete:   false,
                AssigneeType: "server",
-               Datacenter:   &hcloud.Datacenter{ID: 0, Location: 
&hcloud.Location{ID: 0}},
+               Location: &hcloud.Location{
+                       ID:          3,
+                       Name:        "hel1",
+                       Description: "Helsinki DC Park 1",
+                       NetworkZone: "eu-central",
+                       Country:     "FI",
+                       City:        "Helsinki",
+                       Latitude:    60.169855,
+                       Longitude:   24.938379,
+               },
        }
 
        fx.Client.PrimaryIPClient.EXPECT().
@@ -64,20 +73,15 @@
 Labels:
   No labels
 
-Datacenter:
-  ID:           0
-  Name:         
-  Description:  
-  
-  Location:
-    ID:            0
-    Name:          
-    Description:   
-    Network Zone:  
-    Country:       
-    City:          
-    Latitude:      0.000000
-    Longitude:     0.000000
+Location:
+  ID:            3
+  Name:          hel1
+  Description:   Helsinki DC Park 1
+  Network Zone:  eu-central
+  Country:       FI
+  City:          Helsinki
+  Latitude:      60.169855
+  Longitude:     24.938379
 `, util.Datetime(primaryIP.Created), humanize.Time(primaryIP.Created))
 
        require.NoError(t, err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/primaryip/testdata/create_response.json 
new/hcloud-cli-1.59.0/internal/cmd/primaryip/testdata/create_response.json
--- old/hcloud-cli-1.58.0/internal/cmd/primaryip/testdata/create_response.json  
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/primaryip/testdata/create_response.json  
2026-01-05 17:16:10.000000000 +0100
@@ -5,6 +5,16 @@
     "auto_delete": true,
     "blocked": false,
     "created": "2016-01-30T23:50:00Z",
+    "location": {
+      "city": "",
+      "country": "",
+      "description": "",
+      "id": 0,
+      "latitude": 0,
+      "longitude": 0,
+      "name": "fsn1",
+      "network_zone": ""
+    },
     "datacenter": {
       "description": "",
       "id": 1,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/server/change_type.go 
new/hcloud-cli-1.59.0/internal/cmd/server/change_type.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/change_type.go    2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/change_type.go    2026-01-05 
17:16:10.000000000 +0100
@@ -47,7 +47,7 @@
                        return fmt.Errorf("Server Type not found: %s", 
serverTypeIDOrName)
                }
 
-               cmd.Print(deprecatedServerTypeWarning(serverType, 
server.Datacenter.Location.Name))
+               cmd.Print(deprecatedServerTypeWarning(serverType, 
server.Location.Name))
 
                keepDisk, _ := cmd.Flags().GetBool("keep-disk")
                opts := hcloud.ServerChangeTypeOpts{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/server/change_type_test.go 
new/hcloud-cli-1.59.0/internal/cmd/server/change_type_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/change_type_test.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/change_type_test.go       
2026-01-05 17:16:10.000000000 +0100
@@ -19,7 +19,7 @@
        cmd := server.ChangeTypeCmd.CobraCommand(fx.State())
        fx.ExpectEnsureToken()
 
-       srv := &hcloud.Server{ID: 123, Name: "my-server", Datacenter: 
&hcloud.Datacenter{Location: &hcloud.Location{Name: "fsn1"}}}
+       srv := &hcloud.Server{ID: 123, Name: "my-server", Location: 
&hcloud.Location{Name: "fsn1"}}
        st := &hcloud.ServerType{ID: 456, Name: "cax21", Locations: 
[]hcloud.ServerTypeLocation{{Location: &hcloud.Location{Name: "fsn1"}}}}
 
        fx.Client.ServerClient.EXPECT().
@@ -53,7 +53,7 @@
        cmd := server.ChangeTypeCmd.CobraCommand(fx.State())
        fx.ExpectEnsureToken()
 
-       srv := &hcloud.Server{ID: 123, Name: "my-server", Datacenter: 
&hcloud.Datacenter{Location: &hcloud.Location{Name: "fsn1"}}}
+       srv := &hcloud.Server{ID: 123, Name: "my-server", Location: 
&hcloud.Location{Name: "fsn1"}}
        st := &hcloud.ServerType{ID: 456, Name: "cax21", Locations: 
[]hcloud.ServerTypeLocation{{Location: &hcloud.Location{Name: "fsn1"}}}}
 
        fx.Client.ServerClient.EXPECT().
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/server/create.go 
new/hcloud-cli-1.59.0/internal/cmd/server/create.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/create.go 2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/create.go 2026-01-05 
17:16:10.000000000 +0100
@@ -9,6 +9,7 @@
        "mime/multipart"
        "net/textproto"
        "os"
+       "strconv"
        "strings"
        "time"
 
@@ -41,6 +42,10 @@
                cmd := &cobra.Command{
                        Use:   "create [options] --name <name> --type 
<server-type> --image <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.`,
                }
 
                cmd.Flags().String("name", "", "Server name (required)")
@@ -57,7 +62,7 @@
                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.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)")
@@ -433,17 +438,40 @@
        }
 
        if datacenterIDOrName != "" {
-               var datacenter *hcloud.Datacenter
-               datacenter, _, err = s.Client().Datacenter().Get(s, 
datacenterIDOrName)
-               if err != nil {
-                       return
-               }
-               if datacenter == nil {
-                       err = fmt.Errorf("Datacenter not found: %s", 
datacenterIDOrName)
-                       return
+               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]}
                }
-               createOpts.Datacenter = datacenter
        }
+
        if locationIDOrName != "" {
                var location *hcloud.Location
                location, _, err = s.Client().Location().Get(s, 
locationIDOrName)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/server/describe.go 
new/hcloud-cli-1.59.0/internal/cmd/server/describe.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/describe.go       2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/describe.go       2026-01-05 
17:16:10.000000000 +0100
@@ -12,6 +12,7 @@
        "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"
        "github.com/hetznercloud/cli/internal/cmd/placementgroup"
        "github.com/hetznercloud/cli/internal/cmd/servertype"
        "github.com/hetznercloud/cli/internal/cmd/util"
@@ -45,7 +46,7 @@
                // As we already know the location the server is in, we can 
show the deprecation info
                // of that server type in that specific location.
                locationInfoIndex := 
slices.IndexFunc(server.ServerType.Locations, func(locInfo 
hcloud.ServerTypeLocation) bool {
-                       return locInfo.Location.Name == 
server.Datacenter.Location.Name
+                       return locInfo.Location.Name == server.Location.Name
                })
                if locationInfoIndex >= 0 {
                        if text := 
util.DescribeDeprecation(server.ServerType.Locations[locationInfoIndex]); text 
!= "" {
@@ -145,8 +146,14 @@
                }
 
                fmt.Fprintln(out)
-               fmt.Fprintf(out, "Datacenter:\n")
-               fmt.Fprint(out, 
util.PrefixLines(datacenter.DescribeDatacenter(s.Client(), server.Datacenter, 
true), "  "))
+               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 != "" {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/server/describe_test.go 
new/hcloud-cli-1.59.0/internal/cmd/server/describe_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/describe_test.go  2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/describe_test.go  2026-01-05 
17:16:10.000000000 +0100
@@ -66,20 +66,15 @@
                                "key": "value",
                        },
                },
-               Datacenter: &hcloud.Datacenter{
-                       ID:   4,
-                       Name: "hel1-dc2",
-                       Location: &hcloud.Location{
-                               ID:          3,
-                               Name:        "hel1",
-                               Description: "Helsinki DC Park 1",
-                               NetworkZone: "eu-central",
-                               Country:     "FI",
-                               City:        "Helsinki",
-                               Latitude:    60.169855,
-                               Longitude:   24.938379,
-                       },
-                       Description: "Helsinki 1 virtual DC 2",
+               Location: &hcloud.Location{
+                       ID:          3,
+                       Name:        "hel1",
+                       Description: "Helsinki DC Park 1",
+                       NetworkZone: "eu-central",
+                       Country:     "FI",
+                       City:        "Helsinki",
+                       Latitude:    60.169855,
+                       Longitude:   24.938379,
                },
                IncludedTraffic: 20 * util.Tebibyte,
                Protection:      hcloud.ServerProtection{Delete: true, Rebuild: 
true},
@@ -149,20 +144,15 @@
   Labels:
     key:  value
 
-Datacenter:
-  ID:           4
-  Name:         hel1-dc2
-  Description:  Helsinki 1 virtual DC 2
-  
-  Location:
-    ID:            3
-    Name:          hel1
-    Description:   Helsinki DC Park 1
-    Network Zone:  eu-central
-    Country:       FI
-    City:          Helsinki
-    Latitude:      60.169855
-    Longitude:     24.938379
+Location:
+  ID:            3
+  Name:          hel1
+  Description:   Helsinki DC Park 1
+  Network Zone:  eu-central
+  Country:       FI
+  City:          Helsinki
+  Latitude:      60.169855
+  Longitude:     24.938379
 
 Backup Window:  Backups disabled
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/server/list.go 
new/hcloud-cli-1.59.0/internal/cmd/server/list.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/list.go   2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/list.go   2026-01-05 
17:16:10.000000000 +0100
@@ -7,7 +7,7 @@
        "strings"
        "time"
 
-       humanize "github.com/dustin/go-humanize"
+       "github.com/dustin/go-humanize"
        "github.com/spf13/cobra"
        "github.com/spf13/pflag"
 
@@ -37,7 +37,7 @@
 var ListCmd = &base.ListCmd[*hcloud.Server, schema.Server]{
        ResourceNamePlural: "Servers",
        JSONKeyGetByName:   "servers",
-       DefaultColumns:     []string{"id", "name", "status", "ipv4", "ipv6", 
"private_net", "datacenter", "age"},
+       DefaultColumns:     []string{"id", "name", "status", "ipv4", "ipv6", 
"private_net", "location", "age"},
        SortOption:         config.OptionSortServer,
 
        AdditionalFlags: func(cmd *cobra.Command) {
@@ -89,10 +89,14 @@
                                return humanize.IBytes(server.OutgoingTraffic)
                        }).
                        AddFieldFn("datacenter", func(server *hcloud.Server) 
string {
-                               return server.Datacenter.Name
+                               if server.Datacenter != nil {
+                                       return server.Datacenter.Name
+                               }
+                               return "-"
+
                        }).
                        AddFieldFn("location", func(server *hcloud.Server) 
string {
-                               return server.Datacenter.Location.Name
+                               return server.Location.Name
                        }).
                        AddFieldFn("labels", func(server *hcloud.Server) string 
{
                                return util.LabelsToString(server.Labels)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/cmd/server/list_test.go 
new/hcloud-cli-1.59.0/internal/cmd/server/list_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/list_test.go      2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/list_test.go      2026-01-05 
17:16:10.000000000 +0100
@@ -34,10 +34,10 @@
                ).
                Return([]*hcloud.Server{
                        {
-                               ID:         123,
-                               Name:       "test",
-                               Status:     hcloud.ServerStatusRunning,
-                               Datacenter: &hcloud.Datacenter{Name: 
"fsn1-dc14"},
+                               ID:       123,
+                               Name:     "test",
+                               Status:   hcloud.ServerStatusRunning,
+                               Location: &hcloud.Location{Name: "fsn1"},
                                PublicNet: hcloud.ServerPublicNet{
                                        IPv4: hcloud.ServerPublicNetIPv4{
                                                IP: net.ParseIP("192.168.2.1"),
@@ -49,8 +49,8 @@
 
        out, errOut, err := fx.Run(cmd, []string{"--status", "running"})
 
-       expOut := `ID    NAME   STATUS    IPV4          IPV6   PRIVATE NET   
DATACENTER   AGE
-123   test   running   192.168.2.1   -      -             fsn1-dc14    20s
+       expOut := `ID    NAME   STATUS    IPV4          IPV6   PRIVATE NET   
LOCATION   AGE
+123   test   running   192.168.2.1   -      -             fsn1       20s
 `
 
        require.NoError(t, err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/server/request_console_test.go 
new/hcloud-cli-1.59.0/internal/cmd/server/request_console_test.go
--- old/hcloud-cli-1.58.0/internal/cmd/server/request_console_test.go   
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/request_console_test.go   
2026-01-05 17:16:10.000000000 +0100
@@ -29,7 +29,7 @@
                Return(hcloud.ServerRequestConsoleResult{
                        Action:   &hcloud.Action{ID: 789},
                        Password: "root-password",
-                       WSSURL:   "wss://console.hetzner.cloud/?token=123",
+                       WSSURL:   "wss://console.hetzner.com/?token=123",
                }, nil, nil)
        fx.ActionWaiter.EXPECT().
                WaitForActions(gomock.Any(), gomock.Any(), &hcloud.Action{ID: 
789}).
@@ -40,7 +40,7 @@
 
        require.NoError(t, err)
        assert.Empty(t, errOut)
-       assert.Equal(t, "Console for Server 123:\nWebSocket URL: 
wss://console.hetzner.cloud/?token=123\nVNC Password: root-password\n", out)
+       assert.Equal(t, "Console for Server 123:\nWebSocket URL: 
wss://console.hetzner.com/?token=123\nVNC Password: root-password\n", out)
 }
 
 func TestRequestConsoleJSON(t *testing.T) {
@@ -60,7 +60,7 @@
                Return(hcloud.ServerRequestConsoleResult{
                        Action:   &hcloud.Action{ID: 789},
                        Password: "root-password",
-                       WSSURL:   "wss://console.hetzner.cloud/?token=123",
+                       WSSURL:   "wss://console.hetzner.com/?token=123",
                }, nil, nil)
        fx.ActionWaiter.EXPECT().
                WaitForActions(gomock.Any(), gomock.Any(), &hcloud.Action{ID: 
789}).
@@ -71,5 +71,5 @@
 
        require.NoError(t, err)
        assert.Empty(t, errOut)
-       assert.JSONEq(t, `{"wss_url": "wss://console.hetzner.cloud/?token=123", 
"password": "root-password"}`, out)
+       assert.JSONEq(t, `{"wss_url": "wss://console.hetzner.com/?token=123", 
"password": "root-password"}`, out)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/server/testdata/create_response.json 
new/hcloud-cli-1.59.0/internal/cmd/server/testdata/create_response.json
--- old/hcloud-cli-1.58.0/internal/cmd/server/testdata/create_response.json     
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/server/testdata/create_response.json     
2026-01-05 17:16:10.000000000 +0100
@@ -3,6 +3,16 @@
   "server": {
     "backup_window": null,
     "created": "2016-01-30T23:50:00Z",
+    "location": {
+      "city": "",
+      "country": "",
+      "description": "",
+      "id": 0,
+      "latitude": 0,
+      "longitude": 0,
+      "name": "",
+      "network_zone": ""
+    },
     "datacenter": {
       "description": "",
       "id": 1,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/cmd/zone/change_primary_nameservers.go 
new/hcloud-cli-1.59.0/internal/cmd/zone/change_primary_nameservers.go
--- old/hcloud-cli-1.58.0/internal/cmd/zone/change_primary_nameservers.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/cmd/zone/change_primary_nameservers.go       
2026-01-05 17:16:10.000000000 +0100
@@ -24,7 +24,8 @@
                        Short: "Changes the primary nameservers of a secondary 
Zone",
                        Long: `Changes the primary nameservers of a secondary 
Zone.
 
-Input file has to be in JSON format. You can find the schema at 
https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zone-primary-nameservers
+Input file has to be in JSON format. You can find the schema at
+https://docs.hetzner.cloud/reference/cloud#zone-actions-change-a-zones-primary-nameservers
 
 Example file content:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-cli-1.58.0/internal/hcapi2/mock/zz_zone_client_mock.go 
new/hcloud-cli-1.59.0/internal/hcapi2/mock/zz_zone_client_mock.go
--- old/hcloud-cli-1.58.0/internal/hcapi2/mock/zz_zone_client_mock.go   
2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/hcapi2/mock/zz_zone_client_mock.go   
2026-01-05 17:16:10.000000000 +0100
@@ -510,3 +510,19 @@
        mr.mock.ctrl.T.Helper()
        return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateRRSet", 
reflect.TypeOf((*MockZoneClient)(nil).UpdateRRSet), ctx, rrset, opts)
 }
+
+// UpdateRRSetRecords mocks base method.
+func (m *MockZoneClient) UpdateRRSetRecords(ctx context.Context, rrset 
*hcloud.ZoneRRSet, opts hcloud.ZoneRRSetUpdateRecordsOpts) (*hcloud.Action, 
*hcloud.Response, error) {
+       m.ctrl.T.Helper()
+       ret := m.ctrl.Call(m, "UpdateRRSetRecords", ctx, rrset, opts)
+       ret0, _ := ret[0].(*hcloud.Action)
+       ret1, _ := ret[1].(*hcloud.Response)
+       ret2, _ := ret[2].(error)
+       return ret0, ret1, ret2
+}
+
+// UpdateRRSetRecords indicates an expected call of UpdateRRSetRecords.
+func (mr *MockZoneClientMockRecorder) UpdateRRSetRecords(ctx, rrset, opts any) 
*gomock.Call {
+       mr.mock.ctrl.T.Helper()
+       return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, 
"UpdateRRSetRecords", 
reflect.TypeOf((*MockZoneClient)(nil).UpdateRRSetRecords), ctx, rrset, opts)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/internal/version/version.go 
new/hcloud-cli-1.59.0/internal/version/version.go
--- old/hcloud-cli-1.58.0/internal/version/version.go   2025-12-18 
17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/internal/version/version.go   2026-01-05 
17:16:10.000000000 +0100
@@ -2,7 +2,7 @@
 
 var (
        // version is a semver version (https://semver.org).
-       version = "1.58.0" // x-releaser-pleaser-version
+       version = "1.59.0" // x-releaser-pleaser-version
 
        // versionPrerelease is a semver version pre-release identifier 
(https://semver.org).
        //
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-cli-1.58.0/mise.toml 
new/hcloud-cli-1.59.0/mise.toml
--- old/hcloud-cli-1.58.0/mise.toml     2025-12-18 17:46:45.000000000 +0100
+++ new/hcloud-cli-1.59.0/mise.toml     2026-01-05 17:16:10.000000000 +0100
@@ -1,11 +1,7 @@
 [tools]
 go = "1.25.5"
 "go:go.uber.org/mock/mockgen" = "v0.6.0"
-"ubi:golangci/golangci-lint" = "2.7.2"
-"ubi:goreleaser/goreleaser" = "v2.13.1"
-"ubi:anchore/quill" = "v0.5.1"
-"ubi:jstemmer/go-junit-report" = "v2.1.0"
-
-[settings]
-# Experimental features are needed for the Go backend
-experimental = true
+"github:golangci/golangci-lint" = "2.7.2"    # renovate: 
datasource=github-releases depName=golangci/golangci-lint
+"github:goreleaser/goreleaser" = "v2.13.2"   # renovate: 
datasource=github-releases depName=goreleaser/goreleaser
+"github:anchore/quill" = "v0.5.1"            # renovate: 
datasource=github-releases depName=anchore/quill
+"github:jstemmer/go-junit-report" = "v2.1.0" # renovate: 
datasource=github-releases depName=jstemmer/go-junit-report

++++++ hcloud-cli.obsinfo ++++++
--- /var/tmp/diff_new_pack.1rPrNL/_old  2026-01-12 10:34:10.437226743 +0100
+++ /var/tmp/diff_new_pack.1rPrNL/_new  2026-01-12 10:34:10.453227401 +0100
@@ -1,5 +1,5 @@
 name: hcloud-cli
-version: 1.58.0
-mtime: 1766076405
-commit: d5b8b962bee7a9e71e91cab973dd26807d994ea7
+version: 1.59.0
+mtime: 1767629770
+commit: e01a16ea40bdf213362675eeb94d61776619be01
 

++++++ vendor.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/action.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/action.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/action.go    
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/action.go    
2026-01-05 17:16:10.000000000 +0100
@@ -128,13 +128,17 @@
 //
 // Deprecated: It is required to pass in a list of IDs since 30 January 2025. 
Please use [ActionClient.AllWithOpts] instead.
 func (c *ActionClient) All(ctx context.Context) ([]*Action, error) {
-       return c.action.All(ctx, ActionListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.action.All(ctx, ActionListOpts{})
 }
 
 // AllWithOpts returns all actions for the given options.
 //
 // It is required to set [ActionListOpts.ID]. Any other fields set in the opts 
are ignored.
 func (c *ActionClient) AllWithOpts(ctx context.Context, opts ActionListOpts) 
([]*Action, error) {
+       if opts.ListOpts.PerPage == 0 {
+               // Do not send unused per page param
+               opts.ListOpts.PerPage = -1
+       }
        return c.action.All(ctx, opts)
 }
 
@@ -189,6 +193,9 @@
 
 // All returns all actions for the given options.
 func (c *ResourceActionClient) All(ctx context.Context, opts ActionListOpts) 
([]*Action, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Action, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/certificate.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/certificate.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/certificate.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/certificate.go       
2026-01-05 17:16:10.000000000 +0100
@@ -161,11 +161,14 @@
 
 // All returns all Certificates.
 func (c *CertificateClient) All(ctx context.Context) ([]*Certificate, error) {
-       return c.AllWithOpts(ctx, CertificateListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, CertificateListOpts{})
 }
 
 // AllWithOpts returns all Certificates for the given options.
 func (c *CertificateClient) AllWithOpts(ctx context.Context, opts 
CertificateListOpts) ([]*Certificate, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Certificate, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go        
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go        
2026-01-05 17:16:10.000000000 +0100
@@ -103,11 +103,14 @@
 
 // All returns all datacenters.
 func (c *DatacenterClient) All(ctx context.Context) ([]*Datacenter, error) {
-       return c.AllWithOpts(ctx, DatacenterListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, DatacenterListOpts{})
 }
 
 // AllWithOpts returns all datacenters for the given options.
 func (c *DatacenterClient) AllWithOpts(ctx context.Context, opts 
DatacenterListOpts) ([]*Datacenter, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Datacenter, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/firewall.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/firewall.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/firewall.go  
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/firewall.go  
2026-01-05 17:16:10.000000000 +0100
@@ -163,11 +163,14 @@
 
 // All returns all Firewalls.
 func (c *FirewallClient) All(ctx context.Context) ([]*Firewall, error) {
-       return c.AllWithOpts(ctx, FirewallListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, FirewallListOpts{})
 }
 
 // AllWithOpts returns all Firewalls for the given options.
 func (c *FirewallClient) AllWithOpts(ctx context.Context, opts 
FirewallListOpts) ([]*Firewall, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Firewall, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/floating_ip.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/floating_ip.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/floating_ip.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/floating_ip.go       
2026-01-05 17:16:10.000000000 +0100
@@ -157,11 +157,14 @@
 
 // All returns all Floating IPs.
 func (c *FloatingIPClient) All(ctx context.Context) ([]*FloatingIP, error) {
-       return c.AllWithOpts(ctx, FloatingIPListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, FloatingIPListOpts{})
 }
 
 // AllWithOpts returns all Floating IPs for the given options.
 func (c *FloatingIPClient) AllWithOpts(ctx context.Context, opts 
FloatingIPListOpts) ([]*FloatingIP, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*FloatingIP, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go    
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go    
2026-01-05 17:16:10.000000000 +0100
@@ -31,4 +31,4 @@
 package hcloud
 
 // Version is the library's version following Semantic Versioning.
-const Version = "2.32.0" // x-releaser-pleaser-version
+const Version = "2.33.0" // x-releaser-pleaser-version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/image.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/image.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/image.go     
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/image.go     
2026-01-05 17:16:10.000000000 +0100
@@ -198,11 +198,14 @@
 
 // All returns all images.
 func (c *ImageClient) All(ctx context.Context) ([]*Image, error) {
-       return c.AllWithOpts(ctx, ImageListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, ImageListOpts{})
 }
 
 // AllWithOpts returns all images for the given options.
 func (c *ImageClient) AllWithOpts(ctx context.Context, opts ImageListOpts) 
([]*Image, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Image, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/iso.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/iso.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/iso.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/iso.go       
2026-01-05 17:16:10.000000000 +0100
@@ -123,11 +123,14 @@
 
 // All returns all ISOs.
 func (c *ISOClient) All(ctx context.Context) ([]*ISO, error) {
-       return c.AllWithOpts(ctx, ISOListOpts{ListOpts: ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, ISOListOpts{})
 }
 
 // AllWithOpts returns all ISOs for the given options.
 func (c *ISOClient) AllWithOpts(ctx context.Context, opts ISOListOpts) 
([]*ISO, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*ISO, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer.go     
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer.go     
2026-01-05 17:16:10.000000000 +0100
@@ -316,11 +316,14 @@
 
 // All returns all Load Balancers.
 func (c *LoadBalancerClient) All(ctx context.Context) ([]*LoadBalancer, error) 
{
-       return c.AllWithOpts(ctx, LoadBalancerListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, LoadBalancerListOpts{})
 }
 
 // AllWithOpts returns all Load Balancers for the given options.
 func (c *LoadBalancerClient) AllWithOpts(ctx context.Context, opts 
LoadBalancerListOpts) ([]*LoadBalancer, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*LoadBalancer, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer_type.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer_type.go
--- 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer_type.go    
    2025-12-18 17:46:45.000000000 +0100
+++ 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/load_balancer_type.go    
    2026-01-05 17:16:10.000000000 +0100
@@ -100,11 +100,14 @@
 
 // All returns all Load Balancer types.
 func (c *LoadBalancerTypeClient) All(ctx context.Context) 
([]*LoadBalancerType, error) {
-       return c.AllWithOpts(ctx, LoadBalancerTypeListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, LoadBalancerTypeListOpts{})
 }
 
 // AllWithOpts returns all Load Balancer types for the given options.
 func (c *LoadBalancerTypeClient) AllWithOpts(ctx context.Context, opts 
LoadBalancerTypeListOpts) ([]*LoadBalancerType, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*LoadBalancerType, *Response, error) 
{
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/location.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/location.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/location.go  
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/location.go  
2026-01-05 17:16:10.000000000 +0100
@@ -99,11 +99,14 @@
 
 // All returns all locations.
 func (c *LocationClient) All(ctx context.Context) ([]*Location, error) {
-       return c.AllWithOpts(ctx, LocationListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, LocationListOpts{})
 }
 
 // AllWithOpts returns all locations for the given options.
 func (c *LocationClient) AllWithOpts(ctx context.Context, opts 
LocationListOpts) ([]*Location, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Location, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/network.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/network.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/network.go   
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/network.go   
2026-01-05 17:16:10.000000000 +0100
@@ -151,11 +151,14 @@
 
 // All returns all networks.
 func (c *NetworkClient) All(ctx context.Context) ([]*Network, error) {
-       return c.AllWithOpts(ctx, NetworkListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, NetworkListOpts{})
 }
 
 // AllWithOpts returns all networks for the given options.
 func (c *NetworkClient) AllWithOpts(ctx context.Context, opts NetworkListOpts) 
([]*Network, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Network, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/placement_group.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/placement_group.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/placement_group.go   
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/placement_group.go   
2026-01-05 17:16:10.000000000 +0100
@@ -106,17 +106,14 @@
 
 // All returns all PlacementGroups.
 func (c *PlacementGroupClient) All(ctx context.Context) ([]*PlacementGroup, 
error) {
-       opts := PlacementGroupListOpts{
-               ListOpts: ListOpts{
-                       PerPage: 50,
-               },
-       }
-
-       return c.AllWithOpts(ctx, opts)
+       return c.AllWithOpts(ctx, PlacementGroupListOpts{})
 }
 
 // AllWithOpts returns all PlacementGroups for the given options.
 func (c *PlacementGroupClient) AllWithOpts(ctx context.Context, opts 
PlacementGroupListOpts) ([]*PlacementGroup, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*PlacementGroup, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/primary_ip.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/primary_ip.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/primary_ip.go        
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/primary_ip.go        
2026-01-05 17:16:10.000000000 +0100
@@ -26,7 +26,12 @@
        AutoDelete   bool
        Blocked      bool
        Created      time.Time
-       Datacenter   *Datacenter
+       Location     *Location
+
+       // Deprecated: [PrimaryIP.Datacenter] is deprecated and will be removed 
after 1 July 2026.
+       // Use [PrimaryIP.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter *Datacenter
 }
 
 // PrimaryIPProtection represents the protection level of a Primary IP.
@@ -88,10 +93,15 @@
        AssigneeID   *int64
        AssigneeType string
        AutoDelete   *bool
-       Datacenter   string
+       Location     string
        Labels       map[string]string
        Name         string
        Type         PrimaryIPType
+
+       // Deprecated: [PrimaryIPCreateOpts.Datacenter] is deprecated and will 
be removed after 1 July 2026.
+       // Use [PrimaryIPCreateOpts.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter string
 }
 
 // PrimaryIPCreateResult defines the response
@@ -230,11 +240,14 @@
 
 // All returns all Primary IPs.
 func (c *PrimaryIPClient) All(ctx context.Context) ([]*PrimaryIP, error) {
-       return c.AllWithOpts(ctx, PrimaryIPListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, PrimaryIPListOpts{})
 }
 
 // AllWithOpts returns all Primary IPs for the given options.
 func (c *PrimaryIPClient) AllWithOpts(ctx context.Context, opts 
PrimaryIPListOpts) ([]*PrimaryIP, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*PrimaryIP, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/primary_ip.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/primary_ip.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/primary_ip.go 
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/primary_ip.go 
2026-01-05 17:16:10.000000000 +0100
@@ -16,7 +16,12 @@
        AutoDelete   bool                `json:"auto_delete"`
        Blocked      bool                `json:"blocked"`
        Created      time.Time           `json:"created"`
-       Datacenter   Datacenter          `json:"datacenter"`
+       Location     Location            `json:"location"`
+
+       // Deprecated: [PrimaryIP.Datacenter] is deprecated and will be removed 
after 1 July 2026.
+       // Use [PrimaryIP.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter *Datacenter `json:"datacenter"`
 }
 
 // PrimaryIPProtection represents the protection level of a Primary IP.
@@ -40,7 +45,12 @@
        AssigneeID   *int64             `json:"assignee_id,omitempty"`
        Labels       *map[string]string `json:"labels,omitempty"`
        AutoDelete   *bool              `json:"auto_delete,omitempty"`
-       Datacenter   string             `json:"datacenter,omitempty"`
+       Location     string             `json:"location,omitempty"`
+
+       // Deprecated: [PrimaryIPCreateRequest.Datacenter] is deprecated and 
will be removed after 1 July 2026.
+       // Use [PrimaryIPCreateRequest.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter string `json:"datacenter,omitempty"`
 }
 
 // PrimaryIPCreateResponse defines the schema of the response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server.go     
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server.go     
2026-01-05 17:16:10.000000000 +0100
@@ -18,7 +18,7 @@
        RescueEnabled   bool               `json:"rescue_enabled"`
        ISO             *ISO               `json:"iso"`
        Locked          bool               `json:"locked"`
-       Datacenter      Datacenter         `json:"datacenter"`
+       Location        Location           `json:"location"`
        Image           *Image             `json:"image"`
        Protection      ServerProtection   `json:"protection"`
        Labels          map[string]string  `json:"labels"`
@@ -26,6 +26,11 @@
        PrimaryDiskSize int                `json:"primary_disk_size"`
        PlacementGroup  *PlacementGroup    `json:"placement_group"`
        LoadBalancers   []int64            `json:"load_balancers"`
+
+       // Deprecated: [Server.Datacenter] is deprecated and will be removed 
after 1 July 2026.
+       // Use [Server.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter *Datacenter `json:"datacenter"`
 }
 
 // ServerProtection defines the schema of a server's resource protection.
@@ -103,7 +108,6 @@
        Image            IDOrName                `json:"image"`
        SSHKeys          []int64                 `json:"ssh_keys,omitempty"`
        Location         string                  `json:"location,omitempty"`
-       Datacenter       string                  `json:"datacenter,omitempty"`
        UserData         string                  `json:"user_data,omitempty"`
        StartAfterCreate *bool                   
`json:"start_after_create,omitempty"`
        Labels           *map[string]string      `json:"labels,omitempty"`
@@ -113,6 +117,11 @@
        Firewalls        []ServerCreateFirewalls `json:"firewalls,omitempty"`
        PlacementGroup   int64                   
`json:"placement_group,omitempty"`
        PublicNet        *ServerCreatePublicNet  `json:"public_net,omitempty"`
+
+       // Deprecated: [ServerCreateRequest.Datacenter] is deprecated and will 
be removed after 1 July 2026.
+       // Use [ServerCreateRequest.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter string `json:"datacenter,omitempty"`
 }
 
 // ServerCreatePublicNet defines the public network configuration of a server.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/zone_rrset.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/zone_rrset.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/zone_rrset.go 
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/zone_rrset.go 
2026-01-05 17:16:10.000000000 +0100
@@ -66,6 +66,15 @@
        TTL     *int              `json:"ttl,omitempty"`
 }
 
+type ZoneRRSetUpdateRecordsRequest struct {
+       Records []ZoneRRSetUpdateRecordsRequestRecord `json:"records"`
+}
+
+type ZoneRRSetUpdateRecordsRequestRecord struct {
+       Value   string `json:"value"`
+       Comment string `json:"comment"` // Always send comment
+}
+
 type ZoneRRSetRemoveRecordsRequest struct {
        Records []ZoneRRSetRecord `json:"records"`
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go    
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go    
2026-01-05 17:16:10.000000000 +0100
@@ -423,6 +423,10 @@
        return c.SchemaFromZoneRRSetAddRecordsOpts(opts)
 }
 
+func SchemaFromZoneRRSetUpdateRecordsOpts(opts ZoneRRSetUpdateRecordsOpts) 
schema.ZoneRRSetUpdateRecordsRequest {
+       return c.SchemaFromZoneRRSetUpdateRecordsOpts(opts)
+}
+
 func SchemaFromZoneRRSetRemoveRecordsOpts(opts ZoneRRSetRemoveRecordsOpts) 
schema.ZoneRRSetRemoveRecordsRequest {
        return c.SchemaFromZoneRRSetRemoveRecordsOpts(opts)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go        
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go        
2026-01-05 17:16:10.000000000 +0100
@@ -388,6 +388,7 @@
 
        SchemaFromZoneRRSetSetRecordsOpts(ZoneRRSetSetRecordsOpts) 
schema.ZoneRRSetSetRecordsRequest
        SchemaFromZoneRRSetAddRecordsOpts(ZoneRRSetAddRecordsOpts) 
schema.ZoneRRSetAddRecordsRequest
+       SchemaFromZoneRRSetUpdateRecordsOpts(ZoneRRSetUpdateRecordsOpts) 
schema.ZoneRRSetUpdateRecordsRequest
        SchemaFromZoneRRSetRemoveRecordsOpts(ZoneRRSetRemoveRecordsOpts) 
schema.ZoneRRSetRemoveRecordsRequest
 
        // StorageBoxType
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server.go    
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server.go    
2026-01-05 17:16:10.000000000 +0100
@@ -22,7 +22,7 @@
        PublicNet       ServerPublicNet
        PrivateNet      []ServerPrivateNet
        ServerType      *ServerType
-       Datacenter      *Datacenter
+       Location        *Location
        IncludedTraffic uint64
        OutgoingTraffic uint64
        IngoingTraffic  uint64
@@ -37,6 +37,11 @@
        PrimaryDiskSize int
        PlacementGroup  *PlacementGroup
        LoadBalancers   []*LoadBalancer
+
+       // Deprecated: [Server.Datacenter] is deprecated and will be removed 
after 1 July 2026.
+       // Use [Server.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter *Datacenter
 }
 
 // ServerProtection represents the protection level of a server.
@@ -274,11 +279,14 @@
 
 // All returns all servers.
 func (c *ServerClient) All(ctx context.Context) ([]*Server, error) {
-       return c.AllWithOpts(ctx, ServerListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, ServerListOpts{})
 }
 
 // AllWithOpts returns all servers for the given options.
 func (c *ServerClient) AllWithOpts(ctx context.Context, opts ServerListOpts) 
([]*Server, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Server, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
@@ -292,7 +300,6 @@
        Image            *Image
        SSHKeys          []*SSHKey
        Location         *Location
-       Datacenter       *Datacenter
        UserData         string
        StartAfterCreate *bool
        Labels           map[string]string
@@ -302,6 +309,11 @@
        Firewalls        []*ServerCreateFirewall
        PlacementGroup   *PlacementGroup
        PublicNet        *ServerCreatePublicNet
+
+       // Deprecated: [ServerCreateOpts.Datacenter] is deprecated and will be 
removed after 1 July 2026.
+       // Use [ServerCreateOpts.Location] instead.
+       // See 
https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters
+       Datacenter *Datacenter
 }
 
 type ServerCreatePublicNet struct {
@@ -404,9 +416,9 @@
        }
        if opts.Datacenter != nil {
                if opts.Datacenter.ID != 0 {
-                       reqBody.Datacenter = 
strconv.FormatInt(opts.Datacenter.ID, 10)
+                       reqBody.Datacenter = 
strconv.FormatInt(opts.Datacenter.ID, 10) // nolint:staticcheck // Deprecated
                } else {
-                       reqBody.Datacenter = opts.Datacenter.Name
+                       reqBody.Datacenter = opts.Datacenter.Name // 
nolint:staticcheck // Deprecated
                }
        }
        if opts.PlacementGroup != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go       
2026-01-05 17:16:10.000000000 +0100
@@ -139,11 +139,14 @@
 
 // All returns all server types.
 func (c *ServerTypeClient) All(ctx context.Context) ([]*ServerType, error) {
-       return c.AllWithOpts(ctx, ServerTypeListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, ServerTypeListOpts{})
 }
 
 // AllWithOpts returns all server types for the given options.
 func (c *ServerTypeClient) AllWithOpts(ctx context.Context, opts 
ServerTypeListOpts) ([]*ServerType, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*ServerType, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/ssh_key.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/ssh_key.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/ssh_key.go   
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/ssh_key.go   
2026-01-05 17:16:10.000000000 +0100
@@ -105,11 +105,14 @@
 
 // All returns all SSH keys.
 func (c *SSHKeyClient) All(ctx context.Context) ([]*SSHKey, error) {
-       return c.AllWithOpts(ctx, SSHKeyListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, SSHKeyListOpts{})
 }
 
 // AllWithOpts returns all SSH keys with the given options.
 func (c *SSHKeyClient) AllWithOpts(ctx context.Context, opts SSHKeyListOpts) 
([]*SSHKey, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*SSHKey, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box.go       
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box.go       
2026-01-05 17:16:10.000000000 +0100
@@ -180,7 +180,7 @@
 //
 // Experimental: [StorageBoxClient] is experimental, breaking changes may 
occur within minor releases.
 func (c *StorageBoxClient) All(ctx context.Context) ([]*StorageBox, error) {
-       return c.AllWithOpts(ctx, StorageBoxListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, StorageBoxListOpts{})
 }
 
 // AllWithOpts returns all [StorageBox] with the given options.
@@ -189,6 +189,9 @@
 //
 // Experimental: [StorageBoxClient] is experimental, breaking changes may 
occur within minor releases.
 func (c *StorageBoxClient) AllWithOpts(ctx context.Context, opts 
StorageBoxListOpts) ([]*StorageBox, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*StorageBox, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box_type.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box_type.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box_type.go  
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/storage_box_type.go  
2026-01-05 17:16:10.000000000 +0100
@@ -79,7 +79,7 @@
 //
 // Experimental: [StorageBoxTypeClient] is experimental, breaking changes may 
occur within minor releases.
 func (c *StorageBoxTypeClient) All(ctx context.Context) ([]*StorageBoxType, 
error) {
-       return c.AllWithOpts(ctx, StorageBoxTypeListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, StorageBoxTypeListOpts{})
 }
 
 // AllWithOpts returns all storage box types for the given options.
@@ -88,6 +88,9 @@
 //
 // Experimental: [StorageBoxTypeClient] is experimental, breaking changes may 
occur within minor releases.
 func (c *StorageBoxTypeClient) AllWithOpts(ctx context.Context, opts 
StorageBoxTypeListOpts) ([]*StorageBoxType, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*StorageBoxType, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/volume.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/volume.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/volume.go    
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/volume.go    
2026-01-05 17:16:10.000000000 +0100
@@ -125,11 +125,14 @@
 
 // All returns all volumes.
 func (c *VolumeClient) All(ctx context.Context) ([]*Volume, error) {
-       return c.AllWithOpts(ctx, VolumeListOpts{ListOpts: ListOpts{PerPage: 
50}})
+       return c.AllWithOpts(ctx, VolumeListOpts{})
 }
 
 // AllWithOpts returns all volumes with the given options.
 func (c *VolumeClient) AllWithOpts(ctx context.Context, opts VolumeListOpts) 
([]*Volume, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Volume, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone.go      
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone.go      
2026-01-05 17:16:10.000000000 +0100
@@ -197,13 +197,16 @@
 //
 // See https://docs.hetzner.cloud/reference/cloud#zones-list-zones
 func (c *ZoneClient) All(ctx context.Context) ([]*Zone, error) {
-       return c.AllWithOpts(ctx, ZoneListOpts{ListOpts: ListOpts{PerPage: 50}})
+       return c.AllWithOpts(ctx, ZoneListOpts{})
 }
 
 // AllWithOpts returns a list of all [Zone] with the given options.
 //
 // See https://docs.hetzner.cloud/reference/cloud#zones-list-zones
 func (c *ZoneClient) AllWithOpts(ctx context.Context, opts ZoneListOpts) 
([]*Zone, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*Zone, *Response, error) {
                opts.Page = page
                return c.List(ctx, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone_rrset.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone_rrset.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone_rrset.go        
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zone_rrset.go        
2026-01-05 17:16:10.000000000 +0100
@@ -163,6 +163,9 @@
 //
 // See https://docs.hetzner.cloud/reference/cloud#zone-rrsets-list-rrsets
 func (c *ZoneClient) AllRRSetsWithOpts(ctx context.Context, zone *Zone, opts 
ZoneRRSetListOpts) ([]*ZoneRRSet, error) {
+       if opts.ListOpts.PerPage == 0 {
+               opts.ListOpts.PerPage = 50
+       }
        return iterPages(func(page int) ([]*ZoneRRSet, *Response, error) {
                opts.Page = page
                return c.ListRRSets(ctx, zone, opts)
@@ -173,7 +176,7 @@
 //
 // See https://docs.hetzner.cloud/reference/cloud#zone-rrsets-list-rrsets
 func (c *ZoneClient) AllRRSets(ctx context.Context, zone *Zone) ([]*ZoneRRSet, 
error) {
-       return c.AllRRSetsWithOpts(ctx, zone, ZoneRRSetListOpts{ListOpts: 
ListOpts{PerPage: 50}})
+       return c.AllRRSetsWithOpts(ctx, zone, ZoneRRSetListOpts{})
 }
 
 // ZoneRRSetCreateOpts defines options for creating a [ZoneRRSet].
@@ -445,6 +448,44 @@
 
        respBody, resp, err := postRequest[schema.ActionGetResponse](ctx, 
c.client, reqPath, reqBody)
        if err != nil {
+               return nil, resp, err
+       }
+
+       return ActionFromSchema(respBody.Action), resp, err
+}
+
+// ZoneRRSetUpdateRecordsOpts defines options for updating records of a 
[ZoneRRSet].
+type ZoneRRSetUpdateRecordsOpts struct {
+       Records []ZoneRRSetRecord
+}
+
+// UpdateRRSetRecords updates records of a [ZoneRRSet].
+//
+// See 
https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-add-records-to-an-rrset
+func (c *ZoneClient) UpdateRRSetRecords(ctx context.Context, rrset *ZoneRRSet, 
opts ZoneRRSetUpdateRecordsOpts) (*Action, *Response, error) {
+       const opPath = "/zones/%s/rrsets/%s/%s/actions/update_records"
+       ctx = ctxutil.SetOpPath(ctx, opPath)
+
+       if rrset.Zone == nil {
+               return nil, nil, invalidArgument("rrset", rrset, 
missingField(rrset, "Zone"))
+       }
+
+       zoneIDOrName, err := rrset.Zone.idOrName()
+       if err != nil {
+               return nil, nil, invalidArgument("rrset", rrset, err)
+       }
+
+       rrsetName, rrsetType, err := rrset.nameAndType()
+       if err != nil {
+               return nil, nil, invalidArgument("rrset", rrset, err)
+       }
+
+       reqPath := fmt.Sprintf(opPath, zoneIDOrName, rrsetName, rrsetType)
+
+       reqBody := SchemaFromZoneRRSetUpdateRecordsOpts(opts)
+
+       respBody, resp, err := postRequest[schema.ActionGetResponse](ctx, 
c.client, reqPath, reqBody)
+       if err != nil {
                return nil, resp, err
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go
--- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go 
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go 
2026-01-05 17:16:10.000000000 +0100
@@ -442,7 +442,8 @@
        hcloudPrimaryIP.AutoDelete = source.AutoDelete
        hcloudPrimaryIP.Blocked = source.Blocked
        hcloudPrimaryIP.Created = c.timeTimeToTimeTime(source.Created)
-       hcloudPrimaryIP.Datacenter = c.DatacenterFromSchema(source.Datacenter)
+       hcloudPrimaryIP.Location = c.LocationFromSchema(source.Location)
+       hcloudPrimaryIP.Datacenter = 
c.pSchemaDatacenterToPHcloudDatacenter(source.Datacenter)
        return &hcloudPrimaryIP
 }
 func (c *converterImpl) SSHKeyFromSchema(source schema.SSHKey) *SSHKey {
@@ -956,7 +957,8 @@
                schemaPrimaryIP.AutoDelete = (*source).AutoDelete
                schemaPrimaryIP.Blocked = (*source).Blocked
                schemaPrimaryIP.Created = 
c.timeTimeToTimeTime((*source).Created)
-               schemaPrimaryIP.Datacenter = 
c.SchemaFromDatacenter((*source).Datacenter)
+               schemaPrimaryIP.Location = 
c.SchemaFromLocation((*source).Location)
+               schemaPrimaryIP.Datacenter = 
c.pHcloudDatacenterToPSchemaDatacenter((*source).Datacenter)
        }
        return schemaPrimaryIP
 }
@@ -986,6 +988,7 @@
        schemaPrimaryIPCreateRequest.AssigneeID = source.AssigneeID
        schemaPrimaryIPCreateRequest.Labels = 
stringMapToStringMapPtr(source.Labels)
        schemaPrimaryIPCreateRequest.AutoDelete = source.AutoDelete
+       schemaPrimaryIPCreateRequest.Location = source.Location
        schemaPrimaryIPCreateRequest.Datacenter = source.Datacenter
        return schemaPrimaryIPCreateRequest
 }
@@ -1030,7 +1033,7 @@
                schemaServer.RescueEnabled = (*source).RescueEnabled
                schemaServer.ISO = c.pHcloudISOToPSchemaISO((*source).ISO)
                schemaServer.Locked = (*source).Locked
-               schemaServer.Datacenter = 
c.SchemaFromDatacenter((*source).Datacenter)
+               schemaServer.Location = c.SchemaFromLocation((*source).Location)
                schemaServer.Image = 
c.pHcloudImageToPSchemaImage((*source).Image)
                schemaServer.Protection = 
c.hcloudServerProtectionToSchemaServerProtection((*source).Protection)
                schemaServer.Labels = (*source).Labels
@@ -1048,6 +1051,7 @@
                                schemaServer.LoadBalancers[k] = 
c.pHcloudLoadBalancerToInt64((*source).LoadBalancers[k])
                        }
                }
+               schemaServer.Datacenter = 
c.pHcloudDatacenterToPSchemaDatacenter((*source).Datacenter)
        }
        return schemaServer
 }
@@ -1467,6 +1471,16 @@
        schemaZoneRRSetUpdateRequest.Labels = 
stringMapToStringMapPtr(source.Labels)
        return schemaZoneRRSetUpdateRequest
 }
+func (c *converterImpl) SchemaFromZoneRRSetUpdateRecordsOpts(source 
ZoneRRSetUpdateRecordsOpts) schema.ZoneRRSetUpdateRecordsRequest {
+       var schemaZoneRRSetUpdateRecordsRequest 
schema.ZoneRRSetUpdateRecordsRequest
+       if source.Records != nil {
+               schemaZoneRRSetUpdateRecordsRequest.Records = 
make([]schema.ZoneRRSetUpdateRecordsRequestRecord, len(source.Records))
+               for i := 0; i < len(source.Records); i++ {
+                       schemaZoneRRSetUpdateRecordsRequest.Records[i] = 
c.hcloudZoneRRSetRecordToSchemaZoneRRSetUpdateRecordsRequestRecord(source.Records[i])
+               }
+       }
+       return schemaZoneRRSetUpdateRecordsRequest
+}
 func (c *converterImpl) SchemaFromZoneUpdateOpts(source ZoneUpdateOpts) 
schema.ZoneUpdateRequest {
        var schemaZoneUpdateRequest schema.ZoneUpdateRequest
        schemaZoneUpdateRequest.Labels = stringMapToStringMapPtr(source.Labels)
@@ -1486,7 +1500,7 @@
                }
        }
        hcloudServer.ServerType = c.ServerTypeFromSchema(source.ServerType)
-       hcloudServer.Datacenter = c.DatacenterFromSchema(source.Datacenter)
+       hcloudServer.Location = c.LocationFromSchema(source.Location)
        hcloudServer.IncludedTraffic = source.IncludedTraffic
        if source.OutgoingTraffic != nil {
                hcloudServer.OutgoingTraffic = *source.OutgoingTraffic
@@ -1518,6 +1532,7 @@
                        hcloudServer.LoadBalancers[k] = &hcloudLoadBalancer
                }
        }
+       hcloudServer.Datacenter = 
c.pSchemaDatacenterToPHcloudDatacenter(source.Datacenter)
        return &hcloudServer
 }
 func (c *converterImpl) ServerMetricsFromSchema(source 
*schema.ServerGetMetricsResponse) (*ServerMetrics, error) {
@@ -2049,6 +2064,12 @@
        schemaZoneRRSetRecord.Comment = source.Comment
        return schemaZoneRRSetRecord
 }
+func (c *converterImpl) 
hcloudZoneRRSetRecordToSchemaZoneRRSetUpdateRecordsRequestRecord(source 
ZoneRRSetRecord) schema.ZoneRRSetUpdateRecordsRequestRecord {
+       var schemaZoneRRSetUpdateRecordsRequestRecord 
schema.ZoneRRSetUpdateRecordsRequestRecord
+       schemaZoneRRSetUpdateRecordsRequestRecord.Value = source.Value
+       schemaZoneRRSetUpdateRecordsRequestRecord.Comment = source.Comment
+       return schemaZoneRRSetUpdateRecordsRequestRecord
+}
 func (c *converterImpl) intISOFromSchema(source schema.ISO) ISO {
        var hcloudISO ISO
        hcloudISO.ID = source.ID
@@ -2110,6 +2131,19 @@
        }
        return pSchemaCertificateStatusRef
 }
+func (c *converterImpl) pHcloudDatacenterToPSchemaDatacenter(source 
*Datacenter) *schema.Datacenter {
+       var pSchemaDatacenter *schema.Datacenter
+       if source != nil {
+               var schemaDatacenter schema.Datacenter
+               schemaDatacenter.ID = (*source).ID
+               schemaDatacenter.Name = (*source).Name
+               schemaDatacenter.Description = (*source).Description
+               schemaDatacenter.Location = 
c.SchemaFromLocation((*source).Location)
+               schemaDatacenter.ServerTypes = 
c.hcloudDatacenterServerTypesToSchemaDatacenterServerTypes((*source).ServerTypes)
+               pSchemaDatacenter = &schemaDatacenter
+       }
+       return pSchemaDatacenter
+}
 func (c *converterImpl) pHcloudErrorToPSchemaError(source *Error) 
*schema.Error {
        var pSchemaError *schema.Error
        if source != nil {
@@ -2535,6 +2569,19 @@
        }
        return pHcloudCertificateStatus
 }
+func (c *converterImpl) pSchemaDatacenterToPHcloudDatacenter(source 
*schema.Datacenter) *Datacenter {
+       var pHcloudDatacenter *Datacenter
+       if source != nil {
+               var hcloudDatacenter Datacenter
+               hcloudDatacenter.ID = (*source).ID
+               hcloudDatacenter.Name = (*source).Name
+               hcloudDatacenter.Description = (*source).Description
+               hcloudDatacenter.Location = 
c.LocationFromSchema((*source).Location)
+               hcloudDatacenter.ServerTypes = 
c.schemaDatacenterServerTypesToHcloudDatacenterServerTypes((*source).ServerTypes)
+               pHcloudDatacenter = &hcloudDatacenter
+       }
+       return pHcloudDatacenter
+}
 func (c *converterImpl) pSchemaErrorToPHcloudError(source *schema.Error) 
*Error {
        var pHcloudError *Error
        if source != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_zone_client_iface.go 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_zone_client_iface.go
--- 
old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_zone_client_iface.go  
    2025-12-18 17:46:45.000000000 +0100
+++ 
new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_zone_client_iface.go  
    2026-01-05 17:16:10.000000000 +0100
@@ -112,6 +112,10 @@
        //
        // See 
https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-add-records-to-an-rrset
        AddRRSetRecords(ctx context.Context, rrset *ZoneRRSet, opts 
ZoneRRSetAddRecordsOpts) (*Action, *Response, error)
+       // UpdateRRSetRecords updates records of a [ZoneRRSet].
+       //
+       // See 
https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-add-records-to-an-rrset
+       UpdateRRSetRecords(ctx context.Context, rrset *ZoneRRSet, opts 
ZoneRRSetUpdateRecordsOpts) (*Action, *Response, error)
        // RemoveRRSetRecords removes records from a [ZoneRRSet].
        //
        // See 
https://docs.hetzner.cloud/reference/cloud#zone-rrset-actions-remove-records-from-an-rrset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/jedib0t/go-pretty/v6/table/render_csv.go 
new/vendor/github.com/jedib0t/go-pretty/v6/table/render_csv.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/table/render_csv.go      
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/table/render_csv.go      
2026-01-05 17:16:10.000000000 +0100
@@ -36,11 +36,11 @@
 }
 
 func (t *Table) csvFixCommas(str string) string {
-       return strings.Replace(str, ",", "\\,", -1)
+       return strings.ReplaceAll(str, ",", "\\,")
 }
 
 func (t *Table) csvFixDoubleQuotes(str string) string {
-       return strings.Replace(str, "\"", "\\\"", -1)
+       return strings.ReplaceAll(str, "\"", "\\\"")
 }
 
 func (t *Table) csvRenderRow(out *strings.Builder, row rowStr, hint 
renderHint) {
@@ -54,7 +54,7 @@
                // auto-index column
                if colIdx == 0 && t.autoIndex {
                        if hint.isRegularRow() {
-                               out.WriteString(fmt.Sprint(hint.rowNumber))
+                               fmt.Fprint(out, hint.rowNumber)
                        }
                        out.WriteRune(',')
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/jedib0t/go-pretty/v6/table/render_html.go 
new/vendor/github.com/jedib0t/go-pretty/v6/table/render_html.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/table/render_html.go     
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/table/render_html.go     
2026-01-05 17:16:10.000000000 +0100
@@ -151,7 +151,7 @@
                out.WriteString("</td>\n")
        } else {
                out.WriteString("    <td align=\"right\">")
-               out.WriteString(fmt.Sprint(hint.rowNumber))
+               fmt.Fprint(out, hint.rowNumber)
                out.WriteString("</td>\n")
        }
 }
@@ -191,10 +191,10 @@
                t.htmlRenderColumnAttributes(out, colIdx, hint, align)
                if extraColumnsRendered > 0 {
                        out.WriteString(" colspan=")
-                       out.WriteString(fmt.Sprint(extraColumnsRendered + 1))
+                       fmt.Fprint(out, extraColumnsRendered+1)
                } else if rowSpan := t.shouldMergeCellsVerticallyBelow(colIdx, 
hint); rowSpan > 1 {
                        out.WriteString(" rowspan=")
-                       out.WriteString(fmt.Sprint(rowSpan))
+                       fmt.Fprint(out, rowSpan)
                }
                out.WriteString(">")
                if len(colStr) == 0 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go 
new/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go 
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/table/render_markdown.go 
2026-01-05 17:16:10.000000000 +0100
@@ -66,7 +66,7 @@
                if hint.isSeparatorRow {
                        out.WriteString("---:")
                } else if hint.isRegularRow() {
-                       out.WriteString(fmt.Sprintf("%d ", hint.rowNumber))
+                       fmt.Fprintf(out, "%d ", hint.rowNumber)
                }
                out.WriteRune('|')
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/jedib0t/go-pretty/v6/table/render_tsv.go 
new/vendor/github.com/jedib0t/go-pretty/v6/table/render_tsv.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/table/render_tsv.go      
2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/table/render_tsv.go      
2026-01-05 17:16:10.000000000 +0100
@@ -40,7 +40,7 @@
        for idx, col := range row {
                if idx == 0 && t.autoIndex {
                        if hint.isRegularRow() {
-                               out.WriteString(fmt.Sprint(hint.rowNumber))
+                               fmt.Fprint(out, hint.rowNumber)
                        }
                        out.WriteRune('\t')
                }
@@ -51,7 +51,7 @@
 
                if strings.ContainsAny(col, "\t\n\"") || strings.Contains(col, 
"    ") {
                        col = strings.ReplaceAll(col, "\"", "\"\"") // fix 
double-quotes
-                       out.WriteString(fmt.Sprintf("\"%s\"", col))
+                       fmt.Fprintf(out, "\"%s\"", col)
                } else {
                        out.WriteString(col)
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/text/ansi.go 
new/vendor/github.com/jedib0t/go-pretty/v6/text/ansi.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/text/ansi.go     2025-12-18 
17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/text/ansi.go     2026-01-05 
17:16:10.000000000 +0100
@@ -15,18 +15,22 @@
 //     Escape("Nymeria\x1b[94mGhost\x1b[0mLady", "\x1b[91m") == 
"\x1b[91mNymeria\x1b[94mGhost\x1b[0m\x1b[91mLady\x1b[0m"
 //     Escape("Nymeria \x1b[94mGhost\x1b[0m Lady", "\x1b[91m") == 
"\x1b[91mNymeria \x1b[94mGhost\x1b[0m\x1b[91m Lady\x1b[0m"
 func Escape(str string, escapeSeq string) string {
-       out := ""
+       var out strings.Builder
+       // Estimate capacity: original string + escape sequences
+       out.Grow(len(str) + len(escapeSeq)*3 + len(EscapeReset)*2)
+
        if !strings.HasPrefix(str, EscapeStart) {
-               out += escapeSeq
+               out.WriteString(escapeSeq)
        }
-       out += strings.Replace(str, EscapeReset, EscapeReset+escapeSeq, -1)
-       if !strings.HasSuffix(out, EscapeReset) {
-               out += EscapeReset
+       out.WriteString(strings.ReplaceAll(str, EscapeReset, 
EscapeReset+escapeSeq))
+       if !strings.HasSuffix(out.String(), EscapeReset) {
+               out.WriteString(EscapeReset)
        }
-       if strings.Contains(out, escapeSeq+EscapeReset) {
-               out = strings.Replace(out, escapeSeq+EscapeReset, "", -1)
+       result := out.String()
+       if strings.Contains(result, escapeSeq+EscapeReset) {
+               result = strings.ReplaceAll(result, escapeSeq+EscapeReset, "")
        }
-       return out
+       return result
 }
 
 // StripEscape strips all ANSI Escape Sequence from the string.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/jedib0t/go-pretty/v6/text/valign.go 
new/vendor/github.com/jedib0t/go-pretty/v6/text/valign.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/text/valign.go   2025-12-18 
17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/text/valign.go   2026-01-05 
17:16:10.000000000 +0100
@@ -27,10 +27,11 @@
                maxLines = len(lines)
        }
 
-       insertIdx := 0
-       if va == VAlignMiddle {
+       var insertIdx int
+       switch va {
+       case VAlignMiddle:
                insertIdx = int(maxLines-len(lines)) / 2
-       } else if va == VAlignBottom {
+       case VAlignBottom:
                insertIdx = maxLines - len(lines)
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/text/wrap.go 
new/vendor/github.com/jedib0t/go-pretty/v6/text/wrap.go
--- old/vendor/github.com/jedib0t/go-pretty/v6/text/wrap.go     2025-12-18 
17:46:45.000000000 +0100
+++ new/vendor/github.com/jedib0t/go-pretty/v6/text/wrap.go     2026-01-05 
17:16:10.000000000 +0100
@@ -13,7 +13,7 @@
        if wrapLen <= 0 {
                return ""
        }
-       str = strings.Replace(str, "\t", "    ", -1)
+       str = strings.ReplaceAll(str, "\t", "    ")
        sLen := StringWidthWithoutEscSequences(str)
        if sLen <= wrapLen {
                return str
@@ -41,7 +41,7 @@
        if wrapLen <= 0 {
                return ""
        }
-       str = strings.Replace(str, "\t", "    ", -1)
+       str = strings.ReplaceAll(str, "\t", "    ")
        sLen := StringWidthWithoutEscSequences(str)
        if sLen <= wrapLen {
                return str
@@ -68,7 +68,7 @@
        if wrapLen <= 0 {
                return ""
        }
-       str = strings.Replace(str, "\t", "    ", -1)
+       str = strings.ReplaceAll(str, "\t", "    ")
        sLen := StringWidthWithoutEscSequences(str)
        if sLen <= wrapLen {
                return str
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt
--- old/vendor/modules.txt      2025-12-18 17:46:45.000000000 +0100
+++ new/vendor/modules.txt      2026-01-05 17:16:10.000000000 +0100
@@ -55,7 +55,7 @@
 # github.com/guptarohit/asciigraph v0.7.3
 ## explicit; go 1.11
 github.com/guptarohit/asciigraph
-# github.com/hetznercloud/hcloud-go/v2 v2.32.0
+# github.com/hetznercloud/hcloud-go/v2 v2.33.0
 ## explicit; go 1.24.0
 github.com/hetznercloud/hcloud-go/v2/hcloud
 github.com/hetznercloud/hcloud-go/v2/hcloud/exp/actionutil
@@ -73,7 +73,7 @@
 # github.com/inconshreveable/mousetrap v1.1.0
 ## explicit; go 1.18
 github.com/inconshreveable/mousetrap
-# github.com/jedib0t/go-pretty/v6 v6.7.7
+# github.com/jedib0t/go-pretty/v6 v6.7.8
 ## explicit; go 1.18
 github.com/jedib0t/go-pretty/v6/table
 github.com/jedib0t/go-pretty/v6/text
@@ -193,7 +193,7 @@
 golang.org/x/crypto/internal/poly1305
 golang.org/x/crypto/ssh
 golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
-# golang.org/x/exp v0.0.0-20251209150349-8475f28825e9
+# golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93
 ## explicit; go 1.24.0
 golang.org/x/exp/maps
 # golang.org/x/net v0.48.0

Reply via email to