diff --git a/app/components/startContainer/startContainerController.js b/app/components/startContainer/startContainerController.js index fd2d3723e..6dc4027f8 100644 --- a/app/components/startContainer/startContainerController.js +++ b/app/components/startContainer/startContainerController.js @@ -1,6 +1,6 @@ angular.module('startContainer', ['ui.bootstrap']) -.controller('StartContainerController', ['$scope', '$state', 'Container', 'Messages', 'containernameFilter', 'errorMsgFilter', 'ViewSpinner', -function ($scope, $state, Container, Messages, containernameFilter, errorMsgFilter, ViewSpinner) { +.controller('StartContainerController', ['$scope', '$state', 'Container', 'Image', 'Messages', 'containernameFilter', 'errorMsgFilter', 'ViewSpinner', +function ($scope, $state, Container, Image, Messages, containernameFilter, errorMsgFilter, ViewSpinner) { $scope.template = 'app/components/startContainer/startcontainer.html'; Container.query({all: 1}, function (d) { @@ -52,8 +52,38 @@ function ($scope, $state, Container, Messages, containernameFilter, errorMsgFilt }); } + function createContainer(config) { + Container.create(config, function (d) { + if (d.Id) { + var reqBody = config.HostConfig || {}; + reqBody.id = d.Id; + Container.start(reqBody, function (cd) { + if (cd.id) { + ViewSpinner.stop(); + Messages.send('Container Started', d.Id); + $state.go('container', {id: d.Id}, {reload: true}); + } else { + ViewSpinner.stop(); + failedRequestHandler(cd, Messages); + Container.remove({id: d.Id}, function () { + Messages.send('Container Removed', d.Id); + }); + } + }, function (e) { + ViewSpinner.stop(); + failedRequestHandler(e, Messages); + }); + } else { + ViewSpinner.stop(); + failedRequestHandler(d, Messages); + } + }, function (e) { + ViewSpinner.stop(); + failedRequestHandler(e, Messages); + }); + } + $scope.create = function () { - // Copy the config before transforming fields to the remote API format $('#create-modal').modal('hide'); ViewSpinner.spin(); @@ -121,35 +151,26 @@ function ($scope, $state, Container, Messages, containernameFilter, errorMsgFilt rmEmptyKeys(config.HostConfig); rmEmptyKeys(config); - var ctor = Container; - var s = $scope; - Container.create(config, function (d) { - if (d.Id) { - var reqBody = config.HostConfig || {}; - reqBody.id = d.Id; - ctor.start(reqBody, function (cd) { - if (cd.id) { - ViewSpinner.stop(); - Messages.send('Container Started', d.Id); - $state.go('container', {id: d.Id}, {reload: true}); - } else { - ViewSpinner.stop(); - failedRequestHandler(cd, Messages); - ctor.remove({id: d.Id}, function () { - Messages.send('Container Removed', d.Id); - }); - } - }, function (e) { + var image = _.toLower(config.Image); + var imageNameAndTag = image.split(':'); + var imageConfig = { + fromImage: imageNameAndTag[0], + tag: imageNameAndTag[1] ? imageNameAndTag[1] : 'latest', + }; + + Image.create(imageConfig, function (data) { + var err = data.length > 0 && data[data.length - 1].hasOwnProperty('error'); + if (err) { + var detail = data[data.length - 1]; ViewSpinner.stop(); - failedRequestHandler(e, Messages); - }); - } else { - ViewSpinner.stop(); - failedRequestHandler(d, Messages); - } + Messages.error('Error', detail.error); + } else { + Messages.send("Image successfully pulled", image); + createContainer(config); + } }, function (e) { ViewSpinner.stop(); - failedRequestHandler(e, Messages); + Messages.error('Error', 'Unable to pull image ' + image); }); };