import { PorImageRegistryModel } from 'Docker/models/porImageRegistry'; angular.module('portainer.docker').controller('ImportImageController', [ '$scope', '$state', 'ImageService', 'Notifications', 'HttpRequestHelper', 'Authentication', 'ImageHelper', 'endpoint', function ($scope, $state, ImageService, Notifications, HttpRequestHelper, Authentication, ImageHelper, endpoint) { $scope.state = { actionInProgress: false, }; $scope.endpoint = endpoint; $scope.isAdmin = Authentication.isAdmin(); $scope.formValues = { UploadFile: null, NodeName: null, RegistryModel: new PorImageRegistryModel(), }; $scope.setPullImageValidity = setPullImageValidity; function setPullImageValidity(validity) { $scope.state.pullImageValidity = validity; } async function tagImage(id) { const registryModel = $scope.formValues.RegistryModel; if (registryModel.Image) { const image = ImageHelper.createImageConfigForContainer(registryModel); try { await ImageService.tagImage(id, image.fromImage); } catch (err) { Notifications.error('Failure', err, 'Unable to tag image'); } } } $scope.uploadImage = async function () { $scope.state.actionInProgress = true; var nodeName = $scope.formValues.NodeName; HttpRequestHelper.setPortainerAgentTargetHeader(nodeName); var file = $scope.formValues.UploadFile; try { const { data } = await ImageService.uploadImage(file); if (data.error) { Notifications.error('Failure', data.error, 'Unable to upload image'); } else if (data.stream) { var regex = /Loaded.*?: (.*?)\n$/g; var imageIds = regex.exec(data.stream); if (imageIds && imageIds.length == 2) { await tagImage(imageIds[1]); $state.go('docker.images.image', { id: imageIds[1] }, { reload: true }); } Notifications.success('Success', 'Images successfully uploaded'); } else { Notifications.success('Success', 'The uploaded tar file contained multiple images. The provided tag therefore has been ignored.'); } } catch (err) { Notifications.error('Failure', err, 'Unable to upload image'); } finally { $scope.state.actionInProgress = false; } }; }, ]);