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

feat(service): duplication validation for configs and secrets EE-1974 (#6266)

feat(service): check if configs or secrets are duplicated
This commit is contained in:
Hao Zhang 2021-12-17 20:22:50 +08:00 committed by GitHub
parent c30292cedd
commit c5fe994cd2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 3 deletions

View file

@ -165,6 +165,7 @@ angular.module('portainer.docker').controller('CreateServiceController', [
$scope.removeConfig = function (index) {
$scope.formValues.Configs.splice(index, 1);
$scope.checkIfConfigDuplicated();
};
$scope.addSecret = function () {
@ -173,6 +174,7 @@ angular.module('portainer.docker').controller('CreateServiceController', [
$scope.removeSecret = function (index) {
$scope.formValues.Secrets.splice(index, 1);
$scope.checkIfSecretDuplicated();
};
$scope.addPlacementConstraint = function () {
@ -215,6 +217,36 @@ angular.module('portainer.docker').controller('CreateServiceController', [
$scope.formValues.LogDriverOpts.splice(index, 1);
};
$scope.checkIfSecretDuplicated = function () {
$scope.formValues.Secrets.$invalid = false;
[...$scope.formValues.Secrets]
.sort((a, b) => a.model.Id.localeCompare(b.model.Id))
.sort((a, b) => {
if (a.model.Id === b.model.Id) {
$scope.formValues.Secrets.$invalid = true;
$scope.formValues.Secrets.$error = 'Secret ' + a.model.Name + ' cannot be assigned multiple times.';
}
});
if (!$scope.formValues.Secrets.$invalid) {
$scope.formValues.Secrets.$error = '';
}
};
$scope.checkIfConfigDuplicated = function () {
$scope.formValues.Configs.$invalid = false;
[...$scope.formValues.Configs]
.sort((a, b) => a.model.Id.localeCompare(b.model.Id))
.sort((a, b) => {
if (a.model.Id === b.model.Id) {
$scope.formValues.Configs.$invalid = true;
$scope.formValues.Configs.$error = 'Config ' + a.model.Name + ' cannot be assigned multiple times.';
}
});
if (!$scope.formValues.Configs.$invalid) {
$scope.formValues.Configs.$error = '';
}
};
function prepareImageConfig(config, input) {
var imageConfig = ImageHelper.createImageConfigForContainer(input.RegistryModel);
config.TaskTemplate.ContainerSpec.Image = imageConfig.fromImage;
@ -511,7 +543,7 @@ angular.module('portainer.docker').controller('CreateServiceController', [
function validateForm(accessControlData, isAdmin) {
$scope.state.formValidationError = '';
var error = '';
error = FormValidator.validateAccessControl(accessControlData, isAdmin);
error = FormValidator.validateAccessControl(accessControlData, isAdmin) || $scope.formValues.Secrets.$error || $scope.formValues.Configs.$error;
if (error) {
$scope.state.formValidationError = error;