forked from jakub/ansible
.
This commit is contained in:
@@ -13,9 +13,8 @@
|
|||||||
vm_pass: "{{ lookup('env', 'VM_PASS') }}"
|
vm_pass: "{{ lookup('env', 'VM_PASS') }}"
|
||||||
use_sudo: false
|
use_sudo: false
|
||||||
|
|
||||||
# --- Debug toggle ---
|
# --- Debug toggle (set DEBUG=1 in Semaphore to see raw stdout/stderr) ---
|
||||||
# Set DEBUG=1 in Semaphore to see full stdout/stderr (disables no_log)
|
kuma_debug: "{{ (lookup('env','DEBUG') | default('0')) | bool }}"
|
||||||
debug: "{{ (lookup('env','DEBUG') | default('0')) | bool }}"
|
|
||||||
|
|
||||||
# --- Uptime Kuma specifics ---
|
# --- Uptime Kuma specifics ---
|
||||||
kuma_project: "uptime-kuma" # docker compose project name
|
kuma_project: "uptime-kuma" # docker compose project name
|
||||||
@@ -25,7 +24,7 @@
|
|||||||
kuma_port: 3001
|
kuma_port: 3001
|
||||||
kuma_url: "{{ lookup('env', 'KUMA_URL') | default('', true) }}" # optional public URL
|
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_container_name: "uptime-kuma-dev"
|
||||||
kuma_force_replace_conflict: true # remove conflicting container automatically
|
kuma_force_replace_conflict: true # remove conflicting container automatically
|
||||||
kuma_remove_orphans: true # remove containers not present in the compose file
|
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 command prefix (consistent behavior and quiet hints)
|
||||||
docker_prefix: "unalias docker 2>/dev/null || true; DOCKER_CLI_HINTS=0; command docker"
|
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:
|
kuma_commands:
|
||||||
# 0) pull image (helpful cache warm-up)
|
# 0) pull image (helpful cache warm-up)
|
||||||
- "{{ docker_prefix }} pull -q {{ kuma_image }}"
|
- "{{ docker_prefix }} pull -q {{ kuma_image }}"
|
||||||
@@ -59,10 +58,43 @@
|
|||||||
update_cache: yes
|
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:
|
ansible.builtin.command:
|
||||||
argv:
|
argv:
|
||||||
- sshpass
|
- sshpass
|
||||||
@@ -79,10 +111,10 @@
|
|||||||
- "test -r {{ kuma_compose_file }}"
|
- "test -r {{ kuma_compose_file }}"
|
||||||
register: preflight_compose_exists
|
register: preflight_compose_exists
|
||||||
changed_when: false
|
changed_when: false
|
||||||
failed_when: preflight_compose_exists.rc != 0
|
failed_when: false
|
||||||
no_log: "{{ not debug }}"
|
no_log: "{{ not kuma_debug }}"
|
||||||
|
|
||||||
- name: Preflight | Validate compose file syntax
|
- name: Preflight | Validate compose file syntax (do not fail here)
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
argv:
|
argv:
|
||||||
- sshpass
|
- sshpass
|
||||||
@@ -99,10 +131,10 @@
|
|||||||
- "{{ docker_prefix }} compose -f {{ kuma_compose_file }} config -q"
|
- "{{ docker_prefix }} compose -f {{ kuma_compose_file }} config -q"
|
||||||
register: preflight_compose_valid
|
register: preflight_compose_valid
|
||||||
changed_when: false
|
changed_when: false
|
||||||
failed_when: preflight_compose_valid.rc != 0
|
failed_when: false
|
||||||
no_log: "{{ not debug }}"
|
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:
|
ansible.builtin.command:
|
||||||
argv:
|
argv:
|
||||||
- sshpass
|
- sshpass
|
||||||
@@ -120,8 +152,25 @@
|
|||||||
{{ docker_prefix }} compose -f {{ kuma_compose_file }} config --services | grep -x {{ kuma_service }}
|
{{ docker_prefix }} compose -f {{ kuma_compose_file }} config --services | grep -x {{ kuma_service }}
|
||||||
register: preflight_service_exists
|
register: preflight_service_exists
|
||||||
changed_when: false
|
changed_when: false
|
||||||
failed_when: preflight_service_exists.rc != 0
|
failed_when: false
|
||||||
no_log: "{{ not debug }}"
|
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)
|
- name: Preflight | Ensure Kuma data dir exists (host path from compose)
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
@@ -139,7 +188,7 @@
|
|||||||
- -lc
|
- -lc
|
||||||
- "mkdir -p {{ kuma_data_dir }}"
|
- "mkdir -p {{ kuma_data_dir }}"
|
||||||
changed_when: false
|
changed_when: false
|
||||||
no_log: "{{ not debug }}"
|
no_log: "{{ not kuma_debug }}"
|
||||||
|
|
||||||
- name: Preflight | Detect conflicting container by fixed name
|
- name: Preflight | Detect conflicting container by fixed name
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
@@ -159,7 +208,7 @@
|
|||||||
register: kuma_conflict
|
register: kuma_conflict
|
||||||
changed_when: false
|
changed_when: false
|
||||||
failed_when: false
|
failed_when: false
|
||||||
no_log: "{{ not debug }}"
|
no_log: "{{ not kuma_debug }}"
|
||||||
|
|
||||||
- name: Preflight | Remove conflicting container if present (and allowed)
|
- name: Preflight | Remove conflicting container if present (and allowed)
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
@@ -180,7 +229,7 @@
|
|||||||
- kuma_force_replace_conflict | bool
|
- kuma_force_replace_conflict | bool
|
||||||
- (kuma_conflict.stdout | default('') | trim) | length > 0
|
- (kuma_conflict.stdout | default('') | trim) | length > 0
|
||||||
changed_when: true
|
changed_when: true
|
||||||
no_log: "{{ not debug }}"
|
no_log: "{{ not kuma_debug }}"
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
# Update commands
|
# Update commands
|
||||||
@@ -196,7 +245,7 @@
|
|||||||
- -o
|
- -o
|
||||||
- StrictHostKeyChecking=no
|
- StrictHostKeyChecking=no
|
||||||
- -o
|
- -o
|
||||||
- ConnectTimeout=15
|
- ConnectTimeout=20
|
||||||
- "{{ vm_user }}@{{ vm_ip }}"
|
- "{{ vm_user }}@{{ vm_ip }}"
|
||||||
- bash
|
- bash
|
||||||
- -lc
|
- -lc
|
||||||
@@ -205,7 +254,7 @@
|
|||||||
register: kuma_cmds
|
register: kuma_cmds
|
||||||
changed_when: false
|
changed_when: false
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
no_log: "{{ not debug }}"
|
no_log: "{{ not kuma_debug }}"
|
||||||
|
|
||||||
- name: Show summarized outputs for each command (sanitized)
|
- name: Show summarized outputs for each command (sanitized)
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
@@ -315,4 +364,4 @@
|
|||||||
- name: Kuma | Not ready after retries
|
- name: Kuma | Not ready after retries
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: "Kuma web není dostupná ani po pokusech."
|
msg: "Kuma web není dostupná ani po pokusech."
|
||||||
when: not kuma_ready
|
when: not kuma_ready
|
||||||
Reference in New Issue
Block a user