1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 07:49:41 +02:00

fix(container-details): change order of container recreation

This commit is contained in:
Chaim Lev-Ari 2018-08-13 20:13:43 +01:00 committed by Anthony Lapenna
parent 1233cb7f08
commit f3dc67a852

View file

@ -192,40 +192,109 @@ function ($q, $scope, $state, $transition$, $filter, Commit, ContainerHelper, Co
var container = $scope.container; var container = $scope.container;
var config = ContainerHelper.configFromContainer(container.Model); var config = ContainerHelper.configFromContainer(container.Model);
$scope.state.recreateContainerInProgress = true; $scope.state.recreateContainerInProgress = true;
ContainerService.remove(container, true) var isRunning = container.State.Running;
.then(function success() {
return RegistryService.retrieveRegistryFromRepository(container.Config.Image); return stopContainerIfNeeded()
}) .then(renameContainer)
.then(function success(data) { .then(pullImageIfNeeded)
return $q.when(!pullImage || ImageService.pullImage(container.Config.Image, data, true)); .then(setMainNetworkAndCreateContainer)
}) .then(connectContainerToOtherNetworks)
.then(function success() { .then(startContainerIfNeeded)
return ContainerService.createAndStartContainer(config); .then(createResourceControlIfNeeded)
}) .then(deleteOldContainer)
.then(function success(data) { .then(notifyAndChangeView)
if (!container.ResourceControl) { .catch(notifyOnError);
return true;
} else { function stopContainerIfNeeded() {
var containerIdentifier = data.Id; if (!isRunning) {
var resourceControl = container.ResourceControl; return $q.when();
var users = resourceControl.UserAccesses.map(function(u) {
return u.UserId;
});
var teams = resourceControl.TeamAccesses.map(function(t) {
return t.TeamId;
});
return ResourceControlService.createResourceControl(resourceControl.AdministratorsOnly,
users, teams, containerIdentifier, 'container', []);
} }
}) return ContainerService.stopContainer(container.Id);
.then(function success(data) { }
function renameContainer() {
return ContainerService.renameContainer(container.Id, container.Name + '-old');
}
function pullImageIfNeeded() {
if (!pullImage) {
return $q.when();
}
return getRegistry().then(function pullImage(containerRegistery) {
return ImageService.pullImage(container.Config.Image, containerRegistery, true);
});
}
function getRegistry() {
return RegistryService.retrieveRegistryFromRepository(container.Config.Image);
}
function setMainNetworkAndCreateContainer() {
var networks = config.NetworkingConfig.EndpointsConfig;
var networksNames = Object.keys(networks);
if (networksNames.length > 1) {
config.NetworkingConfig.EndpointsConfig = {};
config.NetworkingConfig.EndpointsConfig[networksNames[0]] = networks[0];
}
return $q.all([ContainerService.createContainer(config), networks]);
}
function connectContainerToOtherNetworks(createContainerData) {
var newContainer = createContainerData[0];
var networks = createContainerData[1];
var networksNames = Object.keys(networks);
var connectionPromises = networksNames.map(function connectToNetwork(name) {
NetworkService.connectContainer(name, newContainer.Id);
});
return $q.all(connectionPromises)
.then(function onConnectToNetworkSuccess() {
return newContainer;
});
}
function deleteOldContainer(newContainer) {
return ContainerService.remove(container, true).then(
function onRemoveSuccess() {
return newContainer;
}
);
}
function startContainerIfNeeded(newContainer) {
if (!isRunning) {
return $q.when(newContainer);
}
return ContainerService.startContainer(newContainer.Id).then(
function onStartSuccess() {
return newContainer;
}
);
}
function createResourceControlIfNeeded(newContainer) {
if (!container.ResourceControl) {
return $q.when();
}
var containerIdentifier = newContainer.Id;
var resourceControl = container.ResourceControl;
var users = resourceControl.UserAccesses.map(function(u) {
return u.UserId;
});
var teams = resourceControl.TeamAccesses.map(function(t) {
return t.TeamId;
});
return ResourceControlService.createResourceControl(resourceControl.AdministratorsOnly, users, teams, containerIdentifier, 'container', []);
}
function notifyAndChangeView() {
Notifications.success('Container successfully re-created'); Notifications.success('Container successfully re-created');
$state.go('docker.containers', {}, {reload: true}); $state.go('docker.containers', {}, { reload: true });
}) }
.catch(function error(err) {
function notifyOnError(err) {
Notifications.error('Failure', err, 'Unable to re-create container'); Notifications.error('Failure', err, 'Unable to re-create container');
$scope.state.recreateContainerInProgress = false; $scope.state.recreateContainerInProgress = false;
}); }
} }
$scope.recreate = function() { $scope.recreate = function() {