From 25bce7eabd01b13248d1fed65897e0408b770469 Mon Sep 17 00:00:00 2001 From: lrsksr Date: Mon, 3 Apr 2023 12:36:33 +0200 Subject: [PATCH] fix(server): prevent backups from being disabled when undefined (#196) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(server): prevent backups from being disabled when undefined With an existing server with backups enabled and the state being either present, started, stopped, restarted or rebuild and the backups module parameter not set, the module would disable backups and in turn delete all existing backups. The correct behaviour (leave backups untouched when parameter not set) is implemented by this commit. Strong typing would have prevented this. * test: verify fix works --------- Co-authored-by: Julian Tölle --- changelogs/fragments/server-fix-backups.yml | 2 ++ plugins/modules/hcloud_server.py | 5 +++-- .../targets/hcloud_server/tasks/basic.yml | 15 +++++++++++++++ .../targets/hcloud_server/tasks/main.yml | 2 +- 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/server-fix-backups.yml diff --git a/changelogs/fragments/server-fix-backups.yml b/changelogs/fragments/server-fix-backups.yml new file mode 100644 index 0000000..b01e130 --- /dev/null +++ b/changelogs/fragments/server-fix-backups.yml @@ -0,0 +1,2 @@ +bugfixes: + - hcloud_server - Prevent backups from being disabled when undefined diff --git a/plugins/modules/hcloud_server.py b/plugins/modules/hcloud_server.py index 1efc741..958b980 100644 --- a/plugins/modules/hcloud_server.py +++ b/plugins/modules/hcloud_server.py @@ -585,11 +585,12 @@ class AnsibleHcloudServer(Hcloud): self.hcloud_server.disable_rescue().wait_until_finished() self._mark_as_changed() - if self.module.params.get("backups") and self.hcloud_server.backup_window is None: + backups = self.module.params.get("backups") + if backups and self.hcloud_server.backup_window is None: if not self.module.check_mode: self.hcloud_server.enable_backup().wait_until_finished() self._mark_as_changed() - elif not self.module.params.get("backups") and self.hcloud_server.backup_window is not None: + elif backups is not None and not backups and self.hcloud_server.backup_window is not None: if not self.module.check_mode: self.hcloud_server.disable_backup().wait_until_finished() self._mark_as_changed() diff --git a/tests/integration/targets/hcloud_server/tasks/basic.yml b/tests/integration/targets/hcloud_server/tasks/basic.yml index 79fe366..ac609fc 100644 --- a/tests/integration/targets/hcloud_server/tasks/basic.yml +++ b/tests/integration/targets/hcloud_server/tasks/basic.yml @@ -214,6 +214,21 @@ - result is not changed - result.hcloud_server.backup_window != "" +- name: test backups are not accidentally disabled + hcloud_server: + name: "{{ hcloud_server_name }}" + # Make sure that backups are not disabled because a partial server object without "backups" was supplied somewhere + # to update some unrelated properties. + # Regression test for https://github.com/ansible-collections/hetzner.hcloud/pull/196 + # backups: true + state: stopped + register: result +- name: verify backups are not accidentally disabled + assert: + that: + - result is not changed + - result.hcloud_server.backup_window != "" + - name: test rebuild server hcloud_server: name: "{{ hcloud_server_name }}" diff --git a/tests/integration/targets/hcloud_server/tasks/main.yml b/tests/integration/targets/hcloud_server/tasks/main.yml index 54ae774..209d9bd 100644 --- a/tests/integration/targets/hcloud_server/tasks/main.yml +++ b/tests/integration/targets/hcloud_server/tasks/main.yml @@ -2,7 +2,7 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) --- #- ansible.builtin.include_tasks: validation.yml -#- ansible.builtin.include_tasks: basic.yml +- ansible.builtin.include_tasks: basic.yml #- ansible.builtin.include_tasks: firewalls.yml - ansible.builtin.include_tasks: primary_ips.yml - ansible.builtin.include_tasks: private_network_only.yml