Skip to content

Commit e19991b

Browse files
authored
Implement retry mechanism for bwdc commands (#4)
1 parent 5fd0a41 commit e19991b

1 file changed

Lines changed: 26 additions & 10 deletions

File tree

entrypoint.sh

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,41 +22,57 @@ fi
2222

2323
SYNC_INTERVAL_MIN=${SYNC_INTERVAL_MIN:-5}
2424
SYNC_INTERVAL_SEC=$((SYNC_INTERVAL_MIN * 60))
25+
MAX_BACKOFF=${MAX_BACKOFF:-3600}
26+
27+
# Retry a command with exponential backoff
28+
# Usage: retry <command> [args...]
29+
retry() {
30+
local attempt=1
31+
local backoff=5
32+
33+
until "$@"; do
34+
echo "Command failed: $*"
35+
echo "Attempt ${attempt} failed, retrying in ${backoff}s..."
36+
sleep "$backoff"
37+
attempt=$((attempt + 1))
38+
backoff=$((backoff * 2))
39+
[ "$backoff" -gt "$MAX_BACKOFF" ] && backoff=$MAX_BACKOFF
40+
done
41+
}
2542

2643
echo "Sync interval: every ${SYNC_INTERVAL_MIN} minutes."
2744

2845
if [ -n "$BW_SERVER" ]; then
2946
echo "Configuring server: ${BW_SERVER}"
30-
/usr/local/bin/bwdc config server "${BW_SERVER}"
47+
retry /usr/local/bin/bwdc config server "${BW_SERVER}"
3148
fi
3249

3350
if [ -n "$BW_DIRECTORY_TYPE" ]; then
3451
echo "Configuring directory type: ${BW_DIRECTORY_TYPE}"
35-
/usr/local/bin/bwdc config directory "${BW_DIRECTORY_TYPE}"
52+
retry /usr/local/bin/bwdc config directory "${BW_DIRECTORY_TYPE}"
3653
fi
3754

38-
# Configure directory-specific secret key based on directory type
3955
if [ -n "$BW_DIRECTORY_KEY" ]; then
4056
case "${BW_DIRECTORY_TYPE}" in
4157
0|ldap)
4258
echo "Configuring LDAP password..."
43-
/usr/local/bin/bwdc config ldap.password "${BW_DIRECTORY_KEY}"
59+
retry /usr/local/bin/bwdc config ldap.password "${BW_DIRECTORY_KEY}"
4460
;;
4561
1|azure)
4662
echo "Configuring Azure AD key..."
47-
/usr/local/bin/bwdc config azure.key "${BW_DIRECTORY_KEY}"
63+
retry /usr/local/bin/bwdc config azure.key "${BW_DIRECTORY_KEY}"
4864
;;
4965
2|gsuite)
5066
echo "Configuring GSuite key..."
51-
/usr/local/bin/bwdc config gsuite.key "${BW_DIRECTORY_KEY}"
67+
retry /usr/local/bin/bwdc config gsuite.key "${BW_DIRECTORY_KEY}"
5268
;;
5369
3|okta)
5470
echo "Configuring Okta token..."
55-
/usr/local/bin/bwdc config okta.token "${BW_DIRECTORY_KEY}"
71+
retry /usr/local/bin/bwdc config okta.token "${BW_DIRECTORY_KEY}"
5672
;;
5773
4|onelogin)
5874
echo "Configuring OneLogin secret..."
59-
/usr/local/bin/bwdc config onelogin.secret "${BW_DIRECTORY_KEY}"
75+
retry /usr/local/bin/bwdc config onelogin.secret "${BW_DIRECTORY_KEY}"
6076
;;
6177
*)
6278
echo "WARNING: BW_DIRECTORY_KEY set but BW_DIRECTORY_TYPE not recognized: ${BW_DIRECTORY_TYPE}"
@@ -66,12 +82,12 @@ if [ -n "$BW_DIRECTORY_KEY" ]; then
6682
fi
6783

6884
echo "Logging in..."
69-
/usr/local/bin/bwdc login || echo "Already logged in, continuing..."
85+
retry /usr/local/bin/bwdc login
7086

7187
echo "Starting sync loop..."
7288
while true; do
7389
echo "[$(date)] Running sync..."
74-
/usr/local/bin/bwdc sync
90+
retry /usr/local/bin/bwdc sync
7591
echo "Sleeping for ${SYNC_INTERVAL_SEC} seconds..."
7692
sleep "${SYNC_INTERVAL_SEC}"
7793
done

0 commit comments

Comments
 (0)