2222
2323SYNC_INTERVAL_MIN=${SYNC_INTERVAL_MIN:- 5}
2424SYNC_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
2643echo " Sync interval: every ${SYNC_INTERVAL_MIN} minutes."
2744
2845if [ -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} "
3148fi
3249
3350if [ -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} "
3653fi
3754
38- # Configure directory-specific secret key based on directory type
3955if [ -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
6682fi
6783
6884echo " Logging in..."
69- /usr/local/bin/bwdc login || echo " Already logged in, continuing... "
85+ retry /usr/local/bin/bwdc login
7086
7187echo " Starting sync loop..."
7288while 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} "
7793done
0 commit comments