From 39b312b9979f71252f7f71896685268eac3d5393 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Fri, 16 May 2025 15:26:51 +0200 Subject: [PATCH] Added journalctl logging for docker up's and execute portfolio just once condition --- roles/docker-compose/Administration.md | 18 ++++++++++++++++- roles/docker-compose/handlers/main.yml | 20 ++++++++++++------- roles/docker-discourse/Administration.md | 12 +++++++++++- roles/docker-discourse/handlers/main.yml | 7 +++++-- roles/docker-portfolio/tasks/main.yml | 25 +++++++++++++++++++++--- 5 files changed, 68 insertions(+), 14 deletions(-) diff --git a/roles/docker-compose/Administration.md b/roles/docker-compose/Administration.md index 1376645b..e83ee53f 100644 --- a/roles/docker-compose/Administration.md +++ b/roles/docker-compose/Administration.md @@ -16,4 +16,20 @@ watch -n 2 "docker compose ps -a" ```bash docker inspect --format='{{json .State.Health}}' -``` \ No newline at end of file +``` + +### 🔍 Logging with `journalctl` + +All Docker Compose actions triggered by this role are logged to the system journal using `systemd-cat`. Output is simultaneously shown in the terminal and available via `journalctl`. + +To view logs for a specific application: + +```bash +journalctl -t docker-compose- -f +``` + +Replace `` with the actual project name (e.g. `discourse`, `nextcloud`, etc.). + +This enables persistent and searchable logs for all container setups and rebuilds. + + diff --git a/roles/docker-compose/handlers/main.yml b/roles/docker-compose/handlers/main.yml index 6ee5cebe..f005d902 100644 --- a/roles/docker-compose/handlers/main.yml +++ b/roles/docker-compose/handlers/main.yml @@ -4,15 +4,18 @@ # https://github.com/ansible/ansible/issues/10244 #- name: shut down docker compose project # command: -# cmd: docker-compose -p "{{application_id}}" down +# cmd: docker-compose -p "{{ application_id }}" down # listen: docker compose project setup # when: mode_reset | bool # default setup for docker compose files - name: docker compose project setup - command: - cmd: "docker-compose -p {{application_id}} up -d --force-recreate --remove-orphans" - chdir: "{{docker_compose.directories.instance}}" + shell: > + docker-compose -p {{ application_id }} up -d --force-recreate --remove-orphans + 2>&1 | tee >(systemd-cat -t docker-compose-{{ application_id }}) + args: + chdir: "{{ docker_compose.directories.instance }}" + executable: /bin/bash environment: COMPOSE_HTTP_TIMEOUT: 600 DOCKER_CLIENT_TIMEOUT: 600 @@ -21,9 +24,12 @@ # it's necessary to rebuild when a build in the docker compose files is defined # for performance reasons it's not recommended to use this if there is no build tag specified - name: docker compose project build and setup - command: - cmd: "docker-compose -p {{application_id}} up -d --force-recreate --build --remove-orphans" - chdir: "{{docker_compose.directories.instance}}" + shell: > + docker-compose -p {{ application_id }} up -d --force-recreate --build --remove-orphans + 2>&1 | tee >(systemd-cat -t docker-compose-{{ application_id }}) + args: + chdir: "{{ docker_compose.directories.instance }}" + executable: /bin/bash environment: COMPOSE_HTTP_TIMEOUT: 600 DOCKER_CLIENT_TIMEOUT: 600 diff --git a/roles/docker-discourse/Administration.md b/roles/docker-discourse/Administration.md index 1a26d247..ffdb9df5 100644 --- a/roles/docker-discourse/Administration.md +++ b/roles/docker-discourse/Administration.md @@ -14,4 +14,14 @@ To reinitialize the container execute: ```bash docker network connect discourse_default central-postgres && /opt/docker/discourse/services/discourse_repository/launcher rebuild discourse_application -``` \ No newline at end of file +``` + +### 🔍 Logging with `journalctl` + +All build actions triggered by this role are logged to the system journal using `systemd-cat`. Output is simultaneously shown in the terminal and available via `journalctl`. + +To view logs for a specific application: + +```bash +journalctl -t rebuild-discourse -f +``` diff --git a/roles/docker-discourse/handlers/main.yml b/roles/docker-discourse/handlers/main.yml index 1b2edd24..a8e61e22 100644 --- a/roles/docker-discourse/handlers/main.yml +++ b/roles/docker-discourse/handlers/main.yml @@ -17,7 +17,10 @@ listen: recreate discourse - name: rebuild discourse - command: - cmd: "./launcher rebuild {{applications[application_id].container}}" + shell: > + ./launcher rebuild {{applications[application_id].container}} + 2>&1 | tee >(systemd-cat -t rebuild-{{ application_id }}) + args: + executable: /bin/bash chdir: "{{docker_repository_directory }}" listen: recreate discourse \ No newline at end of file diff --git a/roles/docker-portfolio/tasks/main.yml b/roles/docker-portfolio/tasks/main.yml index f3b5852c..5941ebd4 100644 --- a/roles/docker-portfolio/tasks/main.yml +++ b/roles/docker-portfolio/tasks/main.yml @@ -2,6 +2,7 @@ - name: "include docker-compose role" include_role: name: docker-compose + when: run_once_docker_portfolio is not defined - name: "include role nginx-domain-setup for {{application_id}}" include_role: @@ -9,10 +10,12 @@ vars: domain: "{{ domains[application_id] }}" http_port: "{{ ports.localhost.http[application_id] }}" + when: run_once_docker_portfolio is not defined - name: "include role docker-repository-setup for {{application_id}}" include_role: name: docker-repository-setup + when: run_once_docker_portfolio is not defined - name: "Check if host-specific config.yaml exists in {{ config_inventory_path }}" stat: @@ -20,18 +23,22 @@ delegate_to: localhost become: false register: config_file + when: run_once_docker_portfolio is not defined - name: Load menu categories include_vars: file: "menu_categories.yml" + when: run_once_docker_portfolio is not defined - name: Load docker cards set_fact: portfolio_cards: "{{ lookup('docker_cards', 'roles') }}" + when: run_once_docker_portfolio is not defined - name: Group docker cards set_fact: portfolio_menu_data: "{{ lookup('docker_cards_grouped', portfolio_cards, portfolio_menu_categories) }}" + when: run_once_docker_portfolio is not defined - name: Debug portfolio data debug: @@ -39,24 +46,36 @@ portfolio_cards: "{{ portfolio_cards }}" portfolio_menu_categories: "{{ portfolio_menu_categories}}" portfolio_menu_data: "{{ portfolio_menu_data }}" - when: enable_debug | bool + when: + - enable_debug | bool + - run_once_docker_portfolio is not defined - name: Copy host-specific config.yaml if it exists template: src: "{{ config_inventory_path }}" dest: "{{docker_repository_path}}/app/config.yaml" notify: docker compose project setup - when: config_file.stat.exists + when: + - config_file.stat.exists + - run_once_docker_portfolio is not defined - name: Copy default config.yaml from the role template if host-specific file does not exist template: src: "config.yaml.j2" dest: "{{docker_repository_path}}/app/config.yaml" notify: docker compose project setup - when: not config_file.stat.exists + when: + - not config_file.stat.exists + - run_once_docker_portfolio is not defined - name: add docker-compose.yml template: src: docker-compose.yml.j2 dest: "{docker_compose.directories.instance}}docker-compose.yml" notify: docker compose project setup + when: run_once_docker_portfolio is not defined + +- name: run the portfolio tasks once + set_fact: + run_once_docker_portfolio: true + when: run_once_docker_portfolio is not defined \ No newline at end of file