From 67a6776fba9e313df32fcc6cc8cc8a9a6d5a3d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Tue, 13 Feb 2024 11:55:12 +0100 Subject: [PATCH] Add ability to ignore failures in execution of container CTL_ON_* commands This will allow to use register in CTL_ON_CREATE and not abort if used with existing data that have account already registered. --- .github/container/ejabberdctl.template | 15 ++++++++++----- CONTAINER.md | 11 ++++++++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/container/ejabberdctl.template b/.github/container/ejabberdctl.template index 22e4177b1..e7e112ffa 100755 --- a/.github/container/ejabberdctl.template +++ b/.github/container/ejabberdctl.template @@ -331,13 +331,18 @@ post_waiter_loop() LIST=$@ HEAD=${LIST%% ; *} TAIL=${LIST#* ; } - echo ":> ejabberdctl $HEAD" - $0 $HEAD + HEAD2=${HEAD#\! *} + echo ":> ejabberdctl $HEAD2" + $0 $HEAD2 ctlstatus=$? if [ $ctlstatus -ne 0 ] ; then - echo ":> FAILURE in command '$HEAD' !!! Stopping ejabberd..." - $0 halt > /dev/null - exit $ctlstatus + if [ "$HEAD" != "$HEAD2" ] ; then + echo ":> FAILURE in command '$HEAD2' !!! Ignoring result" + else + echo ":> FAILURE in command '$HEAD' !!! Stopping ejabberd..." + $0 halt > /dev/null + exit $ctlstatus + fi fi [ "$HEAD" = "$TAIL" ] || post_waiter_loop $TAIL } diff --git a/CONTAINER.md b/CONTAINER.md index 7c7c233ef..06d01dbcc 100644 --- a/CONTAINER.md +++ b/CONTAINER.md @@ -221,10 +221,13 @@ and reads `CTL_ON_START` every time the container is started. Those variables can contain one ejabberdctl command, or several commands separated with the blankspace and `;` characters. +By default failure of any of commands executed that way would +abort start, this can be disabled by prefixing commands with `!` + Example usage (or check the [full example](#customized-example)): ```yaml environment: - - CTL_ON_CREATE=register admin localhost asd + - CTL_ON_CREATE=\! register admin localhost asd - CTL_ON_START=stats registeredusers ; check_password admin localhost asd ; status @@ -411,7 +414,9 @@ In this example, the main container is created first. Once it is fully started and healthy, a second container is created, and once ejabberd is started in it, it joins the first one. -An account is registered in the first node when created, +An account is registered in the first node when created (and +we ignore errors that can happen when doing that - for example +whenn account already exists), and it should exist in the second node after join. Notice that in this example the main container does not have access @@ -428,7 +433,7 @@ services: environment: - ERLANG_NODE_ARG=ejabberd@main - ERLANG_COOKIE=dummycookie123 - - CTL_ON_CREATE=register admin localhost asd + - CTL_ON_CREATE=\! register admin localhost asd replica: image: ghcr.io/processone/ejabberd