mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-01-04 04:54:10 +00:00
Cleanup unneeded images after a successful update.
This commit is contained in:
parent
4cc3092b73
commit
3975939181
@ -244,6 +244,10 @@ exports.update = update = ->
|
|||||||
Promise.all(installingPromises.concat(updatingPromises))
|
Promise.all(installingPromises.concat(updatingPromises))
|
||||||
.then ->
|
.then ->
|
||||||
failedUpdates = 0
|
failedUpdates = 0
|
||||||
|
updateDeviceInfo(status: 'Cleaning old images')
|
||||||
|
# We cleanup here as we want a point when we have a consistent apps/images state,
|
||||||
|
# rather than potentially at a point where we might clean up an image we still want.
|
||||||
|
cleanupImages()
|
||||||
.catch (err) ->
|
.catch (err) ->
|
||||||
failedUpdates++
|
failedUpdates++
|
||||||
if currentlyUpdating is 2
|
if currentlyUpdating is 2
|
||||||
@ -286,3 +290,26 @@ exports.updateDeviceInfo = updateDeviceInfo = (body) ->
|
|||||||
customOptions:
|
customOptions:
|
||||||
apikey: apiKey
|
apikey: apiKey
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cleanupImages = ->
|
||||||
|
knex('app').select()
|
||||||
|
.then (apps) ->
|
||||||
|
apps = apps.map((app) -> app.imageId + ':latest')
|
||||||
|
# Make sure not to delete the supervisor image!
|
||||||
|
apps.push(config.localImage + ':latest')
|
||||||
|
apps.push(config.remoteImage + ':latest')
|
||||||
|
|
||||||
|
docker.listImagesAsync()
|
||||||
|
.then (images) ->
|
||||||
|
Promise.all(
|
||||||
|
images.filter (image) ->
|
||||||
|
!_.any image.RepoTags, (imageId) ->
|
||||||
|
_.contains(apps, imageId)
|
||||||
|
.map (image) ->
|
||||||
|
# TODO: Remove old supervisor containers cleanly so we don't have to force remove images.
|
||||||
|
docker.getImage(image.Id).removeAsync(force: true)
|
||||||
|
.then ->
|
||||||
|
console.log('Deleted image:', image.Id, image.RepoTags)
|
||||||
|
.catch (err) ->
|
||||||
|
console.log('Error deleting image:', image.Id, image.RepoTags, err)
|
||||||
|
)
|
||||||
|
@ -8,6 +8,9 @@ module.exports = config =
|
|||||||
dockerSocket: process.env.DOCKER_SOCKET ? '/run/docker.sock'
|
dockerSocket: process.env.DOCKER_SOCKET ? '/run/docker.sock'
|
||||||
localImage: process.env.SUPERVISOR_IMAGE ? 'resin/rpi-supervisor'
|
localImage: process.env.SUPERVISOR_IMAGE ? 'resin/rpi-supervisor'
|
||||||
configMountPoint: process.env.CONFIG_MOUNT_POINT ? '/mnt/mmcblk0p1/config.json'
|
configMountPoint: process.env.CONFIG_MOUNT_POINT ? '/mnt/mmcblk0p1/config.json'
|
||||||
|
|
||||||
|
config.remoteImage = config.registryEndpoint + '/' + config.localImage
|
||||||
|
|
||||||
config.supervisorContainer =
|
config.supervisorContainer =
|
||||||
Volumes:
|
Volumes:
|
||||||
'/boot/config.json': {}
|
'/boot/config.json': {}
|
||||||
|
@ -9,7 +9,7 @@ Promise.promisifyAll(docker.getImage().__proto__)
|
|||||||
Promise.promisifyAll(docker.getContainer().__proto__)
|
Promise.promisifyAll(docker.getContainer().__proto__)
|
||||||
|
|
||||||
localImage = config.localImage
|
localImage = config.localImage
|
||||||
remoteImage = config.registryEndpoint + '/' + localImage
|
remoteImage = config.remoteImage
|
||||||
|
|
||||||
startNewSupervisor = (currentSupervisor) ->
|
startNewSupervisor = (currentSupervisor) ->
|
||||||
console.log('Creating supervisor container:', localImage)
|
console.log('Creating supervisor container:', localImage)
|
||||||
|
Loading…
Reference in New Issue
Block a user