1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-05 22:05:23 +02:00

feat(docker/images): show used tag correctly [EE-5396] (#10305)

This commit is contained in:
Chaim Lev-Ari 2023-10-03 15:55:23 +03:00 committed by GitHub
parent b895e88075
commit 9bf2957ea7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 383 additions and 287 deletions

View file

@ -14,12 +14,17 @@ function ImageHelperFactory() {
return tag.match(/^(?![\.\-])([a-zA-Z0-9\_\.\-])+$/g);
}
/**
*
* @param {import('@/react/docker/images/queries/useImages').ImagesListResponse[]} images
* @returns {{names: string[]}}}
*/
function getImagesNamesForDownload(images) {
var names = images.map(function (image) {
return image.RepoTags[0] !== '<none>:<none>' ? image.RepoTags[0] : image.Id;
return image.tags[0] !== '<none>:<none>' ? image.tags[0] : image.id;
});
return {
names: names,
names,
};
}

View file

@ -74,13 +74,10 @@ const ngModule = angular
.component(
'dockerImagesDatatable',
r2a(withUIRouter(withCurrentUser(ImagesDatatable)), [
'dataset',
'environment',
'onRemove',
'isExportInProgress',
'isHostColumnVisible',
'onDownload',
'onRefresh',
'onRemove',
])
)

View file

@ -46,15 +46,9 @@
</div>
<docker-images-datatable
ng-if="images"
dataset="images"
is-host-column-visible="applicationState.endpoint.mode.agentProxy && applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE'"
on-download="(downloadAction)"
on-remove="(confirmRemovalAction)"
on-refresh="(getImages)"
is-export-in-progress="state.exportInProgress"
storage-key="images"
environment="endpoint"
settings-store="settingsStore"
containers="containers"
></docker-images-datatable>

View file

@ -71,6 +71,11 @@ angular.module('portainer.docker').controller('ImagesController', [
});
}
/**
*
* @param {Array<import('@/react/docker/images/queries/useImages').ImagesListResponse>} selectedItems
* @param {boolean} force
*/
$scope.confirmRemovalAction = async function (selectedItems, force) {
const confirmed = await (force ? confirmImageForceRemoval() : confirmRegularRemove());
@ -81,11 +86,15 @@ angular.module('portainer.docker').controller('ImagesController', [
$scope.removeAction(selectedItems, force);
};
/**
*
* @param {Array<import('@/react/docker/images/queries/useImages').ImagesListResponse>} selectedItems
*/
function isAuthorizedToDownload(selectedItems) {
for (var i = 0; i < selectedItems.length; i++) {
var image = selectedItems[i];
var untagged = _.find(image.RepoTags, function (item) {
var untagged = _.find(image.tags, function (item) {
return item.indexOf('<none>') > -1;
});
@ -103,8 +112,12 @@ angular.module('portainer.docker').controller('ImagesController', [
return true;
}
/**
*
* @param {Array<import('@/react/docker/images/queries/useImages').ImagesListResponse>} images
*/
function exportImages(images) {
HttpRequestHelper.setPortainerAgentTargetHeader(images[0].NodeName);
HttpRequestHelper.setPortainerAgentTargetHeader(images[0].nodeName);
$scope.state.exportInProgress = true;
ImageService.downloadImages(images)
.then(function success(data) {
@ -120,6 +133,10 @@ angular.module('portainer.docker').controller('ImagesController', [
});
}
/**
*
* @param {Array<import('@/react/docker/images/queries/useImages').ImagesListResponse>} selectedItems
*/
$scope.downloadAction = function (selectedItems) {
if (!isAuthorizedToDownload(selectedItems)) {
return;
@ -133,15 +150,20 @@ angular.module('portainer.docker').controller('ImagesController', [
});
};
$scope.removeAction = function (selectedItems, force) {
$scope.removeAction = removeAction;
/**
*
* @param {Array<import('@/react/docker/images/queries/useImages').ImagesListResponse>} selectedItems
* @param {boolean} force
*/
function removeAction(selectedItems, force) {
var actionCount = selectedItems.length;
angular.forEach(selectedItems, function (image) {
HttpRequestHelper.setPortainerAgentTargetHeader(image.NodeName);
ImageService.deleteImage(image.Id, force)
HttpRequestHelper.setPortainerAgentTargetHeader(image.nodeName);
ImageService.deleteImage(image.id, force)
.then(function success() {
Notifications.success('Image successfully removed', image.Id);
var index = $scope.images.indexOf(image);
$scope.images.splice(index, 1);
Notifications.success('Image successfully removed', image.id);
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to remove image');
@ -153,29 +175,11 @@ angular.module('portainer.docker').controller('ImagesController', [
}
});
});
};
$scope.getImages = getImages;
function getImages() {
ImageService.images(true)
.then(function success(data) {
$scope.images = data;
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to retrieve images');
$scope.images = [];
});
}
$scope.setPullImageValidity = setPullImageValidity;
function setPullImageValidity(validity) {
$scope.state.pullRateValid = validity;
}
function initView() {
getImages();
}
initView();
},
]);