3
0
forked from jakub/ansible
This commit is contained in:
fencl
2025-10-05 13:27:22 +02:00
parent e94a76dde4
commit c60c881f5a

View File

@@ -13,9 +13,8 @@
vm_pass: "{{ lookup('env', 'VM_PASS') }}"
use_sudo: false
# --- Debug toggle ---
# Set DEBUG=1 in Semaphore to see full stdout/stderr (disables no_log)
debug: "{{ (lookup('env','DEBUG') | default('0')) | bool }}"
# --- Debug toggle (set DEBUG=1 in Semaphore to see raw stdout/stderr) ---
kuma_debug: "{{ (lookup('env','DEBUG') | default('0')) | bool }}"
# --- Uptime Kuma specifics ---
kuma_project: "uptime-kuma" # docker compose project name
@@ -25,7 +24,7 @@
kuma_port: 3001
kuma_url: "{{ lookup('env', 'KUMA_URL') | default('', true) }}" # optional public URL
# Fixed container name used in your compose (conflicts if an older non-compose/Portainer container exists)
# Fixed container name used in your compose (may conflict with pre-existing container)
kuma_container_name: "uptime-kuma-dev"
kuma_force_replace_conflict: true # remove conflicting container automatically
kuma_remove_orphans: true # remove containers not present in the compose file
@@ -36,7 +35,7 @@
# Docker command prefix (consistent behavior and quiet hints)
docker_prefix: "unalias docker 2>/dev/null || true; DOCKER_CLI_HINTS=0; command docker"
# Commands to run on the target VM (outputs are kept visible when debug=true)
# Commands to run on the target VM (outputs are visible when kuma_debug=true)
kuma_commands:
# 0) pull image (helpful cache warm-up)
- "{{ docker_prefix }} pull -q {{ kuma_image }}"
@@ -59,10 +58,43 @@
update_cache: yes
# -------------------------
# Preflight checks
# Preflight: connectivity and inputs
# -------------------------
- name: Preflight | Ensure compose file exists on VM
- name: Preflight | Validate required inputs are present
ansible.builtin.assert:
that:
- vm_ip | length > 0
- vm_user | length > 0
- vm_pass | length > 0
fail_msg: "Missing VM connection variables (VM_IP/VM_USER/VM_PASS). Check Semaphore template variables."
success_msg: "Inputs look good."
- name: Preflight | Check SSH connectivity to VM
ansible.builtin.command:
argv:
- sshpass
- -p
- "{{ vm_pass }}"
- ssh
- -o
- StrictHostKeyChecking=no
- -o
- ConnectTimeout=8
- "{{ vm_user }}@{{ vm_ip }}"
- bash
- -lc
- "echo OK"
register: preflight_ssh_ok
changed_when: false
failed_when: preflight_ssh_ok.rc != 0 or (preflight_ssh_ok.stdout | trim) != 'OK'
no_log: "{{ not kuma_debug }}"
# -------------------------
# Preflight: compose sanity
# -------------------------
- name: Preflight | Compose file exists on VM (do not fail here)
ansible.builtin.command:
argv:
- sshpass
@@ -79,10 +111,10 @@
- "test -r {{ kuma_compose_file }}"
register: preflight_compose_exists
changed_when: false
failed_when: preflight_compose_exists.rc != 0
no_log: "{{ not debug }}"
failed_when: false
no_log: "{{ not kuma_debug }}"
- name: Preflight | Validate compose file syntax
- name: Preflight | Validate compose file syntax (do not fail here)
ansible.builtin.command:
argv:
- sshpass
@@ -99,10 +131,10 @@
- "{{ docker_prefix }} compose -f {{ kuma_compose_file }} config -q"
register: preflight_compose_valid
changed_when: false
failed_when: preflight_compose_valid.rc != 0
no_log: "{{ not debug }}"
failed_when: false
no_log: "{{ not kuma_debug }}"
- name: Preflight | Ensure service exists in compose file
- name: Preflight | Ensure service exists in compose (do not fail here)
ansible.builtin.command:
argv:
- sshpass
@@ -120,8 +152,25 @@
{{ docker_prefix }} compose -f {{ kuma_compose_file }} config --services | grep -x {{ kuma_service }}
register: preflight_service_exists
changed_when: false
failed_when: preflight_service_exists.rc != 0
no_log: "{{ not debug }}"
failed_when: false
no_log: "{{ not kuma_debug }}"
- name: Preflight | Assert compose prerequisites
ansible.builtin.assert:
that:
- preflight_compose_exists.rc == 0
- preflight_compose_valid.rc == 0
- preflight_service_exists.rc == 0
fail_msg: >-
Compose preflight failed on {{ vm_ip }} as {{ vm_user }}.
- exists: rc={{ preflight_compose_exists.rc }}
- syntax: rc={{ preflight_compose_valid.rc }}
- service "{{ kuma_service }}": rc={{ preflight_service_exists.rc }}
Hints:
* Verify {{ kuma_compose_file }} path on VM and its permissions.
* Check that service name in the compose matches "kuma_service".
* If SSH connectivity is flaky, re-check VM_IP/USER/PASS.
success_msg: "Compose file present, valid, and service '{{ kuma_service }}' found."
- name: Preflight | Ensure Kuma data dir exists (host path from compose)
ansible.builtin.command:
@@ -139,7 +188,7 @@
- -lc
- "mkdir -p {{ kuma_data_dir }}"
changed_when: false
no_log: "{{ not debug }}"
no_log: "{{ not kuma_debug }}"
- name: Preflight | Detect conflicting container by fixed name
ansible.builtin.command:
@@ -159,7 +208,7 @@
register: kuma_conflict
changed_when: false
failed_when: false
no_log: "{{ not debug }}"
no_log: "{{ not kuma_debug }}"
- name: Preflight | Remove conflicting container if present (and allowed)
ansible.builtin.command:
@@ -180,7 +229,7 @@
- kuma_force_replace_conflict | bool
- (kuma_conflict.stdout | default('') | trim) | length > 0
changed_when: true
no_log: "{{ not debug }}"
no_log: "{{ not kuma_debug }}"
# -------------------------
# Update commands
@@ -196,7 +245,7 @@
- -o
- StrictHostKeyChecking=no
- -o
- ConnectTimeout=15
- ConnectTimeout=20
- "{{ vm_user }}@{{ vm_ip }}"
- bash
- -lc
@@ -205,7 +254,7 @@
register: kuma_cmds
changed_when: false
ignore_errors: true
no_log: "{{ not debug }}"
no_log: "{{ not kuma_debug }}"
- name: Show summarized outputs for each command (sanitized)
ansible.builtin.debug:
@@ -315,4 +364,4 @@
- name: Kuma | Not ready after retries
ansible.builtin.debug:
msg: "Kuma web není dostupná ani po pokusech."
when: not kuma_ready
when: not kuma_ready