diff --git a/ansible/findings.md b/ansible/findings.md index 289de10..67c6a6c 100644 --- a/ansible/findings.md +++ b/ansible/findings.md @@ -24,6 +24,7 @@ - **Fixed `general.yml` references** — `bootstrap-network`, `run-all`, `qc-web` Makefile targets now use `playbook.yml`; removed `qc-web` target (`qc_web` group doesn't exist). - **Removed all Docker targets** — `build-*`, `run-*`, `push-*`, `base-*`, `latest`, `local`, `clean`, `dirs` — no Dockerfile at repo root ever existed. - **Fixed `install-collections`** — removed references to deleted `roles/requirements.yml` and `scripts/fix-deprecated-imports.sh`. +- **Deleted orphaned `host_vars/db.aprs.me.yml`** — host not in inventory; `db.w5isp.com` already serves as the single database server. - **Deleted unreferenced roles** — removed `icinga2-container/`, `debug/`, `mailcow/`, `syncthing/` (no plays applied them). - **Removed unused Galaxy dependencies** — deleted `geerlingguy.docker`, `geerlingguy.kubernetes` from `requirements.yml`; deleted entire `roles/requirements.yml` (graylog2.graylog, bertvv.bind, artis3n.tailscale); merged `netbox.netbox` into root file. - **Cleaned fact_cache** — removed 56 stale files. @@ -49,7 +50,6 @@ | 6 | **No `Dockerfile` at repo root** — All `build-*`, `run-*`, `push-*` Makefile targets fail. `base-latest`/`base-local` reference non-existent sub-targets. | `Makefile:3-30` | | 8 | **`geerlingguy.postgresql` not in `requirements.yml`** — Role referenced in `playbook.yml:73` for `postgresql_servers` but not installable via `ansible-galaxy`. | `playbook.yml:73`, `requirements.yml` | | 9 | **`alpine` role referenced but doesn't exist** — `include_role: name=alpine` will crash on any Alpine host. | `roles/base/tasks/main.yml:46-48` | -| 10 | **`db.aprs.me` has host_vars but no inventory entry** — Orphaned host_vars, Ansible never loads them. | `host_vars/db.aprs.me.yml`, `hosts` | --- @@ -116,6 +116,7 @@ All items in this section have been fixed. | 41 | `collections/requirements.yml` redundant | Merged into root file, deleted | | 42 | Stale fact_cache files (56 files) | Deleted all | | 43 | `home_cluster` and `dns_servers` groups never targeted | Removed from `hosts` | +| 10 | Orphaned `host_vars/db.aprs.me.yml` with no inventory entry | Deleted (superseded by `db.w5isp.com`) | | 12-15 | Undefined template variables (ntpserver, template_run_date, deb_mirror, sshd.*) | Added `| default()` fallbacks | | -- | Alpine role reference to non-existent role | Removed from `roles/base/tasks/main.yml` | | -- | SSH `-t` flag after hostname in Makefile | Moved before hostname | diff --git a/ansible/host_vars/db.aprs.me.yml b/ansible/host_vars/db.aprs.me.yml deleted file mode 100644 index 15d82fa..0000000 --- a/ansible/host_vars/db.aprs.me.yml +++ /dev/null @@ -1,141 +0,0 @@ ---- -ansible_user: graham -ansible_host: 10.0.15.22 -ansible_python_interpreter: /usr/bin/python3 -ansible_ssh_common_args: '-o StrictHostKeyChecking=accept-new' - -firewall_enabled: false - -# Override role defaults - LXC container with default Debian paths -postgresql_version: "17" -postgresql_storage_setup_enabled: false -postgresql_data_directory: /var/lib/postgresql/17/main -postgresql_wal_directory: /var/lib/postgresql/17/main/pg_wal -postgresql_config_directory: /etc/postgresql/17/main -postgresql_backup_enabled: false - -# PostgreSQL base config (postgresql.conf) -postgresql_config: - # Connection - listen_addresses: "'*'" - max_connections: 100 - port: 5432 - - # Memory (tuned for 8GB RAM, Intel N100 2 vCPU) - shared_buffers: 2GB - effective_cache_size: 6GB - work_mem: 16MB - maintenance_work_mem: 512MB - huge_pages: try - - # NVMe SSD tuning - random_page_cost: 1.1 - effective_io_concurrency: 200 - maintenance_io_concurrency: 200 - - # WAL & Checkpoints (write-heavy APRS workload) - wal_buffers: 64MB - max_wal_size: 2GB - min_wal_size: 512MB - wal_compression: zstd - checkpoint_completion_target: 0.9 - checkpoint_timeout: 10min - synchronous_commit: off - - # Parallelism (constrained by 2 vCPUs) - max_worker_processes: 4 - max_parallel_workers: 2 - max_parallel_workers_per_gather: 1 - max_parallel_maintenance_workers: 1 - - # Autovacuum (aggressive for high-churn packets table) - autovacuum_vacuum_scale_factor: 0.05 - autovacuum_analyze_scale_factor: 0.02 - autovacuum_vacuum_cost_limit: 1000 - autovacuum_naptime: 30s - - # Query planner - default_statistics_target: 200 - - # Monitoring & Logging - shared_preload_libraries: "'pg_stat_statements'" - pg_stat_statements.track: top - track_io_timing: on - log_min_duration_statement: 500 - log_lock_waits: on - log_temp_files: 0 - log_autovacuum_min_duration: 250 - log_line_prefix: "'%m [%p] %q%u@%d '" - log_timezone: "'Etc/UTC'" - cluster_name: "'17/main'" - - # Locale - datestyle: "'iso, mdy'" - timezone: "'Etc/UTC'" - lc_messages: "'C'" - lc_monetary: "'C'" - lc_numeric: "'C'" - lc_time: "'C'" - default_text_search_config: "'pg_catalog.english'" - - # SSL (snakeoil certs) - ssl: on - ssl_cert_file: "'/etc/ssl/certs/ssl-cert-snakeoil.pem'" - ssl_key_file: "'/etc/ssl/private/ssl-cert-snakeoil.key'" - -# pg_hba.conf entries -postgresql_hba_entries: - - type: local - database: all - user: postgres - auth_method: peer - - type: local - database: all - user: all - auth_method: md5 - - type: host - database: all - user: all - address: 127.0.0.1/32 - auth_method: scram-sha-256 - - type: host - database: all - user: all - address: 0.0.0.0/0 - auth_method: md5 - - type: host - database: all - user: all - address: "::1/128" - auth_method: scram-sha-256 - - type: local - database: replication - user: all - auth_method: peer - - type: host - database: replication - user: all - address: 127.0.0.1/32 - auth_method: scram-sha-256 - - type: host - database: replication - user: all - address: "::1/128" - auth_method: scram-sha-256 - -# Database -postgresql_databases: - - name: aprsme_prod - owner: aprs - -postgresql_users: - - name: aprs - password: "{{ vault_postgresql_aprs_password | default(omit) }}" - role_attr_flags: CREATEDB - -postgresql_extensions: - aprsme_prod: - - citext - - pg_stat_statements - - pg_trgm - - postgis