Skip to content
Snippets Groups Projects
Commit 660b34b7 authored by kaiyou's avatar kaiyou
Browse files

Support multiple cloud providers

parent ebc8a294
No related branches found
No related tags found
No related merge requests found
......@@ -18,5 +18,3 @@ kubeconfig: "/{{ storage_dir }}/{{ cluster_name }}/{{ node_name }}/kubeconfig"
node_role: "{{ 'master' if 'master' in group_names else 'node' }}"
cluster_anchor: "{{ groups['anchor'] | map('extract', hostvars, 'node_ip') | list | ansible.utils.ipaddr('address') | first }}"
external_ips: "{{ groups['public'] | map('extract', hostvars, 'node_ip') | list | ansible.utils.ipaddr('address') }}"
- name: Deploy Hetzner nodes
when: cloud_provider == "hetzner"
include_tasks: cleanup_hetzner.yaml
server_type: cx11
server_image: ubuntu-22.04
server_location: eu-central
# Defaults for Hetzner cloud
hcloud_type: cx11
hcloud_image: debian-12
hcloud_region: eu-central
# Defaults for Scaleway cloud
scaleway_type: PLAY2-NANO
scaleway_image: c1161979-ce89-46c9-941e-ebbb6514d528 # This is Debian 12
scaleway_region: par1
- name: Cleanup Hetzner nodes
when: cloud_provider == "hcloud"
include_tasks: cleanup_hetzner.yaml
- name: Cleanup Scaleway nodes
when: cloud_provider == "scaleway"
include_tasks: cleanup_scaleway.yaml
- name: "Get servers information"
community.general.scaleway_server_info:
api_token: "{{ scaleway_token }}"
region: "{{ scaleway_region }}"
register: raw_servers
- name: "Index servers information"
ansible.builtin.set_fact:
servers: "{{ raw_servers['scaleway_server_info']
| map(attribute='name')
| zip(raw_servers['scaleway_server_info'])
| community.general.dict }}"
- name: "Delete nodes"
community.general.scaleway_compute:
api_token: "{{ scaleway_token }}"
name: "{{ node_prefix }}-{{ item.key }}"
commercial_type: "{{ scaleway_type }}"
image: "{{ scaleway_image }}"
project: "{{ scaleway_project }}"
region: "{{ scaleway_region }}"
state: absent
register: deleted
with_dict: "{{ nodes }}"
- name: "Delete volumes"
community.general.scaleway_volume:
api_token: "{{ scaleway_token }}"
name: "{{ servers[item.invocation.module_args.name].volumes[0].name }}"
project: "{{ scaleway_project }}"
region: "{{ scaleway_region }}"
state: absent
with_dict: "{{ deleted.results }}"
......@@ -2,9 +2,9 @@
hcloud_server:
api_token: "{{ hcloud_token }}"
name: "{{ node_prefix }}-{{ item.key }}"
server_type: "{{ server_type }}"
image: "{{ server_image }}"
location: "{{ server_location }}"
server_type: "{{ hcloud_type }}"
image: "{{ hcloud_image }}"
location: "{{ hcloud_region }}"
ssh_keys:
- "{{ hcloud_ssh_key }}"
enable_ipv6: true
......
- name: Deploy Hetzner nodes
when: cloud_provider == "hetzner"
include_tasks: hetzner.yaml
when: cloud_provider == "hcloud"
include_tasks: hcloud.yaml
- name: Deploy Scaleway nodes
when: cloud_provider == "scaleway"
include_tasks: scaleway.yaml
- name: "Create nodes"
community.general.scaleway_compute:
api_token: "{{ scaleway_token }}"
name: "{{ node_prefix }}-{{ item.key }}"
commercial_type: "{{ scaleway_type }}"
image: "{{ scaleway_image }}"
project: "{{ scaleway_project }}"
region: "{{ scaleway_region }}"
enable_ipv6: true
state: running
register: created
with_dict: "{{ nodes }}"
- name: "Get servers information"
community.general.scaleway_server_info:
api_token: "{{ scaleway_token }}"
region: "{{ scaleway_region }}"
register: raw_servers
- name: "Index servers information"
ansible.builtin.set_fact:
servers: "{{ raw_servers['scaleway_server_info']
| map(attribute='name')
| zip(raw_servers['scaleway_server_info'])
| community.general.dict }}"
- name: Wait for nodes to be ready
ansible.builtin.wait_for:
port: 22
host: "{{ servers[item.invocation.module_args.name].ipv6.address }}"
delay: 2
with_items: "{{ created.results }}"
- name: "Add nodes to inventory"
add_host:
name: "{{ item.item.key }}"
groups: "{{ ['nodes'] + (nodes[item.item.key]|d([])) }}"
ansible_host: "{{ servers[item.invocation.module_args.name].ipv6.address }}"
ansible_user: root
node_gw: "{{ servers[item.invocation.module_args.name].ipv6.gateway }}"
node_ip: "{{ servers[item.invocation.module_args.name].ipv6.address | ansible.utils.ipmath(1) }}/{{ servers[item.invocation.module_args.name].ipv6.netmask }}"
ansible_ssh_extra_args: "-o StrictHostKeyChecking=no"
with_items: "{{ created.results }}"
---
- ansible.builtin.import_playbook: cloud.yaml
#- ansible.builtin.import_playbook: cloud.yaml
- hosts: master
- hosts: mastere
tasks:
- name: Deploy podinfo
......@@ -31,4 +31,3 @@
include_role:
name: cloud
tasks_from: cleanup.yaml
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment