Use task API for app install
This commit is contained in:
@@ -514,8 +514,9 @@ function downloadImage(manifest, callback) {
|
|||||||
// - setup the container (requires image, volumes, addons)
|
// - setup the container (requires image, volumes, addons)
|
||||||
// - setup collectd (requires container id)
|
// - setup collectd (requires container id)
|
||||||
// restore is also handled here since restore is just an install with some oldConfig to clean up
|
// 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 app, 'object');
|
||||||
|
assert.strictEqual(typeof progressCallback, 'function');
|
||||||
assert.strictEqual(typeof callback, 'function');
|
assert.strictEqual(typeof callback, 'function');
|
||||||
|
|
||||||
const restoreConfig = app.restoreConfig, isRestoring = app.installationState === appdb.ISTATE_PENDING_RESTORE;
|
const restoreConfig = app.restoreConfig, isRestoring = app.installationState === appdb.ISTATE_PENDING_RESTORE;
|
||||||
@@ -526,7 +527,7 @@ function install(app, callback) {
|
|||||||
verifyManifest.bind(null, app.manifest),
|
verifyManifest.bind(null, app.manifest),
|
||||||
|
|
||||||
// teardown for re-installs
|
// 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),
|
unconfigureReverseProxy.bind(null, app),
|
||||||
removeCollectdProfile.bind(null, app),
|
removeCollectdProfile.bind(null, app),
|
||||||
removeLogrotateConfig.bind(null, app),
|
removeLogrotateConfig.bind(null, app),
|
||||||
@@ -549,30 +550,30 @@ function install(app, callback) {
|
|||||||
|
|
||||||
reserveHttpPort.bind(null, app),
|
reserveHttpPort.bind(null, app),
|
||||||
|
|
||||||
updateApp.bind(null, app, { installationProgress: '20, Downloading icon' }),
|
progressCallback.bind(null, { percent: 20, message: 'Downloading icon' }),
|
||||||
downloadIcon.bind(null, app),
|
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 */),
|
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 */),
|
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),
|
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),
|
createAppDir.bind(null, app),
|
||||||
|
|
||||||
function restoreFromBackup(next) {
|
function restoreFromBackup(next) {
|
||||||
if (!restoreConfig) {
|
if (!restoreConfig) {
|
||||||
async.series([
|
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),
|
addons.setupAddons.bind(null, app, app.manifest.addons),
|
||||||
], next);
|
], next);
|
||||||
} else {
|
} else {
|
||||||
async.series([
|
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.setupAddons.bind(null, app, app.manifest.addons),
|
||||||
addons.clearAddons.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))
|
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),
|
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),
|
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),
|
addCollectdProfile.bind(null, app),
|
||||||
|
|
||||||
runApp.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),
|
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),
|
configureReverseProxy.bind(null, app),
|
||||||
|
|
||||||
// done!
|
progressCallback.bind(null, { percent: 100, message: 'Done' }),
|
||||||
function (callback) {
|
updateApp.bind(null, app, { installationState: appdb.ISTATE_INSTALLED, health: null, taskId: null })
|
||||||
debugApp(app, 'installed');
|
|
||||||
updateApp(app, { installationState: appdb.ISTATE_INSTALLED, installationProgress: '', health: null }, callback);
|
|
||||||
}
|
|
||||||
], function seriesDone(error) {
|
], function seriesDone(error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
debugApp(app, 'error installing app: %s', 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);
|
debugApp(app, 'startTask installationState: %s runState: %s', app.installationState, app.runState);
|
||||||
|
|
||||||
switch (app.installationState) {
|
switch (app.installationState) {
|
||||||
case appdb.ISTATE_PENDING_UNINSTALL: return uninstall(app, callback);
|
case appdb.ISTATE_PENDING_INSTALL: return install(app, progressCallback, callback);
|
||||||
case appdb.ISTATE_PENDING_CONFIGURE: return configure(app, 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:
|
default:
|
||||||
debugApp(app, 'apptask launched with invalid command');
|
debugApp(app, 'apptask launched with invalid command');
|
||||||
return callback(new Error('Unknown command in apptask:' + app.installationState));
|
return callback(new Error('Unknown command in apptask:' + app.installationState));
|
||||||
|
|||||||
Reference in New Issue
Block a user