diff --git a/changelogs/fragments/improve-unkown-certificate-error.yml b/changelogs/fragments/improve-unkown-certificate-error.yml new file mode 100644 index 0000000..f0d6258 --- /dev/null +++ b/changelogs/fragments/improve-unkown-certificate-error.yml @@ -0,0 +1,2 @@ +bugfixes: + - hcloud_load_balancer_service - Improve unknown certificate id or name error. diff --git a/plugins/modules/load_balancer_service.py b/plugins/modules/load_balancer_service.py index 29e3708..1c69949 100644 --- a/plugins/modules/load_balancer_service.py +++ b/plugins/modules/load_balancer_service.py @@ -282,6 +282,7 @@ from ansible.module_utils.basic import AnsibleModule from ..module_utils.hcloud import AnsibleHCloud from ..module_utils.vendor.hcloud import APIException, HCloudException +from ..module_utils.vendor.hcloud.certificates import BoundCertificate from ..module_utils.vendor.hcloud.load_balancers import ( BoundLoadBalancer, LoadBalancerHealtCheckHttp, @@ -389,16 +390,12 @@ class AnsibleHCloudLoadBalancerService(AnsibleHCloud): if http_arg.get("certificates") is not None: certificates = http_arg.get("certificates") if certificates is not None: - for certificate in certificates: - hcloud_cert = None - try: - try: - hcloud_cert = self.client.certificates.get_by_name(certificate) - except Exception: - hcloud_cert = self.client.certificates.get_by_id(certificate) - except HCloudException as exception: - self.fail_json_hcloud(exception) - service_http.certificates.append(hcloud_cert) + for certificate_id_or_name in certificates: + certificate: BoundCertificate = self._client_get_by_name_or_id( + "certificates", + certificate_id_or_name, + ) + service_http.certificates.append(certificate) return service_http diff --git a/tests/integration/targets/load_balancer_service/tasks/test.yml b/tests/integration/targets/load_balancer_service/tasks/test.yml index 733c4a9..68f4176 100644 --- a/tests/integration/targets/load_balancer_service/tasks/test.yml +++ b/tests/integration/targets/load_balancer_service/tasks/test.yml @@ -76,6 +76,25 @@ - result is failed - 'result.msg == "resource (load_balancer) does not exist: not-existing"' +- name: Test create with not existing certificate + hetzner.hcloud.load_balancer_service: + load_balancer: "{{ hcloud_load_balancer_name }}" + listen_port: 443 + destination_port: 80 + protocol: https + http: + redirect_http: true + certificates: + - not-existing + state: present + ignore_errors: true + register: result +- name: Verify create with not existing certificate + ansible.builtin.assert: + that: + - result is failed + - 'result.msg == "resource (certificate) does not exist: not-existing"' + - name: Test update hetzner.hcloud.load_balancer_service: load_balancer: "{{ hcloud_load_balancer_name }}"