diff --git a/changelogs/fragments/only-rebuild-existing-servers.yml b/changelogs/fragments/only-rebuild-existing-servers.yml new file mode 100644 index 0000000..f9b8312 --- /dev/null +++ b/changelogs/fragments/only-rebuild-existing-servers.yml @@ -0,0 +1,2 @@ +bugfixes: + - hcloud_server - Only rebuild existing servers, skip rebuild if the server was just created. diff --git a/plugins/modules/server.py b/plugins/modules/server.py index 335209e..f1e20e1 100644 --- a/plugins/modules/server.py +++ b/plugins/modules/server.py @@ -869,18 +869,25 @@ class AnsibleHCloudServer(AnsibleHCloud): return None def rebuild_server(self): - 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) - # 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() + self._get_server() + if self.hcloud_server is None: + self._create_server() + else: + self._update_server() - self._get_server() - except HCloudException as exception: - self.fail_json_hcloud(exception) + # Only rebuild the server if it already existed. + 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) + # 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() + + self._get_server() + except HCloudException as exception: + self.fail_json_hcloud(exception) def present_server(self): self._get_server() @@ -969,7 +976,6 @@ def main(): hcloud.stop_server() hcloud.start_server() elif state == "rebuild": - hcloud.present_server() hcloud.rebuild_server() module.exit_json(**hcloud.get_result())