Just tests passing now

This commit is contained in:
Ian Roddis
2026-03-30 16:39:54 -03:00
parent 4def9900c4
commit 3a873051e7
19 changed files with 191 additions and 78 deletions
+4 -1
View File
@@ -22,7 +22,10 @@
"Bash(helm template:*)", "Bash(helm template:*)",
"Bash(brew list:*)", "Bash(brew list:*)",
"Bash(export PATH=\"/opt/homebrew/bin:$PATH\")", "Bash(export PATH=\"/opt/homebrew/bin:$PATH\")",
"Bash(ansible-playbook:*)" "Bash(ansible-playbook:*)",
"Bash(just test:*)",
"Bash(pip show:*)",
"Bash(molecule test:*)"
] ]
} }
} }
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+2
View File
@@ -63,6 +63,8 @@
path: "{{ traefik_data_dir }}/acme.json" path: "{{ traefik_data_dir }}/acme.json"
state: touch state: touch
mode: '0600' mode: '0600'
modification_time: preserve
access_time: preserve
- name: Deploy Traefik docker-compose - name: Deploy Traefik docker-compose
ansible.builtin.template: ansible.builtin.template:
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+3 -3
View File
@@ -75,10 +75,10 @@
that: "'Host(`logs.test.example.com`)' in compose" that: "'Host(`logs.test.example.com`)' in compose"
fail_msg: "Expected Host rule for logs.test.example.com not found in docker-compose.yml" fail_msg: "Expected Host rule for logs.test.example.com not found in docker-compose.yml"
- name: Assert GELF logging address in compose - name: Assert GELF UDP port binding in compose
ansible.builtin.assert: ansible.builtin.assert:
that: "'udp://127.0.0.1:12201' in compose" that: "'12201/udp' in compose"
fail_msg: "Expected GELF address udp://127.0.0.1:12201 not found in docker-compose.yml" fail_msg: "Expected GELF UDP port binding 12201/udp not found in docker-compose.yml"
- name: Assert sovereign network is external in compose - name: Assert sovereign network is external in compose
ansible.builtin.assert: ansible.builtin.assert:
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -4
View File
@@ -73,22 +73,22 @@
- name: Assert element config contains tenant brand name - name: Assert element config contains tenant brand name
ansible.builtin.assert: ansible.builtin.assert:
that: '"brand": "Test Corp"' in element_config that: element_config_parsed.brand == "Test Corp"
fail_msg: "element/config.json does not contain brand: Test Corp" fail_msg: "element/config.json does not contain brand: Test Corp"
- name: Assert element config contains matrix homeserver URL - name: Assert element config contains matrix homeserver URL
ansible.builtin.assert: ansible.builtin.assert:
that: '"https://matrix.test.example.com"' in element_config that: element_config_parsed['default_server_config']['m.homeserver']['base_url'] == "https://matrix.test.example.com"
fail_msg: "element/config.json does not contain https://matrix.test.example.com" fail_msg: "element/config.json does not contain https://matrix.test.example.com"
- name: Assert element config contains jitsi domain - name: Assert element config contains jitsi domain
ansible.builtin.assert: ansible.builtin.assert:
that: '"meet.test.example.com"' in element_config that: element_config_parsed.jitsi.preferred_domain == "meet.test.example.com"
fail_msg: "element/config.json does not contain meet.test.example.com" fail_msg: "element/config.json does not contain meet.test.example.com"
- name: Assert element config contains default theme - name: Assert element config contains default theme
ansible.builtin.assert: ansible.builtin.assert:
that: '"default_theme": "light"' in element_config that: element_config_parsed.default_theme == "light"
fail_msg: "element/config.json does not contain default_theme: light" fail_msg: "element/config.json does not contain default_theme: light"
- name: Check docker-compose.yml exists - name: Check docker-compose.yml exists
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+122
View File
@@ -0,0 +1,122 @@
---
# Shared test variables used by all molecule scenarios.
# These provide the minimum variable set so converge.yml playbooks can run
# without a full production inventory.
molecule_test_mode: true
base_domain: "test.example.com"
tenant_name: "Test Corp"
tenant_logo_local_path: ""
tenant_primary_color: "#2563eb"
tenant_accent_color: "#1e40af"
sovereign_base_dir: /tmp/sovereign_test
sovereign_network_name: sovereign
# Traefik
traefik_acme_email: "admin@test.example.com"
traefik_domain: "traefik.test.example.com"
traefik_dashboard_password: "testpassword"
# Authentik
authentik_domain: "auth.test.example.com"
authentik_version: "2024.10.5"
authentik_secret_key: "test-secret-key-exactly-50-chars-padded-here12345"
authentik_db_password: "test_authentik_db"
authentik_admin_email: "admin@test.example.com"
authentik_admin_password: "test_admin"
# Graylog
graylog_domain: "logs.test.example.com"
graylog_version: "6.0"
graylog_password_secret: "test_graylog_secret_min_16_chars"
graylog_root_password_sha2: "test_sha256_placeholder"
graylog_host: "127.0.0.1"
graylog_gelf_port: 12201
# Stalwart Mail
stalwart_domain: "mail.test.example.com"
stalwart_admin_password: "test_mail_admin"
stalwart_version: "latest"
# Roundcube
roundcube_domain: "webmail.test.example.com"
roundcube_version: "latest"
roundcube_db_password: "test_roundcube_db"
roundcube_des_key: "test_24_char_des_key____"
# Wazuh
wazuh_domain: "wazuh.test.example.com"
wazuh_version: "4.9.0"
wazuh_admin_password: "test_wazuh_admin"
wazuh_api_password: "test_wazuh_api"
# Headscale
wireguard_domain: "vpn.test.example.com"
headscale_domain: "headscale.test.example.com"
headscale_version: "0.23.0"
wireguard_port: 51820
headscale_noise_private_key: ""
# Matrix / Element
matrix_domain: "matrix.test.example.com"
element_domain: "chat.test.example.com"
matrix_version: "v1.118.0"
matrix_registration_secret: "test_registration_secret"
matrix_db_password: "test_matrix_db"
# Jitsi
jitsi_domain: "meet.test.example.com"
jitsi_version: "stable-9753"
jitsi_jicofo_auth_password: "test_jicofo"
jitsi_jvb_auth_password: "test_jvb"
jitsi_jibri_recorder_password: "test_jibri_recorder"
jitsi_jibri_xmpp_password: "test_jibri_xmpp"
jitsi_turn_secret: "test_turn"
# MinIO
minio_domain: "s3.test.example.com"
minio_console_domain: "minio.test.example.com"
minio_version: "latest"
minio_root_user: "minioadmin"
minio_root_password: "test_minio"
minio_nextcloud_bucket: "nextcloud"
minio_nextcloud_access_key: "nextcloud"
minio_nextcloud_secret_key: "test_nextcloud_s3"
# Nextcloud
nextcloud_domain: "cloud.test.example.com"
nextcloud_version: "29"
nextcloud_admin_user: "admin"
nextcloud_admin_password: "test_nextcloud"
nextcloud_db_password: "test_nextcloud_db"
nextcloud_db_root_password: "test_nextcloud_db_root"
# Vaultwarden
vaultwarden_domain: "vault.test.example.com"
vaultwarden_version: "latest"
vaultwarden_admin_token: "test_vaultwarden_admin_token"
vaultwarden_db_password: "test_vaultwarden_db"
# Forgejo
forgejo_domain: "git.test.example.com"
forgejo_version: "latest"
forgejo_db_password: "test_forgejo_db"
forgejo_secret_key: "test_forgejo_secret"
forgejo_internal_token: "test_forgejo_internal_token"
forgejo_lfs_jwt_secret: "test_forgejo_lfs_jwt"
forgejo_admin_user: "admin"
forgejo_admin_password: "test_forgejo_admin"
forgejo_admin_email: "admin@test.example.com"
forgejo_ssh_port: 2222
# Website
website_nginx_version: "alpine"
# SMTP
smtp_host: "stalwart"
smtp_port: 587
smtp_from: "noreply@test.example.com"
smtp_user: "noreply@test.example.com"
smtp_password: "test_smtp"
smtp_tls: "starttls"
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible
+4 -5
View File
@@ -4,20 +4,19 @@ dependency:
options: options:
requirements-file: requirements.yml requirements-file: requirements.yml
driver: driver:
name: docker name: default
options:
managed: false
ansible_connection_options:
ansible_connection: local
platforms: platforms:
- name: localhost - name: localhost
groups: groups:
- sovereign - sovereign
provisioner: provisioner:
name: ansible name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
inventory: inventory:
host_vars: host_vars:
localhost: localhost:
ansible_connection: local ansible_connection: local
verifier: verifier:
name: ansible name: ansible