Skip to content

Commit e181d69

Browse files
committed
Switch from API calls to community.dns.hetzner_dns_record
Part of #241, #249
1 parent 541d8a6 commit e181d69

File tree

4 files changed

+59
-164
lines changed

4 files changed

+59
-164
lines changed
Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
11
---
2-
3-
- name: Get DNS zone id at Hetzner
4-
delegate_to: localhost
5-
ansible.builtin.uri:
6-
url: "https://dns.hetzner.com/api/v1/zones"
7-
body_format: json
8-
return_content: true
9-
body:
10-
name: "{{ le_hetzner_zone }}"
11-
headers:
12-
Auth-API-Token: "{{ hetzner_account_api_token }}"
13-
Content-Type: 'application/json'
14-
register: le_hetzner_zone_id
15-
162
- name: Create letsencrypt DNS record at Hetzner
17-
delegate_to: localhost
18-
ansible.builtin.uri:
19-
url: "https://dns.hetzner.com/api/v1/records"
20-
method: POST
21-
body_format: json
22-
return_content: true
23-
body:
24-
value: "{{ item.1 }}"
25-
ttl: 60
26-
type: TXT
27-
name: "{{ item.0.key | replace(public_domain, '') | regex_replace('\\.$', '') }}"
28-
zone_id: "{{ le_hetzner_zone_id.json.zones | json_query('[*].id') | join(', ') }}"
29-
headers:
30-
Auth-API-Token: "{{ le_hetzner_account_api_token }}"
31-
Content-Type: 'application/json'
3+
community.dns.hetzner_dns_record:
4+
state: present
5+
zone: "{{ hetzner_zone }}"
6+
record: "{{ item.0.key }}"
7+
type: TXT
8+
ttl: 60
9+
value: "{{ item.1 }}"
10+
hetzner_token: "{{ hetzner_account_api_token }}"
3211
register: hetzner_record
3312
loop: "{{ challenge_data_dns | default({}) | dict2items | subelements('value') }}"
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
22
- name: Delete DNS record at Hetzner
3-
delegate_to: localhost
4-
ansible.builtin.uri: # noqa no-handler
5-
url: "https://dns.hetzner.com/api/v1/records/{{ item.json.record.id }}"
6-
method: DELETE
7-
headers:
8-
Auth-API-Token: "{{ le_hetzner_account_api_token }}"
9-
Content-Type: 'application/json'
10-
with_items: "{{ hetzner_record.results }}"
11-
when:
12-
- sample_com_challenge is changed
3+
community.dns.hetzner_dns_record:
4+
state: absent
5+
zone: "{{ hetzner_zone }}"
6+
record: "{{ item.0.key }}"
7+
type: TXT
8+
ttl: 60
9+
value: "{{ item.1 }}"
10+
hetzner_token: "{{ hetzner_account_api_token }}"
11+
register: hetzner_record
12+
loop: "{{ challenge_data_dns | default({}) | dict2items | subelements('value') }}"

ansible/roles/public_dns/tasks/create-hetzner.yml

Lines changed: 16 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,13 @@
11
---
2-
- name: Get DNS zone id at Hetzner
3-
uri:
4-
url: "https://dns.hetzner.com/api/v1/zones"
5-
body_format: json
6-
return_content: true
7-
body:
8-
name: "{{ hetzner_zone }}"
9-
headers:
10-
Auth-API-Token: "{{ hetzner_account_api_token }}"
11-
Content-Type: 'application/json'
12-
register: register_hetzner_zone_id
13-
tags:
14-
- public_dns
15-
16-
- name: Set hetzner_zone_id
17-
set_fact:
18-
# hetzner_zone_id: "{{ register_hetzner_zone_id.json.zones | json_query('[?name==`'~ hetzner_zone ~'`] | [0].id') }}"
19-
# You don't need the name == .. because of the body above.
20-
# https://dns.hetzner.com/api-docs#operation/GetZones
21-
hetzner_zone_id: "{{ register_hetzner_zone_id.json.zones[0].id }}"
22-
23-
- name: Get all DNS records
24-
uri:
25-
url: "https://dns.hetzner.com/api/v1/records?zone_id={{ hetzner_zone_id }}"
26-
body_format: json
27-
return_content: true
28-
headers:
29-
Auth-API-Token: "{{ hetzner_account_api_token }}"
30-
Content-Type: 'application/json'
31-
register: register_hetzner_records
32-
tags:
33-
- public_dns
34-
35-
- name: Define hetzner_records_to_delete
36-
# yamllint disable rule:line-length
37-
set_fact:
38-
available_records: "{{ register_hetzner_records.json.records | json_query('[?(value==`'~ pd_public_ip ~'` && ( name==`api.'~ cluster_name ~'` || name ==`*.apps.'~ cluster_name ~'` ) )] | [*].name') }}"
39-
# yamllint enable rule:line-length
40-
412
- name: Create DNS record at Hetzner
42-
uri:
43-
url: "https://dns.hetzner.com/api/v1/records"
44-
method: POST
45-
body_format: json
46-
return_content: true
47-
body:
48-
value: "{{ pd_public_ip }}"
49-
ttl: 120
50-
type: A
51-
name: "{{ item }}.{{ cluster_name }}"
52-
zone_id: "{{ hetzner_zone_id }}"
53-
headers:
54-
Auth-API-Token: "{{ hetzner_account_api_token }}"
55-
Content-Type: 'application/json'
3+
community.dns.hetzner_dns_record:
4+
state: present
5+
zone: "{{ hetzner_zone }}"
6+
record: "{{ item }}.{{ cluster_name }}.{{ public_domain }}."
7+
type: A
8+
ttl: 120
9+
value: "{{ pd_public_ip }}"
10+
hetzner_token: "{{ hetzner_account_api_token }}"
5611
with_items:
5712
- api
5813
- '*.apps'
@@ -61,20 +16,14 @@
6116
when: (pd_public_ip is defined) and (pd_public_ip|length > 0)
6217

