Restructure repo: group Docker stacks under docker-compose/, add ansible/ playbooks and roles
This commit is contained in:
7
ansible/playbooks/ping.yml
Normal file
7
ansible/playbooks/ping.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Ping
|
||||||
|
ansible.builtin.ping:
|
||||||
110
ansible/playbooks/roles/docker_compose_update/tasks/main.yml
Normal file
110
ansible/playbooks/roles/docker_compose_update/tasks/main.yml
Normal file
@@ -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(' ') }}"
|
||||||
|
- "========================================"
|
||||||
8
ansible/playbooks/update-agent-canvas.yml
Normal file
8
ansible/playbooks/update-agent-canvas.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/agent-canvas"
|
||||||
|
service_name: "Agent Canvas"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-filebrowser.yml
Normal file
8
ansible/playbooks/update-filebrowser.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/filebrowser"
|
||||||
|
service_name: "Filebrowser"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
10
ansible/playbooks/update-grafana.yml
Normal file
10
ansible/playbooks/update-grafana.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
service_name: Monitoring Stack
|
||||||
|
compose_dir: /home/rezayaghobi/docker/monitoring
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-n8n.yml
Normal file
8
ansible/playbooks/update-n8n.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/n8n"
|
||||||
|
service_name: "n8n"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-npm.yml
Normal file
8
ansible/playbooks/update-npm.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/npm"
|
||||||
|
service_name: "Nginx Proxy Manager"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-pihole.yml
Normal file
8
ansible/playbooks/update-pihole.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/pihole"
|
||||||
|
service_name: "Pi-hole"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-plex.yml
Normal file
8
ansible/playbooks/update-plex.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/plex"
|
||||||
|
service_name: "Plex"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-portainer.yml
Normal file
8
ansible/playbooks/update-portainer.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/portainer"
|
||||||
|
service_name: "Portainer"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-prowlarr.yml
Normal file
8
ansible/playbooks/update-prowlarr.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/prowlarr"
|
||||||
|
service_name: "Prowlarr"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-radarr.yml
Normal file
8
ansible/playbooks/update-radarr.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/radarr"
|
||||||
|
service_name: "Radarr"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-samba.yml
Normal file
8
ansible/playbooks/update-samba.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/samba"
|
||||||
|
service_name: "Samba"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-sentinel.yml
Normal file
8
ansible/playbooks/update-sentinel.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/sentinel"
|
||||||
|
service_name: "Sentinel"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-smartctl.yml
Normal file
8
ansible/playbooks/update-smartctl.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/smartctl"
|
||||||
|
service_name: "Smartctl"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-sonarr.yml
Normal file
8
ansible/playbooks/update-sonarr.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/sonarr"
|
||||||
|
service_name: "Sonarr"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
8
ansible/playbooks/update-whisparr.yml
Normal file
8
ansible/playbooks/update-whisparr.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
compose_dir: "/home/rezayaghobi/docker/whisparr"
|
||||||
|
service_name: "Whisparr"
|
||||||
|
roles:
|
||||||
|
- docker_compose_update
|
||||||
Reference in New Issue
Block a user