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

feat(app): limit the docker API version supported by the frontend (#11855)
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run

This commit is contained in:
LP B 2024-06-10 20:54:31 +02:00 committed by GitHub
parent 4ba16f1b04
commit 6a8e6734f3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
212 changed files with 4439 additions and 3281 deletions

View file

@ -1,76 +1,51 @@
import _ from 'lodash-es';
import { PluginViewModel } from '../models/plugin';
import { isFulfilled } from '@/portainer/helpers/promise-utils';
import { getInfo } from '@/react/docker/proxy/queries/useInfo';
import { aggregateData, getPlugins } from '@/react/docker/proxy/queries/useServicePlugins';
angular.module('portainer.docker').factory('PluginService', [
'$q',
'Plugin',
'SystemService',
function PluginServiceFactory($q, Plugin, SystemService) {
'use strict';
var service = {};
angular.module('portainer.docker').factory('PluginService', PluginServiceFactory);
service.plugins = function () {
var deferred = $q.defer();
var plugins = [];
/* @ngInject */
function PluginServiceFactory(AngularToReact) {
const { useAxios, injectEnvironmentId } = AngularToReact;
Plugin.query({})
.$promise.then(function success(data) {
for (var i = 0; i < data.length; i++) {
var plugin = new PluginViewModel(data[i]);
plugins.push(plugin);
}
})
.finally(function final() {
deferred.resolve(plugins);
});
return {
volumePlugins: useAxios(injectEnvironmentId(volumePlugins)), // volume create
networkPlugins: useAxios(injectEnvironmentId(networksPlugins)), // network create
loggingPlugins: useAxios(injectEnvironmentId(loggingPlugins)), // service create + service edit
};
}
return deferred.promise;
};
/**
* @param {EnvironmentId} environmentId Injected
* @param {boolean} systemOnly
*/
async function volumePlugins(environmentId, systemOnly) {
const { systemPluginsData, pluginsData } = await getAllPlugins(environmentId);
return aggregateData(systemPluginsData, pluginsData, systemOnly, 'Volume');
}
function servicePlugins(systemOnly, pluginType, pluginVersion) {
var deferred = $q.defer();
/**
* @param {EnvironmentId} environmentId Injected
* @param {boolean} systemOnly
*/
async function networksPlugins(environmentId, systemOnly) {
const { systemPluginsData, pluginsData } = await getAllPlugins(environmentId);
return aggregateData(systemPluginsData, pluginsData, systemOnly, 'Network');
}
$q.all({
system: SystemService.plugins(),
plugins: systemOnly ? [] : service.plugins(),
})
.then(function success(data) {
var aggregatedPlugins = [];
var systemPlugins = data.system;
var plugins = data.plugins;
/**
* @param {EnvironmentId} environmentId Injected
* @param {boolean} systemOnly
*/
async function loggingPlugins(environmentId, systemOnly) {
const { systemPluginsData, pluginsData } = await getAllPlugins(environmentId);
return aggregateData(systemPluginsData, pluginsData, systemOnly, 'Log');
}
if (systemPlugins[pluginType]) {
aggregatedPlugins = aggregatedPlugins.concat(systemPlugins[pluginType]);
}
async function getAllPlugins(environmentId) {
const [system, plugins] = await Promise.allSettled([getInfo(environmentId), getPlugins(environmentId)]);
const systemPluginsData = isFulfilled(system) ? system.value.Plugins : undefined;
const pluginsData = isFulfilled(plugins) ? plugins.value : undefined;
for (var i = 0; i < plugins.length; i++) {
var plugin = plugins[i];
if (plugin.Enabled && _.includes(plugin.Config.Interface.Types, pluginVersion)) {
aggregatedPlugins.push(plugin.Name);
}
}
deferred.resolve(aggregatedPlugins);
})
.catch(function error(err) {
deferred.reject({ msg: err.msg, err: err });
});
return deferred.promise;
}
service.volumePlugins = function (systemOnly) {
return servicePlugins(systemOnly, 'Volume', 'docker.volumedriver/1.0');
};
service.networkPlugins = function (systemOnly) {
return servicePlugins(systemOnly, 'Network', 'docker.networkdriver/1.0');
};
service.loggingPlugins = function (systemOnly) {
return servicePlugins(systemOnly, 'Log', 'docker.logdriver/1.0');
};
return service;
},
]);
return { systemPluginsData, pluginsData };
}