mirror of
https://github.com/2martens/cloud-configuration.git
synced 2026-10-17 08:37:56 +02:00
feat: Add keycloak role that creates the initial setup
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": ".."
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"ansible.python.interpreterPath": "/opt/homebrew/bin/python3"
|
||||
}
|
||||
}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"ansible.python.interpreterPath": "/opt/homebrew/bin/python3"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
[defaults]
|
||||
roles_path = roles:playbooks/roles
|
||||
@@ -0,0 +1,10 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
37626238663938613666353334626433623434656638633063373634303135323834616436333434
|
||||
3563376532353538336637326138666362393530386165310a373033373666393962393339386666
|
||||
61323339623039383531613261656139326434393433356530393231386165366235633032353831
|
||||
6662626130353736340a323963393235383461643137633739643065333536333131366634616233
|
||||
39653037636536323834313164623631653831366334303235366239333262336237396466353532
|
||||
38323461393261356337663461363732353631653164363131613032643539346665663637656365
|
||||
66353139333432363335343632373731333138343735316336336531373431623534373338363366
|
||||
66633731353331626166373265393963393936373863363538613831353636303631656564666566
|
||||
6435
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
ssh_user: keywolke
|
||||
domain: id.2martens.de
|
||||
@@ -14,3 +14,6 @@ repo ansible_host=shaula.uberspace.de ansible_python_interpreter=/usr/bin/python
|
||||
|
||||
[applications]
|
||||
api-server ansible_host=49.13.77.70 ansible_python_interpreter=/usr/bin/python3
|
||||
|
||||
[keycloak]
|
||||
keycloak-server ansible_host=monoceres.uberspace.de ansible_python_interpreter=/usr/bin/python
|
||||
@@ -52,3 +52,10 @@
|
||||
tags: springBoot
|
||||
roles:
|
||||
- spring_boot
|
||||
- name: Set up Keycloak
|
||||
hosts: keycloak
|
||||
gather_facts: false
|
||||
remote_user: "{{ ssh_user }}"
|
||||
tags: keycloak
|
||||
roles:
|
||||
- keycloak
|
||||
@@ -2,3 +2,7 @@
|
||||
collections:
|
||||
- community.docker
|
||||
- community.general
|
||||
- community.mysql
|
||||
- ansible.posix
|
||||
- hetzner.hcloud
|
||||
- middleware_automation.keycloak
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
group: root
|
||||
mode: "644"
|
||||
- name: Start drone docker container
|
||||
community.docker.docker_compose:
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: /etc/drone
|
||||
|
||||
@@ -20,5 +20,5 @@
|
||||
state: present
|
||||
appends: true
|
||||
- name: Start kafka docker container
|
||||
community.docker.docker_compose:
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: /opt/kafka
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
keycloak_version: 26.1.0
|
||||
|
||||
# Database Configuration Defaults
|
||||
keycloak_db_host: localhost
|
||||
keycloak_db_port: 3306
|
||||
keycloak_db_type: mariadb
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Print next steps
|
||||
ansible.builtin.debug:
|
||||
msg: "Login with the temp admin ({{ keycloak_temp_admin_user }}:{{ keycloak_temp_admin_password }}) and
|
||||
create a proper admin user: https://{{ domain }}/admin/master/console"
|
||||
when: bootstrap.changed
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
- name: Check if Keycloak is already downloaded
|
||||
ansible.builtin.stat:
|
||||
path: ~/keycloak-{{ keycloak_version }}
|
||||
register: keycloak_dir
|
||||
|
||||
- name: Download Keycloak
|
||||
ansible.builtin.unarchive:
|
||||
src: https://github.com/keycloak/keycloak/releases/download/{{ keycloak_version }}/keycloak-{{ keycloak_version }}.tar.gz
|
||||
dest: ~
|
||||
remote_src: true
|
||||
creates: ~/keycloak-{{ keycloak_version }}
|
||||
when: not keycloak_dir.stat.exists
|
||||
|
||||
- name: Create symlink to current Keycloak version
|
||||
ansible.builtin.file:
|
||||
src: ~/keycloak-{{ keycloak_version }}
|
||||
dest: ~/keycloak-current
|
||||
state: link
|
||||
when: not keycloak_dir.stat.exists
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Set up database
|
||||
ansible.builtin.import_tasks: mysql.yaml
|
||||
- name: Download archive
|
||||
ansible.builtin.import_tasks: download.yaml
|
||||
- name: Set up Keycloak
|
||||
ansible.builtin.import_tasks: setup.yaml
|
||||
- name: Set up service
|
||||
ansible.builtin.import_tasks: service.yaml
|
||||
- name: Print next steps
|
||||
ansible.builtin.import_tasks: debug.yaml
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Create MySQL database
|
||||
community.mysql.mysql_db:
|
||||
name: "{{ ssh_user }}_keycloak"
|
||||
state: present
|
||||
register: database
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
- name: Create service directory
|
||||
ansible.builtin.file:
|
||||
state: directory
|
||||
path: /home/{{ ssh_user }}/etc/services.d
|
||||
owner: "{{ ssh_user }}"
|
||||
group: "{{ ssh_user }}"
|
||||
mode: "755"
|
||||
- name: Create Keycloak service
|
||||
ansible.builtin.template:
|
||||
src: etc/services.d/keycloak.ini.j2
|
||||
dest: /home/{{ ssh_user }}/etc/services.d/keycloak.ini
|
||||
owner: "{{ ssh_user }}"
|
||||
group: "{{ ssh_user }}"
|
||||
mode: "644"
|
||||
- name: Start Keycloak
|
||||
community.general.supervisorctl:
|
||||
state: started
|
||||
name: keycloak
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
- name: Check if service exists
|
||||
ansible.builtin.stat:
|
||||
path: /home/{{ ssh_user }}/etc/services.d/keycloak.ini.j2
|
||||
register: service
|
||||
- name: Shutdown Keycloak
|
||||
community.general.supervisorctl:
|
||||
name: keycloak
|
||||
state: stopped
|
||||
when: service.stat.exists
|
||||
- name: Update configuration
|
||||
block:
|
||||
- name: Set db type
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?db='
|
||||
line: "db={{ keycloak_db_type }}"
|
||||
- name: Set db username
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?db-username='
|
||||
line: "db-username={{ ssh_user }}"
|
||||
- name: Set db password
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?db-password='
|
||||
line: "db-password={{ keycloak_db_password }}"
|
||||
- name: Set db host
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?db-url-host='
|
||||
line: "db-url-host={{ keycloak_db_host }}"
|
||||
- name: Set db port
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?db-url-port='
|
||||
line: "db-url-port={{ keycloak_db_port }}"
|
||||
- name: Set db name
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?db-url-database='
|
||||
line: "db-url-database={{ ssh_user }}_keycloak"
|
||||
- name: Enable http
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?http-enabled='
|
||||
line: "http-enabled=true"
|
||||
- name: Set ssl certificate
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?https-certificate-file='
|
||||
line: "https-certificate-file=/home/{{ ssh_user }}/etc/certificates/{{ domain }}.crt"
|
||||
- name: Set ssl certificate key
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?https-certificate-key-file='
|
||||
line: "https-certificate-key-file=/home/{{ ssh_user }}/etc/certificates/{{ domain }}.key"
|
||||
- name: Set proxy mode to edge
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?proxy='
|
||||
line: "proxy=edge"
|
||||
- name: Set proxy headers to xforwarded
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?proxy-headers='
|
||||
line: "proxy-headers=xforwarded"
|
||||
- name: Set hostname
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/keycloak-current/conf/keycloak.conf
|
||||
regex: '#?hostname='
|
||||
line: "hostname={{ domain }}"
|
||||
- name: Build application
|
||||
ansible.builtin.command:
|
||||
chdir: ~/keycloak-current/bin
|
||||
cmd: ./kc.sh build
|
||||
register: build
|
||||
changed_when: true
|
||||
- name: Create temp admin
|
||||
ansible.builtin.command:
|
||||
chdir: ~/keycloak-current/bin
|
||||
cmd: ./kc.sh bootstrap-admin user --username:env KEYCLOAK_ADMIN_USER --password:env KEYCLOAK_ADMIN_USER_PASSWORD --optimized
|
||||
environment:
|
||||
KEYCLOAK_ADMIN_USER: keycloakbootstrap
|
||||
KEYCLOAK_ADMIN_USER_PASSWORD: "{{ keycloak_temp_admin_password }}"
|
||||
when: database.changed
|
||||
register: bootstrap
|
||||
changed_when: true
|
||||
@@ -0,0 +1,8 @@
|
||||
[program:keycloak]
|
||||
command=%(ENV_HOME)s/keycloak-current/bin/kc.sh start --optimized
|
||||
autostart=yes
|
||||
autorestart=yes
|
||||
|
||||
[program:keycloak]
|
||||
# `startsecs` is set by Uberspace monitoring team, to prevent a broken service from looping
|
||||
startsecs=30
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
basic_firewall: basic-firewall
|
||||
server_image: ubuntu-22.04
|
||||
server_location: fsn1
|
||||
server_placement_group: default
|
||||
server_type: cax11
|
||||
server_setup_basic_firewall: basic-firewall
|
||||
server_setup_server_image: ubuntu-22.04
|
||||
server_setup_server_location: fsn1
|
||||
server_setup_server_placement_group: default
|
||||
server_setup_server_type: cax11
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
---
|
||||
- name: Create SSH key
|
||||
hetzner.hcloud.hcloud_ssh_key:
|
||||
api_token: "{{ hcloud_api_token }}"
|
||||
public_key: "{{ ssh_key_admin_user }}"
|
||||
name: "{{ ssh_key_admin_user_name }}"
|
||||
hetzner.hcloud.ssh_key:
|
||||
api_token: "{{ server_setup_hcloud_api_token }}"
|
||||
public_key: "{{ server_setup_ssh_key_admin_user }}"
|
||||
name: "{{ server_setup_ssh_key_admin_user_name }}"
|
||||
state: present
|
||||
- name: Create server via HCloud
|
||||
hetzner.hcloud.hcloud_server:
|
||||
api_token: "{{ hcloud_api_token }}"
|
||||
hetzner.hcloud.server:
|
||||
api_token: "{{ server_setup_hcloud_api_token }}"
|
||||
firewalls:
|
||||
- "{{ basic_firewall }}"
|
||||
image: "{{ server_image }}"
|
||||
location: "{{ server_location }}"
|
||||
name: "{{ server_name }}"
|
||||
placement_group: "{{ server_placement_group }}"
|
||||
server_type: "{{ server_type }}"
|
||||
- "{{ server_setup_basic_firewall }}"
|
||||
image: "{{ server_setup_server_image }}"
|
||||
location: "{{ server_setup_server_location }}"
|
||||
name: "{{ server_setup_server_name }}"
|
||||
placement_group: "{{ server_setup_server_placement_group }}"
|
||||
server_type: "{{ server_setup_server_type }}"
|
||||
ssh_keys:
|
||||
- "{{ ssh_key_admin_user_name }}"
|
||||
- "{{ server_setup_ssh_key_admin_user_name }}"
|
||||
user_data: "{{ lookup('ansible.builtin.template', 'basic-ssh-hardening.yaml.j2', convert_data=false) }}"
|
||||
state: present
|
||||
register: server
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
mode: "644"
|
||||
lstrip_blocks: true
|
||||
- name: Start application docker container
|
||||
community.docker.docker_compose:
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: /opt/{{ spring_docker_path }}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
---
|
||||
- include: setup.yaml
|
||||
BIN
Binary file not shown.
@@ -6,13 +6,13 @@ vault:
|
||||
# creates each of the namespaces
|
||||
applicationNamespaces: []
|
||||
ecr:
|
||||
enabled: false
|
||||
account: ""
|
||||
accessKey:
|
||||
id: ""
|
||||
secret: ""
|
||||
repository: ""
|
||||
account: ""
|
||||
applicationNamespaces: []
|
||||
enabled: false
|
||||
repository: ""
|
||||
hcloud:
|
||||
enabled: false
|
||||
token: ""
|
||||
|
||||
Reference in New Issue
Block a user