From 857a9ce52657fe8790404f928d69f85aaecd3933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20K=C3=A4mmerling?= Date: Mon, 30 Nov 2020 09:42:33 +0100 Subject: [PATCH] Allow updating hcloud_server_network (#42) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lukas Kämmerling --- plugins/modules/hcloud_server_network.py | 20 +++++++++++ .../hcloud_server_network/tasks/main.yml | 35 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/plugins/modules/hcloud_server_network.py b/plugins/modules/hcloud_server_network.py index 8fcfcaf..285b2fe 100644 --- a/plugins/modules/hcloud_server_network.py +++ b/plugins/modules/hcloud_server_network.py @@ -173,11 +173,31 @@ class AnsibleHcloudServerNetwork(Hcloud): self._get_server_and_network() self._get_server_network() + def _update_server_network(self): + params = { + "network": self.hcloud_network + } + alias_ips = self.module.params.get("alias_ips") + if alias_ips is not None and self.hcloud_server_network.alias_ips.sort() != alias_ips.sort(): + params["alias_ips"] = alias_ips + + if not self.module.check_mode: + try: + self.hcloud_server.change_alias_ips(**params).wait_until_finished() + except APIException as e: + self.module.fail_json(msg=e.message) + + self._mark_as_changed() + self._get_server_and_network() + self._get_server_network() + def present_server_network(self): self._get_server_and_network() self._get_server_network() if self.hcloud_server_network is None: self._create_server_network() + else: + self._update_server_network() def delete_server_network(self): self._get_server_and_network() diff --git a/tests/integration/targets/hcloud_server_network/tasks/main.yml b/tests/integration/targets/hcloud_server_network/tasks/main.yml index 43235d7..754018a 100644 --- a/tests/integration/targets/hcloud_server_network/tasks/main.yml +++ b/tests/integration/targets/hcloud_server_network/tasks/main.yml @@ -142,6 +142,41 @@ - 'serverNetwork.hcloud_server_network.alias_ips[0] == "10.0.2.3"' - 'serverNetwork.hcloud_server_network.alias_ips[1] == "10.0.1.2"' +- name: test update server network with alias ips + hcloud_server_network: + network: "{{ hcloud_network_name }}" + server: "{{hcloud_server_name}}" + ip: "10.0.0.2" + alias_ips: + - "10.0.2.3" + - "10.0.3.1" + state: present + register: serverNetwork +- name: verify create server network with alias ips + assert: + that: + - serverNetwork is changed + - serverNetwork.hcloud_server_network.network == hcloud_network_name + - serverNetwork.hcloud_server_network.server == hcloud_server_name + - serverNetwork.hcloud_server_network.ip == "10.0.0.2" + - 'serverNetwork.hcloud_server_network.alias_ips[0] == "10.0.2.3"' + - 'serverNetwork.hcloud_server_network.alias_ips[1] == "10.0.3.1"' + +- name: test update server network with alias ips idempotency + hcloud_server_network: + network: "{{ hcloud_network_name }}" + server: "{{hcloud_server_name}}" + ip: "10.0.0.2" + alias_ips: + - "10.0.2.3" + - "10.0.3.1" + state: present + register: serverNetwork +- name: verify create server network with alias ips idempotency + assert: + that: + - serverNetwork is not changed + - name: cleanup create server network with alias ips hcloud_server_network: network: "{{ hcloud_network_name }}"