Compare commits

...

5 Commits

Author SHA1 Message Date
595c0624d6 Merge pull request 'edit init 1' (#1) from edit into main
Reviewed-on: IM/ansible_fencl#1
2025-10-03 11:47:51 +00:00
fencl
2b5a2b4a1a edit init 1 2025-10-03 13:36:35 +02:00
b247ea0832 Update mikrotikbackup.yml 2025-09-19 10:58:22 +00:00
c476f04a8e Update inv_mikrotiks 2025-09-19 09:30:23 +00:00
5c185324d5 Update inv_linuxes 2025-09-18 12:31:07 +00:00
9 changed files with 293 additions and 8 deletions

29
check_stack_nextcloud.yml Normal file
View File

@@ -0,0 +1,29 @@
---
- name: Upload and run stack health checks
hosts: proxmox
become: true
vars:
health_script_path: /data/compose/nextcloud/stack-health.sh
tasks:
- name: Upload stack-health.sh
ansible.builtin.copy:
src: files/stack-health.sh
dest: "{{ health_script_path }}"
mode: '0755'
- name: Run stack-health.sh
ansible.builtin.shell: "{{ health_script_path }}"
register: health
args:
executable: /bin/bash
- name: Show health output
ansible.builtin.debug:
msg: "{{ health.stdout | default('no stdout') }}"
- name: Fail if checks failed (rc != 0)
ansible.builtin.fail:
msg: "Health checks failed"
when: health.rc != 0

30
collabora_update.yml Normal file
View File

@@ -0,0 +1,30 @@
---
- name: Update Collabora (pull + recreate in same compose project)
hosts: proxmox
become: true
vars:
collabora_compose_path: /data/compose/nextcloud/collabora-only.yml
collabora_project_name: nextcloud-collabora # based on your labels
tasks:
- name: Pull collabora/code:latest image
community.docker.docker_image:
name: collabora/code
tag: latest
source: pull
# Compose file contains only service "collabora", so this acts on that service only
- name: Compose pull (ensure freshest image)
community.docker.docker_compose_v2:
project_name: "{{ collabora_project_name }}"
files: ["{{ collabora_compose_path }}"]
pull: always
state: present
- name: Recreate collabora with new image
community.docker.docker_compose_v2:
project_name: "{{ collabora_project_name }}"
files: ["{{ collabora_compose_path }}"]
recreate: always
state: present

View File

@@ -1,5 +1,2 @@
[linux_servers]
jimbuntu ansible_host=192.168.19.4
jim_storage ansible_host=192.168.19.7
portainer2 ansible_host=192.168.52.9
portainernode ansible_host=192.168.52.21
proxmox ansible_host=192.168.69.2

View File

@@ -1,2 +1,2 @@
[mikrotiks]
storage ansible_host=192.168.19.3 ansible_ssh_common_args='-o StrictHostKeyChecking=no'
main_mikrotik_fencl ansible_host=192.168.69.1

View File

@@ -7,7 +7,7 @@
- name: Ensure output directory exists
ansible.builtin.file:
path: output
path: /opt/mikrotik_backups
state: directory
mode: '0755'
delegate_to: localhost
@@ -42,7 +42,7 @@
- name: Save export to local file
ansible.builtin.copy:
content: "{{ export_output.stdout }}"
dest: "output/{{ router_name }}-{{ current_date }}.config"
dest: "/opt/mikrotik_backups/{{ router_name }}-{{ current_date }}.config"
delegate_to: localhost
when: export_output.rc == 0
@@ -52,7 +52,7 @@
when: system_identity.rc == 0
- name: Download binary backup
shell: timeout 15 scp -o StrictHostKeyChecking=no -P {{ ansible_port }} {{ ansible_user }}@{{ ansible_host }}:{{ router_name }}-{{ current_date }}-backup.backup output/
shell: timeout 15 scp -o StrictHostKeyChecking=no -P {{ ansible_port }} {{ ansible_user }}@{{ ansible_host }}:{{ router_name }}-{{ current_date }}-backup.backup /opt/mikrotik_backups/
delegate_to: localhost
when: system_identity.rc == 0

38
nextcloud_backup.yml Normal file
View File

@@ -0,0 +1,38 @@
---
- name: Nextcloud backup (config, custom_apps, DB)
hosts: proxmox
become: true
vars:
nc_root: /data/compose/nextcloud
backup_dir: "{{ nc_root }}/backup-{{ ansible_date_time.date }}"
db_container: nextcloud-db
tasks:
- name: Ensure backup directory exists
ansible.builtin.file:
path: "{{ backup_dir }}"
state: directory
mode: '0755'
# Use archive module to create tar.gz directly on the remote host
- name: Archive config directory
ansible.builtin.archive:
path: "{{ nc_root }}/config"
dest: "{{ backup_dir }}/config.tgz"
format: gz
- name: Archive custom_apps directory
ansible.builtin.archive:
path: "{{ nc_root }}/custom_apps"
dest: "{{ backup_dir }}/custom_apps.tgz"
format: gz
# Dump DB directly to a file on the host (avoid shuttling dump through Ansible)
- name: Dump MariaDB from container to file
ansible.builtin.shell: |
set -euo pipefail
docker exec {{ db_container }} sh -c 'command -v mariadb-dump >/dev/null && mariadb-dump -u"$$MYSQL_USER" -p"$$MYSQL_PASSWORD" "$$MYSQL_DATABASE" || mysqldump -u"$$MYSQL_USER" -p"$$MYSQL_PASSWORD" "$$MYSQL_DATABASE"' \
> "{{ backup_dir }}/db.sql"
args:
executable: /bin/bash

112
nextcloud_upgrade.yml Normal file
View File

@@ -0,0 +1,112 @@
---
- name: Upgrade Nextcloud to 31-apache (pull + recreate + occ)
hosts: proxmox
become: true
vars:
nc_container: nextcloud
nc_image_tag: "31-apache" # change to 32-apache when you step to next major
# Ports/volumes/env exactly as you use:
nc_root: /data/compose/nextcloud
nc_http_port: "8080:80"
tasks:
- name: Gather nextcloud container info
community.docker.docker_container_info:
name: "{{ nc_container }}"
register: nc_info
- name: Derive compose project & network from existing container
ansible.builtin.set_fact:
nc_project: "{{ nc_info.container.Config.Labels['com.docker.compose.project'] | default('nextcloud') }}"
nc_networks: "{{ (nc_info.container.NetworkSettings.Networks | default({})).keys() | list }}"
nc_net_primary: "{{ (nc_info.container.NetworkSettings.Networks | default({})).keys() | list | first }}"
when: nc_info.exists
- name: Enable maintenance mode
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ maintenance:mode --on
- name: Render one-off compose for nextcloud (single-service)
ansible.builtin.copy:
dest: /tmp/nc.yml
mode: '0644'
content: |
name: {{ nc_project }}
services:
nextcloud:
image: nextcloud:{{ nc_image_tag }}
container_name: {{ nc_container }}
restart: unless-stopped
networks: [cloud]
ports: ["{{ nc_http_port }}"]
volumes:
- {{ nc_root }}/config:/var/www/html/config
- {{ nc_root }}/data:/var/www/html/data
- {{ nc_root }}/custom_apps:/var/www/html/custom_apps
environment:
TZ: Europe/Prague
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: dbpassword
MYSQL_HOST: nextclouddb
REDIS_HOST: redis
NEXTCLOUD_ADMIN_USER: root
NEXTCLOUD_ADMIN_PASSWORD: '1234SilneHeslo.-.'
networks:
cloud:
external: true
name: {{ nc_net_primary }}
- name: Pull the new Nextcloud image
community.docker.docker_compose_v2:
project_name: "{{ nc_project }}"
files: ["/tmp/nc.yml"]
pull: always
state: present
- name: Recreate Nextcloud with the new image
community.docker.docker_compose_v2:
project_name: "{{ nc_project }}"
files: ["/tmp/nc.yml"]
recreate: always
state: present
- name: Run occ upgrade
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ upgrade
- name: Recommended DB maintenance (safe to run)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ db:add-missing-indices
ignore_errors: true
- name: Convert filecache bigint (safe)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ db:convert-filecache-bigint --no-interaction
ignore_errors: true
- name: Disable maintenance mode
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ maintenance:mode --off
- name: Show status
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ status
register: nc_status
- name: Print status
ansible.builtin.debug:
msg: "{{ nc_status.stdout | default('no output') }}"

75
redis_update.yml Normal file
View File

@@ -0,0 +1,75 @@
---
- name: Update Redis (pull + recreate, same stack)
hosts: proxmox
become: true
vars:
nc_container: nextcloud
redis_container: redis
redis_image: "redis:7-alpine"
nc_root: /data/compose/nextcloud
tasks:
- name: Gather nextcloud container info (to learn project + network)
community.docker.docker_container_info:
name: "{{ nc_container }}"
register: nc_info
- name: Derive compose project & network
ansible.builtin.set_fact:
nc_project: "{{ nc_info.container.Config.Labels['com.docker.compose.project'] | default('nextcloud') }}"
nc_net_primary: "{{ (nc_info.container.NetworkSettings.Networks | default({})).keys() | list | first }}"
when: nc_info.exists
- name: Enable maintenance mode (optional safety)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ maintenance:mode --on
ignore_errors: true
- name: Render one-off compose for Redis
ansible.builtin.copy:
dest: /tmp/redis.yml
mode: '0644'
content: |
name: {{ nc_project }}
services:
redis:
image: {{ redis_image }}
container_name: {{ redis_container }}
restart: unless-stopped
networks: [cloud]
volumes:
- {{ nc_root }}/redis:/data
networks:
cloud:
external: true
name: {{ nc_net_primary }}
- name: Pull redis image
community.docker.docker_compose_v2:
project_name: "{{ nc_project }}"
files: ["/tmp/redis.yml"]
pull: always
state: present
- name: Recreate redis
community.docker.docker_compose_v2:
project_name: "{{ nc_project }}"
files: ["/tmp/redis.yml"]
recreate: always
state: present
- name: Disable maintenance mode (if we turned it on)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ maintenance:mode --off
ignore_errors: true
- name: Fire one cron tick (cleanup pending jobs)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php -f /var/www/html/cron.php

4
requirements.yml Normal file
View File

@@ -0,0 +1,4 @@
---
collections:
- name: community.docker
- name: ansible.posix