diff --git a/ansible/roles/setup_hosted_services/defaults/main.yml b/ansible/roles/setup_hosted_services/defaults/main.yml index 11f344f..a9929ef 100644 --- a/ansible/roles/setup_hosted_services/defaults/main.yml +++ b/ansible/roles/setup_hosted_services/defaults/main.yml @@ -2,31 +2,18 @@ docker_compose_directory: /etc/docker-compose services: - name: gitea - volumes: ["gitea_data"] - name: mealie - volumes: ["mealie_data"] - name: linkding - volumes: ["linkding_data"] - name: overseerr - volumes: ["overseerr_config"] - name: nextcloud - volumes: ["nextcloud_data"] - name: dashboards - volumes: [] - name: nginx-proxy-manager - volumes: ["nginx-proxy-manager_data"] - name: plex - volumes: ["plex_config", "plex_tautulli_config"] - name: uptime-kuma - volumes: ["uptime-kuma_data"] - name: vpn-stack - volumes: ["vpn-stack_qbittorrent_config", "vpn-stack_radarr_config", "vpn-stack_sonarr_config", "vpn-stack_jackett_config"] - name: docker-volume-backup - volumes: [] - name: mariadb - volumes: ["mariadb_config","mariadb_data"] - name: photoprism - volumes: [] docker_networks: - nextcloud_net diff --git a/ansible/roles/setup_hosted_services/files/scripts/find-volumes-to-restore.py b/ansible/roles/setup_hosted_services/files/scripts/find-volumes-to-restore.py index bd7f425..493163e 100644 --- a/ansible/roles/setup_hosted_services/files/scripts/find-volumes-to-restore.py +++ b/ansible/roles/setup_hosted_services/files/scripts/find-volumes-to-restore.py @@ -1,16 +1,34 @@ #!/usr/bin/python import os +import yaml + +from pathlib import Path def main(): existing = eval(os.getenv("EXISTING_VOLUMES")) services = eval(os.getenv("SERVICES")) + docker_compose_dir = os.getenv("DOCKER_COMPOSE_DIR") + full_volume_names = [] missing_volumes = [] for service in services: - for volume_name in service.get("volumes", []): - if volume_name not in existing: - missing_volumes.append(volume_name) + service_name = service["name"] + docker_file = f"{docker_compose_dir}/{service_name}/docker-compose.yml" + docker_compose_dict = yaml.safe_load(Path(docker_file).read_text()) + + # no volumes specified in the compose file + if "volumes" not in docker_compose_dict: + continue + + volumes = docker_compose_dict["volumes"] + + for v in volumes: + full_volume_names.append(f"{service_name}_{v}") + + for volume_name in full_volume_names: + if volume_name not in existing: + missing_volumes.append(volume_name) for mv in missing_volumes: print(mv) diff --git a/ansible/roles/setup_hosted_services/tasks/main.yml b/ansible/roles/setup_hosted_services/tasks/main.yml index 8a423fc..815cf3e 100644 --- a/ansible/roles/setup_hosted_services/tasks/main.yml +++ b/ansible/roles/setup_hosted_services/tasks/main.yml @@ -47,6 +47,7 @@ environment: EXISTING_VOLUMES: "{{ find_volumes.results | map(attribute='stdout_lines') | list | flatten }}" SERVICES: "{{ services }}" + DOCKER_COMPOSE_DIR: "{{docker_compose_directory}}" args: executable: python3 register: python_output