mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-04-25 13:29:58 +00:00
If a device is already provisioned but the key exchange fails, retry it until it succeeds
Change-Type: patch Signed-off-by: Pablo Carranza Velez <pablo@resin.io>
This commit is contained in:
parent
b809e2aa02
commit
c532344dce
@ -179,13 +179,7 @@ hasDeviceApiKeySupport = (osVersion) ->
|
|||||||
console.error('Unable to determine if device has deviceApiKey support', err, err.stack)
|
console.error('Unable to determine if device has deviceApiKey support', err, err.stack)
|
||||||
false
|
false
|
||||||
|
|
||||||
bootstrapper.done = new Promise (resolve) ->
|
exchangeKeyAndUpdateConfig = ->
|
||||||
bootstrapper.doneBootstrapping = ->
|
|
||||||
bootstrapper.bootstrapped = true
|
|
||||||
resolve(userConfig)
|
|
||||||
# If we're still using an old api key we can try to exchange it for a valid device key
|
|
||||||
# This will only be the case when the supervisor/OS has been updated.
|
|
||||||
if userConfig.apiKey?
|
|
||||||
# Only do a key exchange and delete the provisioning key if we're on a Resin OS version
|
# Only do a key exchange and delete the provisioning key if we're on a Resin OS version
|
||||||
# that supports using the deviceApiKey (2.0.2 and above)
|
# that supports using the deviceApiKey (2.0.2 and above)
|
||||||
# or if we're in a non-Resin OS (which is assumed to be updated enough).
|
# or if we're in a non-Resin OS (which is assumed to be updated enough).
|
||||||
@ -209,7 +203,26 @@ bootstrapper.done = new Promise (resolve) ->
|
|||||||
utils.setConfig('apiKey', userConfig.deviceApiKey)
|
utils.setConfig('apiKey', userConfig.deviceApiKey)
|
||||||
.then ->
|
.then ->
|
||||||
writeAndSyncFile(configPath, JSON.stringify(userConfig))
|
writeAndSyncFile(configPath, JSON.stringify(userConfig))
|
||||||
# We return immediately, and eventually the API key will be exchanged and replaced.
|
|
||||||
|
exchangeKeyOrRetry = do ->
|
||||||
|
_failedExchanges = 0
|
||||||
|
return ->
|
||||||
|
exchangeKeyAndUpdateConfig()
|
||||||
|
.catch (err) ->
|
||||||
|
console.error('Error exchanging API key, will retry', err, err.stack)
|
||||||
|
delay = Math.min((2 ** _failedExchanges) * config.bootstrapRetryDelay, 24 * 60 * 60 * 1000)
|
||||||
|
_failedExchanges += 1
|
||||||
|
setTimeout(exchangeKeyOrRetry, delay)
|
||||||
|
return
|
||||||
|
|
||||||
|
bootstrapper.done = new Promise (resolve) ->
|
||||||
|
bootstrapper.doneBootstrapping = ->
|
||||||
|
bootstrapper.bootstrapped = true
|
||||||
|
resolve(userConfig)
|
||||||
|
# If we're still using an old api key we can try to exchange it for a valid device key
|
||||||
|
# This will only be the case when the supervisor/OS has been updated.
|
||||||
|
if userConfig.apiKey?
|
||||||
|
exchangeKeyOrRetry()
|
||||||
return
|
return
|
||||||
|
|
||||||
bootstrapper.bootstrapped = false
|
bootstrapper.bootstrapped = false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user