/
/
/
Ansible role that can run restic backups and push it to a remote storage server.
1---
2# Service Discovery Task
3# Dynamically discovers services by scanning /docker directories on each host
4
5- name: Detect host type and available services
6 set_fact:
7 host_services: []
8
9- name: Find all Docker service directories
10 find:
11 paths:
12 - "/docker"
13 - "{{ connectivity_docker_base_path | default('/docker') }}"
14 file_type: directory
15 recurse: no
16 hidden: false
17 register: docker_directories
18
19- name: Build service map from discovered directories
20 set_fact:
21 host_services: "{{ host_services + [service_item] }}"
22 loop: "{{ docker_directories.files }}"
23 loop_control:
24 label: "{{ item.path }}"
25 vars:
26 service_name: "{{ item.path | basename }}"
27 service_item:
28 name: "{{ service_name }}"
29 path: "{{ item.path }}"
30 enabled: true
31 tags:
32 - "{{ service_name }}"
33 - "{{ 'runner' if inventory_hostname in groups['runner_servers'] else '' }}"
34 - "{{ 'connectivity' if inventory_hostname in groups['connectivity_servers'] else '' }}"
35 - "{{ 'storage' if inventory_hostname in groups['storage_servers'] else '' }}"
36
37- name: Filter out non-service directories (optional)
38 set_fact:
39 host_services: "{{ host_services | rejectattr('name', 'in', ['backup', 'logs', 'temp', 'tmp', 'cache']) | list }}"
40
41- name: Filter services by selection criteria
42 set_fact:
43 filtered_services: "{{ host_services | selectattr('enabled', 'equalto', true) | list }}"
44
45- name: Further filter by specific service selection
46 set_fact:
47 filtered_services: "{{ filtered_services | selectattr('name', 'in', backup_services) | list }}"
48 when: backup_services | default([]) | length > 0
49
50- name: Display discovered services
51 debug:
52 msg: |
53 ð Service Discovery Results
54
55 Host: {{ inventory_hostname }}
56 Type:
57 {% if inventory_hostname in groups['runner_servers'] %}Runner Server{% endif %}
58 {% if inventory_hostname in groups['connectivity_servers'] %}Connectivity Server{% endif %}
59 {% if inventory_hostname in groups['storage_servers'] %}Storage Server{% endif %}
60
61 ð¦ Discovered Services ({{ filtered_services | length }}):
62 {% for service in filtered_services %}
63 - {{ service.name }} ({{ service.path }}) - Tags: {{ service.tags | join(', ') }}
64 {% else %}
65 - No services found matching criteria
66 {% endfor %}
67
68 ð¯ Selection Criteria:
69 - Requested Services: {{ backup_services | default('ALL') }}
70 - Enabled Services Only: Yes
71 - Dynamic Discovery: Yes (scanned /docker directories)
72 tags: [always, discovery]