mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-07-17 22:14:25 +02:00
Solved wrong namings
This commit is contained in:
parent
f9b3fb8cfa
commit
7fba13b550
@ -9,12 +9,12 @@ defaults_service_provider:
|
|||||||
city: "Cybertown"
|
city: "Cybertown"
|
||||||
postal_code: "00001"
|
postal_code: "00001"
|
||||||
country: "Nexusland"
|
country: "Nexusland"
|
||||||
logo: "{{ applications['assets-server'].url ~ '/img/logo.png' }}"
|
logo: "{{ applications['asset'].url ~ '/img/logo.png' }}"
|
||||||
platform:
|
platform:
|
||||||
titel: "CyMaIS"
|
titel: "CyMaIS"
|
||||||
subtitel: "One login. Infinite applications."
|
subtitel: "One login. Infinite applications."
|
||||||
logo: "{{ applications['assets-server'].url ~ '/img/logo.png' }}"
|
logo: "{{ applications['asset'].url ~ '/img/logo.png' }}"
|
||||||
favicon: "{{ applications['assets-server'].url ~ '/img/favicon.ico' }}"
|
favicon: "{{ applications['asset'].url ~ '/img/favicon.ico' }}"
|
||||||
contact:
|
contact:
|
||||||
bluesky: >-
|
bluesky: >-
|
||||||
{{ ('@' ~ users.contact.username ~ '.' ~ domains.bluesky.api)
|
{{ ('@' ~ users.contact.username ~ '.' ~ domains.bluesky.api)
|
||||||
|
4
main.py
4
main.py
@ -185,11 +185,11 @@ if __name__ == "__main__":
|
|||||||
Fore.CYAN
|
Fore.CYAN
|
||||||
))
|
))
|
||||||
print(color_text(
|
print(color_text(
|
||||||
" e.g. `cymais generate defaults applications` →",
|
" e.g. `cymais generate defaults users` →",
|
||||||
Fore.CYAN
|
Fore.CYAN
|
||||||
))
|
))
|
||||||
print(color_text(
|
print(color_text(
|
||||||
" corresponds to `cli/generate/defaults/applications.py`.",
|
" corresponds to `cli/generate/defaults/users.py`.",
|
||||||
Fore.CYAN
|
Fore.CYAN
|
||||||
))
|
))
|
||||||
print()
|
print()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# The following env file will just be used from the dedicated mariadb container
|
# The following env file will just be used from the dedicated mariadb container
|
||||||
# and not the {{applications.mariadb.hostname }}-database
|
# and not the {{applications['rdbms-mariadb'].hostname }}-database
|
||||||
- name: "Create {{database_env}}"
|
- name: "Create {{database_env}}"
|
||||||
template:
|
template:
|
||||||
src: "env/{{database_type}}.env.j2"
|
src: "env/{{database_type}}.env.j2"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This template needs to be included in docker-compose.yml, which depend on a postgres database
|
# This template needs to be included in docker-compose.yml, which depend on a postgres database
|
||||||
{% if not applications | is_feature_enabled('central_database',application_id) %}
|
{% if not applications | is_feature_enabled('central_database',application_id) %}
|
||||||
{{ database_host }}:
|
{{ database_host }}:
|
||||||
image: postgres:{{applications.postgres.version}}-alpine
|
image: postgres:{{applications['rdbms-postgres'].version}}-alpine
|
||||||
container_name: {{application_id}}-database
|
container_name: {{application_id}}-database
|
||||||
env_file:
|
env_file:
|
||||||
- {{database_env}}
|
- {{database_env}}
|
||||||
|
@ -3,7 +3,7 @@ database_host: "{{ 'central-' + database_type if applications | is_feature_
|
|||||||
database_name: "{{ applications[database_application_id].database.name | default( database_application_id ) }}" # The overwritte configuration is needed by bigbluebutton
|
database_name: "{{ applications[database_application_id].database.name | default( database_application_id ) }}" # The overwritte configuration is needed by bigbluebutton
|
||||||
database_username: "{{ applications[database_application_id].database.username | default( database_application_id )}}" # The overwritte configuration is needed by bigbluebutton
|
database_username: "{{ applications[database_application_id].database.username | default( database_application_id )}}" # The overwritte configuration is needed by bigbluebutton
|
||||||
database_password: "{{ applications[database_application_id].credentials.database_password }}"
|
database_password: "{{ applications[database_application_id].credentials.database_password }}"
|
||||||
database_port: "{{ 3306 if database_type == 'mariadb' else applications.postgres.port }}"
|
database_port: "{{ 3306 if database_type == 'mariadb' else applications['rdbms-postgres'].port }}"
|
||||||
database_env: "{{docker_compose.directories.env}}{{database_type}}.env"
|
database_env: "{{docker_compose.directories.env}}{{database_type}}.env"
|
||||||
database_url_jdbc: "jdbc:{{ database_type if database_type == 'mariadb' else 'postgresql' }}://{{ database_host }}:{{ database_port }}/{{ database_name }}"
|
database_url_jdbc: "jdbc:{{ database_type if database_type == 'mariadb' else 'postgresql' }}://{{ database_host }}:{{ database_port }}/{{ database_name }}"
|
||||||
database_url_full: "{{database_type}}://{{database_username}}:{{database_password}}@{{database_host}}:{{database_port}}/{{ database_name }}"
|
database_url_full: "{{database_type}}://{{database_username}}:{{database_password}}@{{database_host}}:{{database_port}}/{{ database_name }}"
|
@ -2,5 +2,5 @@
|
|||||||
|
|
||||||
## Execute SQL commands
|
## Execute SQL commands
|
||||||
```bash
|
```bash
|
||||||
docker exec -it {{applications.mariadb.hostname }} mariadb -u root -p
|
docker exec -it {{applications['rdbms-mariadb'].hostname }} mariadb -u root -p
|
||||||
```
|
```
|
@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
- name: install MariaDB
|
- name: install MariaDB
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{applications.mariadb.hostname }}"
|
name: "{{applications['rdbms-mariadb'].hostname }}"
|
||||||
image: "mariadb:{{applications.mariadb.version}}" #could lead to problems with nextcloud
|
image: "mariadb:{{applications['rdbms-mariadb'].version}}" #could lead to problems with nextcloud
|
||||||
detach: yes
|
detach: yes
|
||||||
env:
|
env:
|
||||||
MARIADB_ROOT_PASSWORD: "{{applications.mariadb.credentials.root_password}}"
|
MARIADB_ROOT_PASSWORD: "{{applications['rdbms-mariadb'].credentials.root_password}}"
|
||||||
MARIADB_AUTO_UPGRADE: "1"
|
MARIADB_AUTO_UPGRADE: "1"
|
||||||
networks:
|
networks:
|
||||||
- name: central_mariadb
|
- name: central_mariadb
|
||||||
@ -23,7 +23,7 @@
|
|||||||
command: "--transaction-isolation=READ-COMMITTED --binlog-format=ROW" #for nextcloud
|
command: "--transaction-isolation=READ-COMMITTED --binlog-format=ROW" #for nextcloud
|
||||||
restart_policy: "{{docker_restart_policy}}"
|
restart_policy: "{{docker_restart_policy}}"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: "/usr/bin/mariadb --user=root --password={{applications.mariadb.credentials.root_password}} --execute \"SHOW DATABASES;\""
|
test: "/usr/bin/mariadb --user=root --password={{applications['rdbms-mariadb'].credentials.root_password}} --execute \"SHOW DATABASES;\""
|
||||||
interval: 3s
|
interval: 3s
|
||||||
timeout: 1s
|
timeout: 1s
|
||||||
retries: 5
|
retries: 5
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
- name: Wait until the MariaDB container is healthy
|
- name: Wait until the MariaDB container is healthy
|
||||||
community.docker.docker_container_info:
|
community.docker.docker_container_info:
|
||||||
name: "{{ applications.mariadb.hostname }}"
|
name: "{{ applications['rdbms-mariadb'].hostname }}"
|
||||||
register: db_info
|
register: db_info
|
||||||
until:
|
until:
|
||||||
- db_info.containers is defined
|
- db_info.containers is defined
|
||||||
@ -56,7 +56,7 @@
|
|||||||
name: "{{ database_name }}"
|
name: "{{ database_name }}"
|
||||||
state: present
|
state: present
|
||||||
login_user: root
|
login_user: root
|
||||||
login_password: "{{ applications.mariadb.credentials.root_password }}"
|
login_password: "{{ applications['rdbms-mariadb'].credentials.root_password }}"
|
||||||
login_host: 127.0.0.1
|
login_host: 127.0.0.1
|
||||||
login_port: "{{ database_port }}"
|
login_port: "{{ database_port }}"
|
||||||
encoding: "{{ database_encoding }}"
|
encoding: "{{ database_encoding }}"
|
||||||
@ -70,7 +70,7 @@
|
|||||||
priv: '{{database_name}}.*:ALL'
|
priv: '{{database_name}}.*:ALL'
|
||||||
state: present
|
state: present
|
||||||
login_user: root
|
login_user: root
|
||||||
login_password: "{{applications.mariadb.credentials.root_password}}"
|
login_password: "{{applications['rdbms-mariadb'].credentials.root_password}}"
|
||||||
login_host: 127.0.0.1
|
login_host: 127.0.0.1
|
||||||
login_port: "{{database_port}}"
|
login_port: "{{database_port}}"
|
||||||
|
|
||||||
@ -78,7 +78,7 @@
|
|||||||
# @todo Remove if this works fine in the future.
|
# @todo Remove if this works fine in the future.
|
||||||
#- name: Grant database privileges
|
#- name: Grant database privileges
|
||||||
# ansible.builtin.shell:
|
# ansible.builtin.shell:
|
||||||
# cmd: "docker exec {{applications.mariadb.hostname }} mariadb -u root -p{{ applications.mariadb.credentials.root_password }} -e \"GRANT ALL PRIVILEGES ON `{{database_name}}`.* TO '{{database_username}}'@'%';\""
|
# cmd: "docker exec {{applications['rdbms-mariadb'].hostname }} mariadb -u root -p{{ applications['rdbms-mariadb'].credentials.root_password }} -e \"GRANT ALL PRIVILEGES ON `{{database_name}}`.* TO '{{database_username}}'@'%';\""
|
||||||
# args:
|
# args:
|
||||||
# executable: /bin/bash
|
# executable: /bin/bash
|
||||||
|
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
## Root Access
|
## Root Access
|
||||||
To access the database via the root account execute the following on the server:
|
To access the database via the root account execute the following on the server:
|
||||||
```bash
|
```bash
|
||||||
docker exec -it "{{ applications.postgres.hostname }}" psql -U postgres
|
docker exec -it "{{ applications['rdbms-postgres'].hostname }}" psql -U postgres
|
||||||
```
|
```
|
@ -133,7 +133,7 @@ def update_discourse(directory):
|
|||||||
update_procedure("docker stop {{applications.discourse.container}}")
|
update_procedure("docker stop {{applications.discourse.container}}")
|
||||||
update_procedure("docker rm {{applications.discourse.container}}")
|
update_procedure("docker rm {{applications.discourse.container}}")
|
||||||
try:
|
try:
|
||||||
update_procedure("docker network connect {{applications.discourse.network}} {{ applications.postgres.hostname }}")
|
update_procedure("docker network connect {{applications.discourse.network}} {{ applications['rdbms-postgres'].hostname }}")
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
error_message = e.output.decode()
|
error_message = e.output.decode()
|
||||||
if "already exists" in error_message or "is already connected" in error_message:
|
if "already exists" in error_message or "is already connected" in error_message:
|
||||||
|
@ -43,13 +43,13 @@
|
|||||||
meta: flush_handlers
|
meta: flush_handlers
|
||||||
when: run_once_docker_discourse is not defined
|
when: run_once_docker_discourse is not defined
|
||||||
|
|
||||||
- name: "Connect {{ applications[application_id].container }} to network {{ applications.postgres.network }}"
|
- name: "Connect {{ applications[application_id].container }} to network {{ applications['rdbms-postgres'].network }}"
|
||||||
command: >
|
command: >
|
||||||
docker network connect {{ applications.postgres.network }} {{ applications[application_id].container }}
|
docker network connect {{ applications['rdbms-postgres'].network }} {{ applications[application_id].container }}
|
||||||
register: network_connect
|
register: network_connect
|
||||||
failed_when: >
|
failed_when: >
|
||||||
network_connect.rc != 0 and
|
network_connect.rc != 0 and
|
||||||
'Error response from daemon: endpoint with name {{ applications[application_id].container }} already exists in network {{ applications.postgres.network }}'
|
'Error response from daemon: endpoint with name {{ applications[application_id].container }} already exists in network {{ applications['rdbms-postgres'].network }}'
|
||||||
not in network_connect.stderr
|
not in network_connect.stderr
|
||||||
changed_when: network_connect.rc == 0
|
changed_when: network_connect.rc == 0
|
||||||
when:
|
when:
|
||||||
|
@ -14,7 +14,7 @@ The following environment variables need to be defined for successful operation:
|
|||||||
|
|
||||||
To completely reset Friendica, including its database and volumes, run:
|
To completely reset Friendica, including its database and volumes, run:
|
||||||
```bash
|
```bash
|
||||||
docker exec -i {{applications.mariadb.hostname }} mariadb -u root -p"${DB_ROOT_PASSWORD}" -e "DROP DATABASE IF EXISTS friendica; CREATE DATABASE friendica;"
|
docker exec -i {{applications['rdbms-mariadb'].hostname }} mariadb -u root -p"${DB_ROOT_PASSWORD}" -e "DROP DATABASE IF EXISTS friendica; CREATE DATABASE friendica;"
|
||||||
docker compose down
|
docker compose down
|
||||||
rm -rv /mnt/hdd/data/docker/volumes/friendica_data
|
rm -rv /mnt/hdd/data/docker/volumes/friendica_data
|
||||||
docker volume rm friendica_data
|
docker volume rm friendica_data
|
||||||
@ -25,7 +25,7 @@ docker volume rm friendica_data
|
|||||||
## Manual Method:
|
## Manual Method:
|
||||||
1. Connect to the MariaDB instance:
|
1. Connect to the MariaDB instance:
|
||||||
```bash
|
```bash
|
||||||
docker exec -it {{applications.mariadb.hostname }} mariadb -u root -p
|
docker exec -it {{applications['rdbms-mariadb'].hostname }} mariadb -u root -p
|
||||||
```
|
```
|
||||||
2. Run the following commands:
|
2. Run the following commands:
|
||||||
```sql
|
```sql
|
||||||
@ -37,7 +37,7 @@ docker volume rm friendica_data
|
|||||||
## Automatic Method:
|
## Automatic Method:
|
||||||
```bash
|
```bash
|
||||||
DB_ROOT_PASSWORD="your_root_password"
|
DB_ROOT_PASSWORD="your_root_password"
|
||||||
docker exec -i {{applications.mariadb.hostname }} mariadb -u root -p"${DB_ROOT_PASSWORD}" -e "DROP DATABASE IF EXISTS friendica; CREATE DATABASE friendica;"
|
docker exec -i {{applications['rdbms-mariadb'].hostname }} mariadb -u root -p"${DB_ROOT_PASSWORD}" -e "DROP DATABASE IF EXISTS friendica; CREATE DATABASE friendica;"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Enter the Application Container 🔍
|
## Enter the Application Container 🔍
|
||||||
|
@ -9,6 +9,6 @@ pgadmin_servers:
|
|||||||
port: "{{ database_port }}"
|
port: "{{ database_port }}"
|
||||||
username: "postgres"
|
username: "postgres"
|
||||||
maintenance_db: "postgres"
|
maintenance_db: "postgres"
|
||||||
password: "{{ applications.postgres.credentials.postgres_password }}"
|
password: "{{ applications['rdbms-postgres'].credentials.postgres_password }}"
|
||||||
|
|
||||||
# Here you can add more databases
|
# Here you can add more databases
|
@ -1,7 +1,7 @@
|
|||||||
# Configuration @see https://hub.docker.com/_/phpmyadmin
|
# Configuration @see https://hub.docker.com/_/phpmyadmin
|
||||||
|
|
||||||
PMA_HOST={{applications.mariadb.hostname}}
|
PMA_HOST={{applications['rdbms-mariadb'].hostname}}
|
||||||
{% if applications[application_id].autologin | bool %}
|
{% if applications[application_id].autologin | bool %}
|
||||||
PMA_USER= root
|
PMA_USER= root
|
||||||
PMA_PASSWORD= "{{applications.mariadb.credentials.root_password}}"
|
PMA_PASSWORD= "{{applications['rdbms-mariadb'].credentials.root_password}}"
|
||||||
{% endif %}
|
{% endif %}
|
@ -48,7 +48,7 @@
|
|||||||
# The following mapping is necessary to define the exceptions for domains which are created, but which aren't used
|
# The following mapping is necessary to define the exceptions for domains which are created, but which aren't used
|
||||||
redirect_domain_mappings: "{{
|
redirect_domain_mappings: "{{
|
||||||
[] |
|
[] |
|
||||||
add_redirect_if_group('assets-server', domains | get_domain('assets-server'), domains | get_domain('file-server'), group_names) |
|
add_redirect_if_group('asset', domains | get_domain('asset'), domains | get_domain('file-server'), group_names) |
|
||||||
merge_mapping(redirect_domain_mappings| default([]), 'source')
|
merge_mapping(redirect_domain_mappings| default([]), 'source')
|
||||||
}}"
|
}}"
|
||||||
|
|
||||||
|
67
tests/integration/test_valid_applications.py
Normal file
67
tests/integration/test_valid_applications.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import unittest
|
||||||
|
from cli.meta.applications import find_application_ids
|
||||||
|
|
||||||
|
# ensure project root is on PYTHONPATH so we can import the CLI code
|
||||||
|
# project root is two levels up from this file (tests/integration -> project root)
|
||||||
|
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
|
||||||
|
sys.path.insert(0, ROOT)
|
||||||
|
|
||||||
|
class TestValidApplicationUsage(unittest.TestCase):
|
||||||
|
"""
|
||||||
|
Integration test to ensure that only valid application IDs
|
||||||
|
are used in all .yml, .yaml, .yml.j2, .yaml.j2, and .py files.
|
||||||
|
Methods like applications.items() can be whitelisted and ignored.
|
||||||
|
"""
|
||||||
|
# regex patterns to capture applications['name'], applications.get('name'), and applications.name
|
||||||
|
APPLICATION_SUBSCRIPT_RE = re.compile(r"applications\[['\"](?P<name>[^'\"]+)['\"]\]")
|
||||||
|
APPLICATION_GET_RE = re.compile(r"applications\.get\(\s*['\"](?P<name>[^'\"]+)['\"]")
|
||||||
|
APPLICATION_ATTR_RE = re.compile(r"applications\.(?P<name>[A-Za-z_]\w*)")
|
||||||
|
|
||||||
|
# methods and exceptions that should not be validated as application IDs
|
||||||
|
WHITELIST = {'items', 'yml', 'get'}
|
||||||
|
|
||||||
|
def test_application_references_use_valid_ids(self):
|
||||||
|
valid_apps = find_application_ids()
|
||||||
|
|
||||||
|
tests_dir = os.path.join(ROOT, 'tests')
|
||||||
|
for dirpath, _, filenames in os.walk(ROOT):
|
||||||
|
# skip the tests/ directory and all its subdirectories
|
||||||
|
if dirpath == tests_dir or dirpath.startswith(tests_dir + os.sep):
|
||||||
|
continue
|
||||||
|
|
||||||
|
for filename in filenames:
|
||||||
|
if not filename.lower().endswith(('.yml', '.yaml', '.yml.j2', '.yaml.j2', '.py')):
|
||||||
|
continue
|
||||||
|
filepath = os.path.join(dirpath, filename)
|
||||||
|
try:
|
||||||
|
with open(filepath, 'r', encoding='utf-8') as f:
|
||||||
|
content = f.read()
|
||||||
|
except Exception:
|
||||||
|
# skip files that cannot be opened
|
||||||
|
continue
|
||||||
|
|
||||||
|
for pattern in (
|
||||||
|
self.APPLICATION_SUBSCRIPT_RE,
|
||||||
|
self.APPLICATION_GET_RE,
|
||||||
|
self.APPLICATION_ATTR_RE,
|
||||||
|
):
|
||||||
|
for match in pattern.finditer(content):
|
||||||
|
name = match.group('name')
|
||||||
|
# skip whitelisted methods/exceptions
|
||||||
|
if name in self.WHITELIST:
|
||||||
|
continue
|
||||||
|
# each found reference must be in valid_apps
|
||||||
|
self.assertIn(
|
||||||
|
name,
|
||||||
|
valid_apps,
|
||||||
|
msg=(
|
||||||
|
f"{filepath}: reference to application '{name}' "
|
||||||
|
f"is invalid. Known IDs: {sorted(valid_apps)}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
Loading…
x
Reference in New Issue
Block a user