mirror of
https://github.com/portainer/portainer.git
synced 2025-07-30 18:59:41 +02:00
refactor(containers): migrate caps tab to react [EE-5215] (#10366)
This commit is contained in:
parent
9dde610da3
commit
57e04c3544
14 changed files with 324 additions and 190 deletions
|
@ -9,7 +9,7 @@ import { buildConfirmButton } from '@@/modals/utils';
|
|||
import { commandsTabUtils } from '@/react/docker/containers/CreateView/CommandsTab';
|
||||
import { volumesTabUtils } from '@/react/docker/containers/CreateView/VolumesTab';
|
||||
import { networkTabUtils } from '@/react/docker/containers/CreateView/NetworkTab';
|
||||
import { ContainerCapabilities, ContainerCapability } from '@/docker/models/containerCapabilities';
|
||||
import { capabilitiesTabUtils } from '@/react/docker/containers/CreateView/CapabilitiesTab';
|
||||
import { AccessControlFormData } from '@/portainer/components/accessControlForm/porAccessControlFormModel';
|
||||
import { ContainerDetailsViewModel } from '@/docker/models/container';
|
||||
|
||||
|
@ -85,13 +85,13 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
DnsSecondary: '',
|
||||
AccessControlData: new AccessControlFormData(),
|
||||
NodeName: null,
|
||||
capabilities: [],
|
||||
RegistryModel: new PorImageRegistryModel(),
|
||||
commands: commandsTabUtils.getDefaultViewModel(),
|
||||
envVars: envVarsTabUtils.getDefaultViewModel(),
|
||||
volumes: volumesTabUtils.getDefaultViewModel(),
|
||||
network: networkTabUtils.getDefaultViewModel(),
|
||||
resources: resourcesTabUtils.getDefaultViewModel(),
|
||||
capabilities: capabilitiesTabUtils.getDefaultViewModel(),
|
||||
};
|
||||
|
||||
$scope.state = {
|
||||
|
@ -140,6 +140,12 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
});
|
||||
};
|
||||
|
||||
$scope.onCapabilitiesChange = function (capabilities) {
|
||||
return $scope.$evalAsync(() => {
|
||||
$scope.formValues.capabilities = capabilities;
|
||||
});
|
||||
};
|
||||
|
||||
function onAlwaysPullChange(checked) {
|
||||
return $scope.$evalAsync(() => {
|
||||
$scope.formValues.alwaysPull = checked;
|
||||
|
@ -301,21 +307,6 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
config.Labels = labels;
|
||||
}
|
||||
|
||||
function prepareCapabilities(config) {
|
||||
var allowed = $scope.formValues.capabilities.filter(function (item) {
|
||||
return item.allowed === true;
|
||||
});
|
||||
var notAllowed = $scope.formValues.capabilities.filter(function (item) {
|
||||
return item.allowed === false;
|
||||
});
|
||||
|
||||
var getCapName = function (item) {
|
||||
return item.capability;
|
||||
};
|
||||
config.HostConfig.CapAdd = allowed.map(getCapName);
|
||||
config.HostConfig.CapDrop = notAllowed.map(getCapName);
|
||||
}
|
||||
|
||||
function prepareConfiguration() {
|
||||
var config = angular.copy($scope.config);
|
||||
config = commandsTabUtils.toRequest(config, $scope.formValues.commands);
|
||||
|
@ -323,11 +314,11 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
config = volumesTabUtils.toRequest(config, $scope.formValues.volumes);
|
||||
config = networkTabUtils.toRequest(config, $scope.formValues.network, $scope.fromContainer.Id);
|
||||
config = resourcesTabUtils.toRequest(config, $scope.formValues.resources);
|
||||
config = capabilitiesTabUtils.toRequest(config, $scope.formValues.capabilities);
|
||||
|
||||
prepareImageConfig(config);
|
||||
preparePortBindings(config);
|
||||
prepareLabels(config);
|
||||
prepareCapabilities(config);
|
||||
return config;
|
||||
}
|
||||
|
||||
|
@ -354,35 +345,6 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
});
|
||||
}
|
||||
|
||||
function loadFromContainerCapabilities(d) {
|
||||
if (d.HostConfig.CapAdd) {
|
||||
d.HostConfig.CapAdd.forEach(function (cap) {
|
||||
$scope.formValues.capabilities.push(new ContainerCapability(cap, true));
|
||||
});
|
||||
}
|
||||
if (d.HostConfig.CapDrop) {
|
||||
d.HostConfig.CapDrop.forEach(function (cap) {
|
||||
$scope.formValues.capabilities.push(new ContainerCapability(cap, false));
|
||||
});
|
||||
}
|
||||
|
||||
function hasCapability(item) {
|
||||
return item.capability === cap.capability;
|
||||
}
|
||||
|
||||
var capabilities = new ContainerCapabilities();
|
||||
for (var i = 0; i < capabilities.length; i++) {
|
||||
var cap = capabilities[i];
|
||||
if (!_.find($scope.formValues.capabilities, hasCapability)) {
|
||||
$scope.formValues.capabilities.push(cap);
|
||||
}
|
||||
}
|
||||
|
||||
$scope.formValues.capabilities.sort(function (a, b) {
|
||||
return a.capability < b.capability ? -1 : 1;
|
||||
});
|
||||
}
|
||||
|
||||
function loadFromContainerSpec() {
|
||||
// Get container
|
||||
Container.get({ id: $transition$.params().from })
|
||||
|
@ -408,12 +370,11 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
$scope.formValues.volumes = volumesTabUtils.toViewModel(d);
|
||||
$scope.formValues.network = networkTabUtils.toViewModel(d, $scope.availableNetworks, $scope.runningContainers);
|
||||
$scope.formValues.resources = resourcesTabUtils.toViewModel(d);
|
||||
$scope.formValues.capabilities = capabilitiesTabUtils.toViewModel(d);
|
||||
|
||||
loadFromContainerPortBindings(d);
|
||||
loadFromContainerLabels(d);
|
||||
loadFromContainerImageConfig(d);
|
||||
|
||||
loadFromContainerCapabilities(d);
|
||||
})
|
||||
.then(() => {
|
||||
$scope.state.containerIsLoaded = true;
|
||||
|
@ -456,7 +417,9 @@ angular.module('portainer.docker').controller('CreateContainerController', [
|
|||
} else {
|
||||
$scope.state.containerIsLoaded = true;
|
||||
$scope.fromContainer = {};
|
||||
$scope.formValues.capabilities = $scope.areContainerCapabilitiesEnabled ? new ContainerCapabilities() : [];
|
||||
if ($scope.areContainerCapabilitiesEnabled) {
|
||||
$scope.formValues.capabilities = capabilitiesTabUtils.getDefaultViewModel();
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue