softplayer-ansible/playbooks/providers/hetzner/playbook.yml

89 lines
3.1 KiB
YAML

- name: Hetzner playbook
hosts: localhost
connection: local
vars:
output_dir: /tmp/outputs
customer: "{{ lookup('ansible.builtin.env', 'SP_CUSTOMER') }}"
env: "{{ lookup('ansible.builtin.env', 'SP_ENV') }}"
state: "{{ lookup('ansible.builtin.env', 'SP_STATE') }}"
tags:
- cloud
tasks:
- name: Load encrypted credentials
community.sops.load_vars:
file: ../../../group_vars/hetzner.sops.yaml
# --------------------------------------------------------
# -- Prepare SSH keys
# --------------------------------------------------------
- name: Add SSH keys to the hetzner subscription
hetzner.hcloud.hcloud_ssh_key:
api_token: "{{ api_token }}"
name: "{{ customer }}-{{ env }}"
public_key: "{{ lookup('file', '/tmp/outputs/ssh_key.pub') }}"
state: "{{ state }}"
# --------------------------------------------------------
# -- Prepare private networks
# --------------------------------------------------------
- name: Prepare private networks
hetzner.hcloud.hcloud_network:
name: "{{ customer }}-{{ env }}"
ip_range: 10.0.0.0/16
state: "{{ state }}"
api_token: "{{ api_token }}"
# --------------------------------------------------------
# -- Prepare subnets
# --------------------------------------------------------
- name: Prepare subnets
when: state == "present"
hetzner.hcloud.hcloud_subnetwork:
network: "{{ customer }}-{{ env }}"
ip_range: 10.0.0.0/16
state: "{{ state }}"
network_zone: eu-central
type: cloud
api_token: "{{ api_token }}"
# --------------------------------------------------------
# -- Create servers
# --------------------------------------------------------
- name: Create server
hetzner.hcloud.hcloud_server:
name: "{{ customer }}-{{ env }}"
server_type: cx21
image: rocky-9
state: "{{ state }}"
api_token: "{{ api_token }}"
ssh_keys:
- "{{ customer }}-{{ env }}"
firewalls:
- admin
private_networks:
- "{{ customer }}-{{ env }}"
location: hel1
register: server_data
# --------------------------------------------------------
# -- Create floating IPs
# --------------------------------------------------------
- name: Create a floating IP
hetzner.hcloud.hcloud_floating_ip:
name: "{{ customer }}-{{ env }}"
server: "{{ customer }}-{{ env }}"
type: ipv4
state: "{{ state }}"
api_token: "{{ api_token }}"
register: floating_ips_data
- name: Display important output data
block:
- name: Display info about servers public IPs
ansible.builtin.debug:
msg:
- "{{ server_data }}"
when: 'server_data'
- name: Generate new inventory
ansible.builtin.template:
src: templates/inventory.yaml.j2
dest: "{{ output_dir }}/inventory.yaml"
vars:
ipv4_address: "{{ server_data.hcloud_server.ipv4_address }}"
cluster_name: "{{ customer }}-{{ env }}"