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