You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hetzner-ansible/roles/hcloud/tasks/main.yml

97 lines
2.8 KiB
YAML

---
### tags:
- name: Get all Firewalls from Hetzner
uri:
url: "https://api.hetzner.cloud/v1/firewalls"
headers:
accept: application/json
authorization: Bearer {{ hetzner_authentication_token }}
return_content: yes
register: hetzner_firewalls_response
delegate_to: 127.0.0.1
- name: Save firewall entries as variable (fact)
set_fact:
hetzner_firewalls_response_json: "{{ hetzner_firewalls_response.json }}"
- name: Parse firewall entry for default
set_fact:
firewall_record: "{{ hetzner_firewalls_response_json.firewalls | json_query(jmesquery) | first | default({'name': '-', 'id': '-'}) }}"
vars:
jmesquery: '[*].{id: id, name: name}'
- name: Print firewall entry for default
debug:
msg: "{{ firewall_record }}"
- name: Save firewall entry default
uri:
method: POST
url: "https://api.hetzner.cloud/v1/firewalls"
body_format: json
body: "{{ lookup('template','firewall-default.json.j2') }}"
headers:
accept: application/json
authorization: Bearer {{ hetzner_authentication_token }}
return_content: yes
status_code: 201
when: firewall_record.id == '-'
delegate_to: 127.0.0.1
- name: Update firewall entry default
uri:
method: PUT
url: "https://api.hetzner.cloud/v1/firewalls/{{ firewall_record.id }}"
body_format: json
body: "{{ lookup('template','firewall-default.json.j2') }}"
headers:
accept: application/json
authorization: Bearer {{ hetzner_authentication_token }}
return_content: yes
status_code: 200
when: firewall_record.id != '-'
delegate_to: 127.0.0.1
- name: Create new server {{ inventory_hostname }}
hetzner.hcloud.hcloud_server:
api_token: "{{ hetzner_authentication_token }}"
name: "{{ inventory_hostname }}"
server_type: "{{ hetzner_server_type }}"
image: "{{ hetzner_server_image }}"
ssh_keys: "{{ hetzner_ssh_keys }}"
location: nbg1
state: present
delegate_to: 127.0.0.1
- name: Gather current server infos
hcloud_server_info:
api_token: "{{ hetzner_authentication_token }}"
register: hetzner_server_infos
delegate_to: 127.0.0.1
- name: Save current server infos as variable (fact)
set_fact:
hetzner_server_infos_json: "{{ hetzner_server_infos.hcloud_server_info }}"
delegate_to: 127.0.0.1
- name: Read ip for {{ inventory_hostname }}
set_fact:
stage_server_ip: "{{ item.ipv4_address }}"
when: item.name == inventory_hostname
with_items: "{{ hetzner_server_infos_json }}"
- name: Print the gathered infos
debug:
var: stage_server_ip
delegate_to: 127.0.0.1
- name: "Setup DNS configuration for {{ inventory_hostname }}"
include_role:
name: _digitalocean
tasks_from: domain
vars:
record_data: "{{ stage_server_ip }}"
record_name: "{{ inventory_hostname }}"