diff --git a/src/apptask.js b/src/apptask.js index e566b6869..e53d16dc3 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -514,8 +514,9 @@ function downloadImage(manifest, callback) { // - setup the container (requires image, volumes, addons) // - setup collectd (requires container id) // restore is also handled here since restore is just an install with some oldConfig to clean up -function install(app, callback) { +function install(app, progressCallback, callback) { assert.strictEqual(typeof app, 'object'); + assert.strictEqual(typeof progressCallback, 'function'); assert.strictEqual(typeof callback, 'function'); const restoreConfig = app.restoreConfig, isRestoring = app.installationState === appdb.ISTATE_PENDING_RESTORE; @@ -526,7 +527,7 @@ function install(app, callback) { verifyManifest.bind(null, app.manifest), // teardown for re-installs - updateApp.bind(null, app, { installationProgress: '10, Cleaning up old install' }), + progressCallback.bind(null, { percent: 10, message: 'Cleaning up old install' }), unconfigureReverseProxy.bind(null, app), removeCollectdProfile.bind(null, app), removeLogrotateConfig.bind(null, app), @@ -549,30 +550,30 @@ function install(app, callback) { reserveHttpPort.bind(null, app), - updateApp.bind(null, app, { installationProgress: '20, Downloading icon' }), + progressCallback.bind(null, { percent: 20, message: 'Downloading icon' }), downloadIcon.bind(null, app), - updateApp.bind(null, app, { installationProgress: '30, Registering subdomain' }), + progressCallback.bind(null, { percent: 30, message: 'Registering subdomain' }), registerSubdomain.bind(null, app, isRestoring /* overwrite */), - updateApp.bind(null, app, { installationProgress: '35, Registering alternate domains'}), + progressCallback.bind(null, { percent: 35, message: 'Registering alternate domains' }), registerAlternateDomains.bind(null, app, isRestoring /* overwrite */), - updateApp.bind(null, app, { installationProgress: '40, Downloading image' }), + progressCallback.bind(null, { percent: 40, message: 'Downloading image' }), downloadImage.bind(null, app.manifest), - updateApp.bind(null, app, { installationProgress: '50, Creating app data directory' }), + progressCallback.bind(null, { percent: 50, message: 'Creating app data directory' }), createAppDir.bind(null, app), function restoreFromBackup(next) { if (!restoreConfig) { async.series([ - updateApp.bind(null, app, { installationProgress: '60, Setting up addons' }), + progressCallback.bind(null, { percent: 60, message: 'Setting up addons' }), addons.setupAddons.bind(null, app, app.manifest.addons), ], next); } else { async.series([ - updateApp.bind(null, app, { installationProgress: '65, Download backup and restoring addons' }), + progressCallback.bind(null, { percent: 65, message: 'Download backup and restoring addons' }), addons.setupAddons.bind(null, app, app.manifest.addons), addons.clearAddons.bind(null, app, app.manifest.addons), backups.restoreApp.bind(null, app, app.manifest.addons, restoreConfig, (progress) => updateApp(app, { installationProgress: `65, Restore - ${progress.message}` }, NOOP_CALLBACK)) @@ -580,28 +581,25 @@ function install(app, callback) { } }, - updateApp.bind(null, app, { installationProgress: '70, Creating container' }), + progressCallback.bind(null, { percent: 70, message: 'Creating container' }), createContainer.bind(null, app), - updateApp.bind(null, app, { installationProgress: '75, Setting up logrotate config' }), + progressCallback.bind(null, { percent: 75, message: 'Setting up logrotate config' }), addLogrotateConfig.bind(null, app), - updateApp.bind(null, app, { installationProgress: '80, Setting up collectd profile' }), + progressCallback.bind(null, { percent: 80, message: 'Setting up collectd profile' }), addCollectdProfile.bind(null, app), runApp.bind(null, app), - updateApp.bind(null, app, { installationProgress: '85, Waiting for DNS propagation' }), + progressCallback.bind(null, { percent: 85, message: 'Waiting for DNS propagation' }), exports._waitForDnsPropagation.bind(null, app), - updateApp.bind(null, app, { installationProgress: '95, Configuring reverse proxy' }), + progressCallback.bind(null, { percent: 95, message: 'Configuring reverse proxy' }), configureReverseProxy.bind(null, app), - // done! - function (callback) { - debugApp(app, 'installed'); - updateApp(app, { installationState: appdb.ISTATE_INSTALLED, installationProgress: '', health: null }, callback); - } + progressCallback.bind(null, { percent: 100, message: 'Done' }), + updateApp.bind(null, app, { installationState: appdb.ISTATE_INSTALLED, health: null, taskId: null }) ], function seriesDone(error) { if (error) { debugApp(app, 'error installing app: %s', error); @@ -968,22 +966,8 @@ function run(appId, progressCallback, callback) { debugApp(app, 'startTask installationState: %s runState: %s', app.installationState, app.runState); switch (app.installationState) { - case appdb.ISTATE_PENDING_UNINSTALL: return uninstall(app, callback); - case appdb.ISTATE_PENDING_CONFIGURE: return configure(app, callback); + case appdb.ISTATE_PENDING_INSTALL: return install(app, progressCallback, callback); - case appdb.ISTATE_PENDING_UPDATE: return update(app, callback); - case appdb.ISTATE_PENDING_FORCE_UPDATE: return update(app, callback); - - case appdb.ISTATE_PENDING_INSTALL: return install(app, callback); - case appdb.ISTATE_PENDING_CLONE: return install(app, callback); - case appdb.ISTATE_PENDING_RESTORE: return install(app, callback); - - case appdb.ISTATE_PENDING_BACKUP: return backup(app, callback); - case appdb.ISTATE_INSTALLED: return handleRunCommand(app, callback); - - case appdb.ISTATE_ERROR: - debugApp(app, 'Internal error. apptask launched with error status.'); - return callback(null); default: debugApp(app, 'apptask launched with invalid command'); return callback(new Error('Unknown command in apptask:' + app.installationState));