mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-05-18 10:40:33 +02:00
Refactored docker role include
This commit is contained in:
parent
2aac8b5f80
commit
2478e4013f
27
Makefile
27
Makefile
@ -1,17 +1,26 @@
|
|||||||
ROLES_DIR=./roles
|
ROLES_DIR := ./roles
|
||||||
OUTPUT=./group_vars/all/11_applications.yml
|
APPLICATIONS_OUT := ./group_vars/all/11_applications.yml
|
||||||
SCRIPT=./cli/generate_defaults_applications.py
|
APPLICATIONS_SCRIPT := ./cli/generate_defaults_applications.py
|
||||||
|
INCLUDES_OUT := ./tasks/include-docker-roles.yml
|
||||||
|
INCLUDES_SCRIPT := ./cli/generate_role_includes.py
|
||||||
|
|
||||||
|
.PHONY: build install test
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@echo "🔧 Generating $(OUTPUT) from roles in $(ROLES_DIR)..."
|
@echo "🔧 Generating applications defaults → $(APPLICATIONS_OUT) from roles in $(ROLES_DIR)…"
|
||||||
@mkdir -p $(dir $(OUTPUT))
|
@mkdir -p $(dir $(APPLICATIONS_OUT))
|
||||||
python3 $(SCRIPT) --roles-dir $(ROLES_DIR) --output-file $(OUTPUT)
|
python3 $(APPLICATIONS_SCRIPT) --roles-dir $(ROLES_DIR) --output-file $(APPLICATIONS_OUT)
|
||||||
@echo "✅ Output written to $(OUTPUT)"
|
@echo "✅ Applications defaults written to $(APPLICATIONS_OUT)\n"
|
||||||
|
@echo "🔧 Generating Docker role includes → $(INCLUDES_OUT)…"
|
||||||
|
@mkdir -p $(dir $(INCLUDES_OUT))
|
||||||
|
python3 $(INCLUDES_SCRIPT) $(ROLES_DIR) -o $(INCLUDES_OUT) -p docker-
|
||||||
|
@echo "✅ Docker role includes written to $(INCLUDES_OUT)"
|
||||||
|
|
||||||
install: build
|
install: build
|
||||||
|
@echo "⚙️ Install complete."
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@echo "Executing Unit Tests:"
|
@echo "\n🧪 Running Unit Tests..."
|
||||||
python -m unittest discover -s tests/unit
|
python -m unittest discover -s tests/unit
|
||||||
@echo "Executing Integration Tests:"
|
@echo "\n🔬 Running Integration Tests..."
|
||||||
python -m unittest discover -s tests/integration
|
python -m unittest discover -s tests/integration
|
79
cli/generate_role_includes.py
Normal file
79
cli/generate_role_includes.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import os
|
||||||
|
import argparse
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
def find_roles(roles_dir, prefix=None):
|
||||||
|
"""
|
||||||
|
Yield absolute paths of role directories under roles_dir.
|
||||||
|
Only include roles whose directory name starts with prefix (if given) and contain vars/main.yml.
|
||||||
|
"""
|
||||||
|
for entry in os.listdir(roles_dir):
|
||||||
|
if prefix and not entry.startswith(prefix):
|
||||||
|
continue
|
||||||
|
path = os.path.join(roles_dir, entry)
|
||||||
|
vars_file = os.path.join(path, 'vars', 'main.yml')
|
||||||
|
if os.path.isdir(path) and os.path.isfile(vars_file):
|
||||||
|
yield path, vars_file
|
||||||
|
|
||||||
|
|
||||||
|
def load_application_id(vars_file):
|
||||||
|
"""
|
||||||
|
Load the vars/main.yml and return the value of application_id key.
|
||||||
|
Returns None if not found.
|
||||||
|
"""
|
||||||
|
with open(vars_file, 'r') as f:
|
||||||
|
data = yaml.safe_load(f) or {}
|
||||||
|
return data.get('application_id')
|
||||||
|
|
||||||
|
|
||||||
|
def generate_playbook_entries(roles_dir, prefix=None):
|
||||||
|
entries = []
|
||||||
|
for role_path, vars_file in find_roles(roles_dir, prefix):
|
||||||
|
app_id = load_application_id(vars_file)
|
||||||
|
if not app_id:
|
||||||
|
continue
|
||||||
|
# Derive role name from directory name
|
||||||
|
role_name = os.path.basename(role_path)
|
||||||
|
# entry text
|
||||||
|
entry = (
|
||||||
|
f"- name: setup {app_id}\n"
|
||||||
|
f" when: (\"{app_id}\" in group_names)\n"
|
||||||
|
f" include_role:\n"
|
||||||
|
f" name: {role_name}\n"
|
||||||
|
)
|
||||||
|
entries.append(entry)
|
||||||
|
return entries
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description='Generate an Ansible playbook include file from Docker roles and application_ids.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'roles_dir',
|
||||||
|
help='Path to directory containing role folders'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-p', '--prefix',
|
||||||
|
help='Only include roles whose names start with this prefix (e.g. docker-, client-)',
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-o', '--output',
|
||||||
|
help='Output file path (default: stdout)',
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
entries = generate_playbook_entries(args.roles_dir, args.prefix)
|
||||||
|
output = ''.join(entries)
|
||||||
|
|
||||||
|
if args.output:
|
||||||
|
with open(args.output, 'w') as f:
|
||||||
|
f.write(output)
|
||||||
|
print(f"Playbook entries written to {args.output}")
|
||||||
|
else:
|
||||||
|
print(output)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
1
tasks/.gitignore
vendored
Normal file
1
tasks/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
include-docker-roles.yml
|
211
tasks/server.yml
211
tasks/server.yml
@ -11,215 +11,8 @@
|
|||||||
- health-btrfs
|
- health-btrfs
|
||||||
- system-btrfs-auto-balancer
|
- system-btrfs-auto-balancer
|
||||||
|
|
||||||
#########################################################################
|
- name: "Integrate Docker Role includes"
|
||||||
### Docker Roles ###
|
include_tasks: "include-docker-roles.yml"
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
- name: "setup matomo"
|
|
||||||
when: ("matomo" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-matomo
|
|
||||||
|
|
||||||
- name: setup ldap
|
|
||||||
when: ("ldap" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-ldap
|
|
||||||
|
|
||||||
- name: setup keycloak
|
|
||||||
when: ("keycloak" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-keycloak
|
|
||||||
|
|
||||||
- name: setup lam
|
|
||||||
when: ("lam" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-lam
|
|
||||||
|
|
||||||
- name: setup phpldapadmin
|
|
||||||
when: ("phpldapadmin" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-phpldapadmin
|
|
||||||
|
|
||||||
- name: setup nextcloud hosts
|
|
||||||
when: ("nextcloud" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-nextcloud
|
|
||||||
|
|
||||||
- name: setup gitea hosts
|
|
||||||
when: ("gitea" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-gitea
|
|
||||||
vars:
|
|
||||||
run_mode: prod
|
|
||||||
|
|
||||||
- name: setup wordpress hosts
|
|
||||||
when: ("wordpress" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-wordpress
|
|
||||||
|
|
||||||
- name: setup mediawiki hosts
|
|
||||||
when: ("mediawiki" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-mediawiki
|
|
||||||
|
|
||||||
- name: setup mybb hosts
|
|
||||||
when: ("mybb" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-mybb
|
|
||||||
vars:
|
|
||||||
mybb_domains: "{{domains.mybb}}"
|
|
||||||
|
|
||||||
- name: setup yourls hosts
|
|
||||||
when: ("yourls" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-yourls
|
|
||||||
|
|
||||||
- name: setup mailu hosts
|
|
||||||
when: ("mailu" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-mailu
|
|
||||||
|
|
||||||
- name: setup elk hosts
|
|
||||||
when: ("elk" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-elk
|
|
||||||
|
|
||||||
- name: setup mastodon hosts
|
|
||||||
when: ("mastodon" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-mastodon
|
|
||||||
|
|
||||||
- name: setup pixelfed hosts
|
|
||||||
when: ("pixelfed" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-pixelfed
|
|
||||||
|
|
||||||
- name: setup peertube hosts
|
|
||||||
when: ("peertube" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-peertube
|
|
||||||
|
|
||||||
- name: setup bigbluebutton hosts
|
|
||||||
when: ("bigbluebutton" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-bigbluebutton
|
|
||||||
vars:
|
|
||||||
domain: "{{domains.bigbluebutton}}"
|
|
||||||
|
|
||||||
- name: setup funkwhale hosts
|
|
||||||
when: ("funkwhale" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-funkwhale
|
|
||||||
|
|
||||||
- name: setup roulette-wheel hosts
|
|
||||||
when: ("roulette-wheel" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-roulette-wheel
|
|
||||||
|
|
||||||
- name: setup joomla hosts
|
|
||||||
when: ("joomla" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-joomla
|
|
||||||
|
|
||||||
- name: setup attendize
|
|
||||||
when: ("attendize" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-attendize
|
|
||||||
|
|
||||||
- name: setup baserow hosts
|
|
||||||
when: ("baserow" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-baserow
|
|
||||||
|
|
||||||
- name: setup listmonk
|
|
||||||
when: ("listmonk" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-listmonk
|
|
||||||
|
|
||||||
- name: setup discourse
|
|
||||||
when: ("discourse" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-discourse
|
|
||||||
|
|
||||||
- name: setup matrix with flavor 'ansible'
|
|
||||||
include_role:
|
|
||||||
name: docker-matrix-ansible
|
|
||||||
when: applications.matrix.role == 'ansible' and ("matrix" in group_names)
|
|
||||||
|
|
||||||
- name: setup matrix with flavor 'compose'
|
|
||||||
include_role:
|
|
||||||
name: docker-matrix
|
|
||||||
when: applications.matrix.role == 'compose' and ("matrix" in group_names)
|
|
||||||
|
|
||||||
- name: setup open project instances
|
|
||||||
when: ("openproject" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-openproject
|
|
||||||
|
|
||||||
- name: setup gitlab hosts
|
|
||||||
when: ("gitlab" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-gitlab
|
|
||||||
|
|
||||||
- name: setup akaunting hosts
|
|
||||||
when: ("akaunting" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-akaunting
|
|
||||||
|
|
||||||
- name: setup moodle instance
|
|
||||||
when: ("moodle" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-moodle
|
|
||||||
|
|
||||||
- name: setup taiga instance
|
|
||||||
when: ("taiga" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-taiga
|
|
||||||
|
|
||||||
- name: setup friendica hosts
|
|
||||||
when: ("friendica" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-friendica
|
|
||||||
|
|
||||||
- name: setup portfolio
|
|
||||||
when: ("portfolio" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-portfolio
|
|
||||||
|
|
||||||
- name: setup bluesky
|
|
||||||
when: ("bluesky" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-bluesky
|
|
||||||
|
|
||||||
- name: setup PHPMyAdmin
|
|
||||||
when: ("phpmyadmin" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-phpmyadmin
|
|
||||||
|
|
||||||
- name: setup SNIPE-IT
|
|
||||||
when: ("snipe_it" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-snipe_it
|
|
||||||
|
|
||||||
- name: setup sphinx
|
|
||||||
when: ("sphinx" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-sphinx
|
|
||||||
|
|
||||||
- name: setup pgadmin
|
|
||||||
when: ("pgadmin" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-pgadmin
|
|
||||||
|
|
||||||
- name: setup presentation
|
|
||||||
when: ("presentation" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-presentation
|
|
||||||
|
|
||||||
- name: setup espocrm hosts
|
|
||||||
when: ("espocrm" in group_names)
|
|
||||||
include_role:
|
|
||||||
name: docker-espocrm
|
|
||||||
|
|
||||||
# Native Webserver Roles
|
# Native Webserver Roles
|
||||||
- name: setup nginx-serve-htmls
|
- name: setup nginx-serve-htmls
|
||||||
|
Loading…
x
Reference in New Issue
Block a user