89 lines
3.1 KiB
YAML
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 }}"
|