diff --git a/app/azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js b/app/azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js index c723a8b88..769fea6ff 100644 --- a/app/azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js +++ b/app/azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js @@ -21,7 +21,7 @@ class ContainerInstanceDetailsController { this.container = await this.ContainerGroupService.containerGroup(subscriptionId, resourceGroupId, containerGroupId); this.resourceGroup = await this.ResourceGroupService.resourceGroup(subscriptionId, resourceGroupId); } catch (err) { - this.Notifications.error('Failure', err, 'Unable to retrive container instance details'); + this.Notifications.error('Failure', err, 'Unable to retrieve container instance details'); } this.state.loading = false; } diff --git a/app/docker/components/imageRegistry/por-image-registry.controller.js b/app/docker/components/imageRegistry/por-image-registry.controller.js index 5cf3fc709..055249917 100644 --- a/app/docker/components/imageRegistry/por-image-registry.controller.js +++ b/app/docker/components/imageRegistry/por-image-registry.controller.js @@ -15,12 +15,14 @@ class porImageRegistryController { this.Notifications = Notifications; this.onRegistryChange = this.onRegistryChange.bind(this); + this.onImageChange = this.onImageChange.bind(this); this.registries = []; this.images = []; this.defaultRegistry = new DockerHubViewModel(); this.$scope.$watch(() => this.model.Registry, this.onRegistryChange); + this.$scope.$watch(() => this.model.Image, this.onImageChange); } isKnownRegistry(registry) { @@ -62,6 +64,12 @@ class porImageRegistryController { } } + async onImageChange() { + if (!this.isDockerHubRegistry()) { + this.setValidity(true); + } + } + displayedRegistryURL() { return this.getRegistryURL(this.model.Registry) || 'docker.io'; } diff --git a/app/docker/components/imageRegistry/por-image-registry.html b/app/docker/components/imageRegistry/por-image-registry.html index 375582a66..6fbcd0e21 100644 --- a/app/docker/components/imageRegistry/por-image-registry.html +++ b/app/docker/components/imageRegistry/por-image-registry.html @@ -24,7 +24,7 @@ uib-typeahead="image for image in $ctrl.availableImages | filter:$viewValue | limitTo:5" ng-model="$ctrl.model.Image" name="image_name" - placeholder="e.g. myImage:myTag" + placeholder="e.g. my-image:my-tag" ng-change="$ctrl.onImageChange()" required data-cy="component-imageInput" @@ -54,7 +54,7 @@
- +
diff --git a/app/docker/views/containers/create/createContainerController.js b/app/docker/views/containers/create/createContainerController.js index 8b7c062d6..0ef8ce3d7 100644 --- a/app/docker/views/containers/create/createContainerController.js +++ b/app/docker/views/containers/create/createContainerController.js @@ -580,7 +580,7 @@ angular.module('portainer.docker').controller('CreateContainerController', [ $scope.formValues.RegistryModel = model; }) .catch(function error(err) { - Notifications.error('Failure', err, 'Unable to retrive registry'); + Notifications.error('Failure', err, 'Unable to retrieve registry'); }); } diff --git a/app/docker/views/images/build/buildimage.html b/app/docker/views/images/build/buildimage.html index 06d0dc735..96577d004 100644 --- a/app/docker/views/images/build/buildimage.html +++ b/app/docker/views/images/build/buildimage.html @@ -49,7 +49,7 @@
name - + diff --git a/app/docker/views/services/edit/serviceController.js b/app/docker/views/services/edit/serviceController.js index 2bb27171a..717ee0218 100644 --- a/app/docker/views/services/edit/serviceController.js +++ b/app/docker/views/services/edit/serviceController.js @@ -53,6 +53,7 @@ angular.module('portainer.docker').controller('ServiceController', [ 'clipboard', 'WebhookHelper', 'NetworkService', + 'RegistryService', 'endpoint', function ( $q, @@ -84,6 +85,7 @@ angular.module('portainer.docker').controller('ServiceController', [ clipboard, WebhookHelper, NetworkService, + RegistryService, endpoint ) { $scope.endpoint = endpoint; @@ -353,22 +355,22 @@ angular.module('portainer.docker').controller('ServiceController', [ $('#copyNotification').fadeOut(2000); }; - $scope.cancelChanges = function cancelChanges(service, keys) { + $scope.cancelChanges = async function cancelChanges(service, keys) { if (keys) { // clean out the keys only from the list of modified keys - keys.forEach(function (key) { + for (const key of keys) { if (key === 'Image') { - $scope.formValues.RegistryModel.Image = ''; + $scope.formValues.RegistryModel = await RegistryService.retrievePorRegistryModelFromRepository(originalService.Image, endpoint.Id); } else { var index = previousServiceValues.indexOf(key); if (index >= 0) { previousServiceValues.splice(index, 1); } } - }); + } } else { // clean out all changes - $scope.formValues.RegistryModel.Image = ''; + $scope.formValues.RegistryModel = await RegistryService.retrievePorRegistryModelFromRepository(originalService.Image, endpoint.Id); keys = Object.keys(service); previousServiceValues = []; } @@ -382,7 +384,9 @@ angular.module('portainer.docker').controller('ServiceController', [ var hasChanges = false; elements.forEach(function (key) { if (key === 'Image') { - hasChanges = hasChanges || $scope.formValues.RegistryModel.Image ? true : false; + const originalImage = service ? service.Model.Spec.TaskTemplate.ContainerSpec.Image : null; + const currentImage = ImageHelper.createImageConfigForContainer($scope.formValues.RegistryModel).fromImage; + hasChanges = hasChanges || originalImage !== currentImage; } else { hasChanges = hasChanges || previousServiceValues.indexOf(key) >= 0; } @@ -763,6 +767,11 @@ angular.module('portainer.docker').controller('ServiceController', [ $scope.state.sliderMaxCpu = 32; } + const image = $scope.service.Model.Spec.TaskTemplate.ContainerSpec.Image; + RegistryService.retrievePorRegistryModelFromRepository(image, endpoint.Id).then((model) => { + $scope.formValues.RegistryModel = model; + }); + // Default values $scope.state.addSecret = { override: false }; diff --git a/app/portainer/services/api/resourceControlService.js b/app/portainer/services/api/resourceControlService.js index 55e2d58fa..d39820e0a 100644 --- a/app/portainer/services/api/resourceControlService.js +++ b/app/portainer/services/api/resourceControlService.js @@ -103,7 +103,7 @@ angular.module('portainer.app').factory('ResourceControlService', [ } /** - * Retrive users and team details for ResourceControlViewModel + * Retrieve users and team details for ResourceControlViewModel * @param {ResourceControlViewModel} resourceControl ResourceControl view model */ function retrieveOwnershipDetails(resourceControl) {