6318
- name: Create IPv6 DNS record at Hetzner
64-
uri:
65-
url: "https://dns.hetzner.com/api/v1/records"
66-
method: POST
67-
body_format: json
68-
return_content: true
69-
body:
70-
value: "{{ pd_public_ipv6 }}"
71-
ttl: 120
72-
type: AAAA
73-
name: "{{ item }}.{{ cluster_name }}"
74-
zone_id: "{{ hetzner_zone_id }}"
75-
headers:
76-
Auth-API-Token: "{{ hetzner_account_api_token }}"
77-
Content-Type: 'application/json'
19+
community.dns.hetzner_dns_record:
20+
state: present
21+
zone: "{{ hetzner_zone }}"
22+
record: "{{ item }}.{{ cluster_name }}.{{ public_domain }}."
23+
type: AAAA
24+
ttl: 120
25+
value: "{{ pd_public_ipv6 }}"
26+
hetzner_token: "{{ hetzner_account_api_token }}"
7827
with_items:
7928
- api
8029
- '*.apps'
Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,32 @@
11
---
2-
- name: Get DNS zone id at Hetzner
3-
uri:
4-
url: "https://dns.hetzner.com/api/v1/zones"
5-
body_format: json
6-
return_content: true
7-
body:
8-
name: "{{ hetzner_zone }}"
9-
headers:
10-
Auth-API-Token: "{{ hetzner_account_api_token }}"
11-
Content-Type: 'application/json'
12-
register: register_hetzner_zone_id
2+
- name: Delete DNS record at Hetzner
3+
community.dns.hetzner_dns_record:
4+
state: absent
5+
zone: "{{ hetzner_zone }}"
6+
record: "{{ item }}.{{ cluster_name }}.{{ public_domain }}."
7+
type: A
8+
ttl: 120
9+
value: "{{ pd_public_ip }}"
10+
hetzner_token: "{{ hetzner_account_api_token }}"
11+
with_items:
12+
- api
13+
- '*.apps'
1314
tags:
1415
- public_dns
16+
when: (pd_public_ip is defined) and (pd_public_ip|length > 0)
1517

16-
- name: Set hetzner_zone_id
17-
set_fact:
18-
# hetzner_zone_id: "{{ register_hetzner_zone_id.json.zones | json_query('[?name==`'~ hetzner_zone ~'`] | [0].id') }}"
19-
# You don't need the name == .. because of the body above.
20-
# https://dns.hetzner.com/api-docs#operation/GetZones
21-
hetzner_zone_id: "{{ register_hetzner_zone_id.json.zones[0].id }}"
22-
23-
- name: Get all DNS records
24-
uri:
25-
url: "https://dns.hetzner.com/api/v1/records?zone_id={{ hetzner_zone_id }}"
26-
body_format: json
27-
return_content: true
28-
headers:
29-
Auth-API-Token: "{{ hetzner_account_api_token }}"
30-
Content-Type: 'application/json'
31-
register: register_hetzner_records
18+
- name: Delete IPv6 DNS record at Hetzner
19+
community.dns.hetzner_dns_record:
20+
state: absent
21+
zone: "{{ hetzner_zone }}"
22+
record: "{{ item }}.{{ cluster_name }}.{{ public_domain }}."
23+
type: AAAA
24+
ttl: 120
25+
value: "{{ pd_public_ipv6 }}"
26+
hetzner_token: "{{ hetzner_account_api_token }}"
27+
with_items:
28+
- api
29+
- '*.apps'
3230
tags:
3331
- public_dns
34-
35-
- name: Define hetzner_records_to_delete
36-
# yamllint disable rule:line-length
37-
set_fact:
38-
hetzner_records_to_delete: "{{ register_hetzner_records.json.records | json_query('[?(value==`'~ pd_public_ip ~'` && ( name==`api.'~ cluster_name ~'` || name ==`*.apps.'~ cluster_name ~'` ) )] | [*].id') }}"
39-
# yamllint enable rule:line-length
40-
41-
- name: Delete DNS record at Hetzner
42-
uri:
43-
url: "https://dns.hetzner.com/api/v1/records/{{ item }}"
44-
method: DELETE
45-
headers:
46-
Auth-API-Token: "{{ hetzner_account_api_token }}"
47-
Content-Type: 'application/json'
48-
with_items: "{{ hetzner_records_to_delete }}"
49-
50-
- name: Define hetzner_records_to_delete
51-
# yamllint disable rule:line-length
52-
set_fact:
53-
hetzner_records_to_delete: "{{ register_hetzner_records.json.records | json_query('[?(value==`'~ pd_public_ipv6 ~'` && ( name==`api.'~ cluster_name ~'` || name ==`*.apps.'~ cluster_name ~'` ) )] | [*].id') }}"
54-
# yamllint enable rule:line-length
55-
when: (pd_public_ipv6 is defined) and (pd_public_ipv6|length > 0)
56-
57-
- name: Delete DNS record at Hetzner
58-
uri:
59-
url: "https://dns.hetzner.com/api/v1/records/{{ item }}"
60-
method: DELETE
61-
headers:
62-
Auth-API-Token: "{{ hetzner_account_api_token }}"
63-
Content-Type: 'application/json'
64-
with_items: "{{ hetzner_records_to_delete }}"
6532
when: (pd_public_ipv6 is defined) and (pd_public_ipv6|length > 0)

0 commit comments

Comments
 (0)