diff --git a/ansible/playbooks/ping.yml b/ansible/playbooks/ping.yml new file mode 100644 index 0000000..97ac335 --- /dev/null +++ b/ansible/playbooks/ping.yml @@ -0,0 +1,7 @@ +--- +- hosts: all + gather_facts: false + + tasks: + - name: Ping + ansible.builtin.ping: diff --git a/ansible/playbooks/roles/docker_compose_update/tasks/main.yml b/ansible/playbooks/roles/docker_compose_update/tasks/main.yml new file mode 100644 index 0000000..d88782a --- /dev/null +++ b/ansible/playbooks/roles/docker_compose_update/tasks/main.yml @@ -0,0 +1,110 @@ +--- +- name: Record start time + ansible.builtin.command: date +%s + register: start_epoch + changed_when: false + +- name: ๐Ÿš€ Starting update + ansible.builtin.debug: + msg: + - "========================================" + - "๐Ÿ”ง Updating {{ service_name }}" + - "๐Ÿ“ Compose directory: {{ compose_dir }}" + - "๐Ÿ•’ Started: {{ lookup('pipe', 'date \"+%Y-%m-%d %H:%M:%S\"') }}" + - "========================================" + +- name: Get disk usage before pull + ansible.builtin.command: docker system df + register: disk_before + changed_when: false + +- name: Pull latest images + ansible.builtin.command: + cmd: docker compose pull + chdir: "{{ compose_dir }}" + register: pull_result + changed_when: "'Downloaded' in pull_result.stdout or 'Pulling' in pull_result.stdout" + +- name: Show pull output + ansible.builtin.debug: + var: pull_result.stdout_lines + +- name: Get disk usage after pull + ansible.builtin.command: docker system df + register: disk_after + changed_when: false + +- name: ๐Ÿ“ฆ Show disk usage before pull + ansible.builtin.debug: + var: disk_before.stdout_lines + +- name: ๐Ÿ“ฆ Show disk usage after pull + ansible.builtin.debug: + var: disk_after.stdout_lines + +- name: ๐Ÿ“ฆ Disk usage note + ansible.builtin.debug: + msg: "(Totals are host-wide, not just this stack โ€” compare the 'Images' row above/below to gauge what this pull added.)" + +- name: Recreate containers + ansible.builtin.command: + cmd: docker compose up -d + chdir: "{{ compose_dir }}" + register: compose_result + +- name: Wait for services + ansible.builtin.pause: + seconds: 5 + +- name: Get compose status + ansible.builtin.command: + cmd: docker compose ps + chdir: "{{ compose_dir }}" + register: compose_status + +- name: ๐Ÿ“‹ Display compose status + ansible.builtin.debug: + msg: + - "----------------------------------------" + - "๐Ÿ“‹ Container status for {{ service_name }}" + - "----------------------------------------" + - "{{ compose_status.stdout_lines }}" + +- name: Verify every container is Up + ansible.builtin.assert: + that: + - "'Exit' not in compose_status.stdout" + - "'Created' not in compose_status.stdout" + - "'Restarting' not in compose_status.stdout" + fail_msg: | + โŒ One or more containers are not healthy. + Image cleanup skipped. + success_msg: | + โœ… All containers are running correctly. + +- name: Remove unused images + ansible.builtin.command: + cmd: docker image prune -f + register: prune_result + +- name: Show reclaimed space + ansible.builtin.debug: + var: prune_result.stdout_lines + +- name: Record end time + ansible.builtin.command: date +%s + register: end_epoch + changed_when: false + +- name: Compute elapsed time + ansible.builtin.set_fact: + elapsed_seconds: "{{ end_epoch.stdout | int - start_epoch.stdout | int }}" + +- name: โœ… Finished + ansible.builtin.debug: + msg: + - "========================================" + - "๐ŸŽ‰ {{ service_name }} updated successfully!" + - "โฑ๏ธ Duration: {{ (elapsed_seconds | int / 60) | int }}m {{ elapsed_seconds | int % 60 }}s" + - "๐Ÿงน Cleanup: {{ prune_result.stdout_lines | join(' ') }}" + - "========================================" diff --git a/ansible/playbooks/update-agent-canvas.yml b/ansible/playbooks/update-agent-canvas.yml new file mode 100644 index 0000000..a94db37 --- /dev/null +++ b/ansible/playbooks/update-agent-canvas.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/agent-canvas" + service_name: "Agent Canvas" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-filebrowser.yml b/ansible/playbooks/update-filebrowser.yml new file mode 100644 index 0000000..af65001 --- /dev/null +++ b/ansible/playbooks/update-filebrowser.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/filebrowser" + service_name: "Filebrowser" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-grafana.yml b/ansible/playbooks/update-grafana.yml new file mode 100644 index 0000000..c77ef21 --- /dev/null +++ b/ansible/playbooks/update-grafana.yml @@ -0,0 +1,10 @@ +--- +- hosts: all + become: true + + vars: + service_name: Monitoring Stack + compose_dir: /home/rezayaghobi/docker/monitoring + + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-n8n.yml b/ansible/playbooks/update-n8n.yml new file mode 100644 index 0000000..e85a10c --- /dev/null +++ b/ansible/playbooks/update-n8n.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/n8n" + service_name: "n8n" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-npm.yml b/ansible/playbooks/update-npm.yml new file mode 100644 index 0000000..53fffb4 --- /dev/null +++ b/ansible/playbooks/update-npm.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/npm" + service_name: "Nginx Proxy Manager" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-pihole.yml b/ansible/playbooks/update-pihole.yml new file mode 100644 index 0000000..8576a1d --- /dev/null +++ b/ansible/playbooks/update-pihole.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/pihole" + service_name: "Pi-hole" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-plex.yml b/ansible/playbooks/update-plex.yml new file mode 100644 index 0000000..4bf51fe --- /dev/null +++ b/ansible/playbooks/update-plex.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/plex" + service_name: "Plex" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-portainer.yml b/ansible/playbooks/update-portainer.yml new file mode 100644 index 0000000..804055d --- /dev/null +++ b/ansible/playbooks/update-portainer.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/portainer" + service_name: "Portainer" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-prowlarr.yml b/ansible/playbooks/update-prowlarr.yml new file mode 100644 index 0000000..4799dc7 --- /dev/null +++ b/ansible/playbooks/update-prowlarr.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/prowlarr" + service_name: "Prowlarr" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-radarr.yml b/ansible/playbooks/update-radarr.yml new file mode 100644 index 0000000..a102e97 --- /dev/null +++ b/ansible/playbooks/update-radarr.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/radarr" + service_name: "Radarr" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-samba.yml b/ansible/playbooks/update-samba.yml new file mode 100644 index 0000000..ad3b0e9 --- /dev/null +++ b/ansible/playbooks/update-samba.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/samba" + service_name: "Samba" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-sentinel.yml b/ansible/playbooks/update-sentinel.yml new file mode 100644 index 0000000..06e034d --- /dev/null +++ b/ansible/playbooks/update-sentinel.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/sentinel" + service_name: "Sentinel" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-smartctl.yml b/ansible/playbooks/update-smartctl.yml new file mode 100644 index 0000000..5ba1b24 --- /dev/null +++ b/ansible/playbooks/update-smartctl.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/smartctl" + service_name: "Smartctl" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-sonarr.yml b/ansible/playbooks/update-sonarr.yml new file mode 100644 index 0000000..4d1215f --- /dev/null +++ b/ansible/playbooks/update-sonarr.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/sonarr" + service_name: "Sonarr" + roles: + - docker_compose_update diff --git a/ansible/playbooks/update-whisparr.yml b/ansible/playbooks/update-whisparr.yml new file mode 100644 index 0000000..587f388 --- /dev/null +++ b/ansible/playbooks/update-whisparr.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars: + compose_dir: "/home/rezayaghobi/docker/whisparr" + service_name: "Whisparr" + roles: + - docker_compose_update diff --git a/dockscope/docker-compose.yml b/docker-compose/dockscope/docker-compose.yml similarity index 100% rename from dockscope/docker-compose.yml rename to docker-compose/dockscope/docker-compose.yml diff --git a/filebrowser/docker-compose.yml b/docker-compose/filebrowser/docker-compose.yml similarity index 100% rename from filebrowser/docker-compose.yml rename to docker-compose/filebrowser/docker-compose.yml diff --git a/mediastack/download-client-qbittorent/docker-compose.yml b/docker-compose/mediastack/download-client-qbittorent/docker-compose.yml similarity index 100% rename from mediastack/download-client-qbittorent/docker-compose.yml rename to docker-compose/mediastack/download-client-qbittorent/docker-compose.yml diff --git a/mediastack/plex/docker-compose.yml b/docker-compose/mediastack/plex/docker-compose.yml similarity index 100% rename from mediastack/plex/docker-compose.yml rename to docker-compose/mediastack/plex/docker-compose.yml diff --git a/mediastack/prowlarr/docker-compose.yml b/docker-compose/mediastack/prowlarr/docker-compose.yml similarity index 100% rename from mediastack/prowlarr/docker-compose.yml rename to docker-compose/mediastack/prowlarr/docker-compose.yml diff --git a/mediastack/radarr/docker-compose.yml b/docker-compose/mediastack/radarr/docker-compose.yml similarity index 100% rename from mediastack/radarr/docker-compose.yml rename to docker-compose/mediastack/radarr/docker-compose.yml diff --git a/mediastack/sonarr/docker-compose.yml b/docker-compose/mediastack/sonarr/docker-compose.yml similarity index 100% rename from mediastack/sonarr/docker-compose.yml rename to docker-compose/mediastack/sonarr/docker-compose.yml diff --git a/mediastack/whisparr/docker-compose.yml b/docker-compose/mediastack/whisparr/docker-compose.yml similarity index 100% rename from mediastack/whisparr/docker-compose.yml rename to docker-compose/mediastack/whisparr/docker-compose.yml diff --git a/minecraft/docker-compose.yml b/docker-compose/minecraft/docker-compose.yml similarity index 100% rename from minecraft/docker-compose.yml rename to docker-compose/minecraft/docker-compose.yml diff --git a/monitoring-grafana-promethues-cadvisor-node-exporter/docker-compose.yml b/docker-compose/monitoring-grafana-promethues-cadvisor-node-exporter/docker-compose.yml similarity index 100% rename from monitoring-grafana-promethues-cadvisor-node-exporter/docker-compose.yml rename to docker-compose/monitoring-grafana-promethues-cadvisor-node-exporter/docker-compose.yml diff --git a/n8n/.env.example b/docker-compose/n8n/.env.example similarity index 100% rename from n8n/.env.example rename to docker-compose/n8n/.env.example diff --git a/n8n/docker-compose.yaml b/docker-compose/n8n/docker-compose.yaml similarity index 100% rename from n8n/docker-compose.yaml rename to docker-compose/n8n/docker-compose.yaml diff --git a/nginx-proxy-manager/compose.yaml b/docker-compose/nginx-proxy-manager/compose.yaml similarity index 100% rename from nginx-proxy-manager/compose.yaml rename to docker-compose/nginx-proxy-manager/compose.yaml diff --git a/openhands/compose.yaml b/docker-compose/openhands/compose.yaml similarity index 100% rename from openhands/compose.yaml rename to docker-compose/openhands/compose.yaml diff --git a/pihole/.env.example b/docker-compose/pihole/.env.example similarity index 100% rename from pihole/.env.example rename to docker-compose/pihole/.env.example diff --git a/pihole/docker-compose.yml b/docker-compose/pihole/docker-compose.yml similarity index 100% rename from pihole/docker-compose.yml rename to docker-compose/pihole/docker-compose.yml diff --git a/portainer/docker-compose.yml b/docker-compose/portainer/docker-compose.yml similarity index 100% rename from portainer/docker-compose.yml rename to docker-compose/portainer/docker-compose.yml diff --git a/samba/.env.example b/docker-compose/samba/.env.example similarity index 100% rename from samba/.env.example rename to docker-compose/samba/.env.example diff --git a/samba/docker-compose.yml b/docker-compose/samba/docker-compose.yml similarity index 100% rename from samba/docker-compose.yml rename to docker-compose/samba/docker-compose.yml diff --git a/semaphore/README.md b/docker-compose/semaphore/README.md similarity index 100% rename from semaphore/README.md rename to docker-compose/semaphore/README.md diff --git a/semaphore/docker-compose.yml b/docker-compose/semaphore/docker-compose.yml similarity index 100% rename from semaphore/docker-compose.yml rename to docker-compose/semaphore/docker-compose.yml diff --git a/sentinel/docker-compose.yml b/docker-compose/sentinel/docker-compose.yml similarity index 100% rename from sentinel/docker-compose.yml rename to docker-compose/sentinel/docker-compose.yml diff --git a/smartctl/docker-compose.yml b/docker-compose/smartctl/docker-compose.yml similarity index 100% rename from smartctl/docker-compose.yml rename to docker-compose/smartctl/docker-compose.yml