From 98ae62ac94669bf544143b0c451e57ea093c32bb Mon Sep 17 00:00:00 2001 From: phm07 <22707808+phm07@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:15:42 +0100 Subject: [PATCH] feat(server): allow setting user_data for rebuild (#794) ##### SUMMARY `user_data` is now a supported field for rebuilds. See https://docs.hetzner.cloud/changelog#2026-01-16-server-rebuild-with-user-data --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: jo --- changelogs/fragments/server-rebuild-user-data.yml | 2 ++ plugins/modules/server.py | 11 ++++++++--- tests/integration/targets/server/tasks/test_basic.yml | 4 ++++ 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/server-rebuild-user-data.yml diff --git a/changelogs/fragments/server-rebuild-user-data.yml b/changelogs/fragments/server-rebuild-user-data.yml new file mode 100644 index 0000000..967418d --- /dev/null +++ b/changelogs/fragments/server-rebuild-user-data.yml @@ -0,0 +1,2 @@ +minor_changes: + - server - Rebuilding a Server now supports the ``user_data`` argument. diff --git a/plugins/modules/server.py b/plugins/modules/server.py index f6d4b90..e03903a 100644 --- a/plugins/modules/server.py +++ b/plugins/modules/server.py @@ -126,7 +126,7 @@ options: description: - User Data to be passed to the server on creation. - C(cloud-init), C(ignition) or similar provisioning tools may retrieve user configuration from the Server's C(user_data). - - Only used during the server creation. + - Used during the server creation or server rebuild. type: str rescue_mode: description: @@ -930,8 +930,13 @@ class AnsibleHCloudServer(AnsibleHCloud): self.module.fail_on_missing_params(required_params=["image"]) try: if not self.module.check_mode: - image = self._get_image(self.hcloud_server.server_type) - resp = self.client.servers.rebuild(self.hcloud_server, image) + params = { + "image": self._get_image(self.hcloud_server.server_type), + } + if (value := self.module.params.get("user_data")) is not None: + params["user_data"] = value + + resp = self.client.servers.rebuild(self.hcloud_server, **params) # When we rebuild the server progress takes some more time. resp.action.wait_until_finished(max_retries=202) # 202 retries >= 1002 seconds self._mark_as_changed() diff --git a/tests/integration/targets/server/tasks/test_basic.yml b/tests/integration/targets/server/tasks/test_basic.yml index 025cdf1..715204c 100644 --- a/tests/integration/targets/server/tasks/test_basic.yml +++ b/tests/integration/targets/server/tasks/test_basic.yml @@ -257,6 +257,10 @@ hetzner.hcloud.server: name: "{{ hcloud_server_name }}" image: "{{ hcloud_image_name }}" + user_data: | + #cloud-config + packages: + - curl state: rebuild register: result_after_test - name: verify rebuild server