mirror of
https://github.com/portainer/portainer.git
synced 2025-07-21 22:39:41 +02:00
* feat(app): rework private registries and support private registries in kubernetes [EE-30] feat(api): backport private registries backend changes (#5072) * feat(api/bolt): backport bolt changes * feat(api/exec): backport exec changes * feat(api/http): backport http/handler/dockerhub changes * feat(api/http): backport http/handler/endpoints changes * feat(api/http): backport http/handler/registries changes * feat(api/http): backport http/handler/stacks changes * feat(api/http): backport http/handler changes * feat(api/http): backport http/proxy/factory/azure changes * feat(api/http): backport http/proxy/factory/docker changes * feat(api/http): backport http/proxy/factory/utils changes * feat(api/http): backport http/proxy/factory/kubernetes changes * feat(api/http): backport http/proxy/factory changes * feat(api/http): backport http/security changes * feat(api/http): backport http changes * feat(api/internal): backport internal changes * feat(api): backport api changes * feat(api/kubernetes): backport kubernetes changes * fix(api/http): changes on backend following backport feat(app): backport private registries frontend changes (#5056) * feat(app/docker): backport docker/components changes * feat(app/docker): backport docker/helpers changes * feat(app/docker): backport docker/views/container changes * feat(app/docker): backport docker/views/images changes * feat(app/docker): backport docker/views/registries changes * feat(app/docker): backport docker/views/services changes * feat(app/docker): backport docker changes * feat(app/kubernetes): backport kubernetes/components changes * feat(app/kubernetes): backport kubernetes/converters changes * feat(app/kubernetes): backport kubernetes/models changes * feat(app/kubernetes): backport kubernetes/registries changes * feat(app/kubernetes): backport kubernetes/services changes * feat(app/kubernetes): backport kubernetes/views/applications changes * feat(app/kubernetes): backport kubernetes/views/configurations changes * feat(app/kubernetes): backport kubernetes/views/configure changes * feat(app/kubernetes): backport kubernetes/views/resource-pools changes * feat(app/kubernetes): backport kubernetes/views changes * feat(app/portainer): backport portainer/components/accessManagement changes * feat(app/portainer): backport portainer/components/datatables changes * feat(app/portainer): backport portainer/components/forms changes * feat(app/portainer): backport portainer/components/registry-details changes * feat(app/portainer): backport portainer/models changes * feat(app/portainer): backport portainer/rest changes * feat(app/portainer): backport portainer/services changes * feat(app/portainer): backport portainer/views changes * feat(app/portainer): backport portainer changes * feat(app): backport app changes * config(project): gitignore + jsconfig changes gitignore all files under api/cmd/portainer but main.go and enable Code Editor autocomplete on import ... from '@/...' fix(app): fix pull rate limit checker fix(app/registries): sidebar menus and registry accesses users filtering fix(api): add missing kube client factory fix(kube): fetch dockerhub pull limits (#5133) fix(app): pre review fixes (#5142) * fix(app/registries): remove checkbox for endpointRegistries view * fix(endpoints): allow access to default namespace * fix(docker): fetch pull limits * fix(kube/ns): show selected registries for non admin Co-authored-by: Chaim Lev-Ari <chiptus@gmail.com> chore(webpack): ignore missing sourcemaps fix(registries): fetch registry config from url feat(kube/registries): ignore not found when deleting secret feat(db): move migration to db 31 fix(registries): fix bugs in PR EE-869 (#5169) * fix(registries): hide role * fix(endpoints): set empty access policy to edge endpoint * fix(registry): remove double arguments * fix(admin): ignore warning * feat(kube/configurations): tag registry secrets (#5157) * feat(kube/configurations): tag registry secrets * feat(kube/secrets): show registry secrets for admins * fix(registries): move dockerhub to beginning * refactor(registries): use endpoint scoped registries feat(registries): filter by namespace if supplied feat(access-managment): filter users for registry (#5191) * refactor(access-manage): move users selector to component * feat(access-managment): filter users for registry refactor(registries): sync code with CE (#5200) * refactor(registry): add inspect handler under endpoints * refactor(endpoint): sync endpoint_registries_list * refactor(endpoints): sync registry_access * fix(db): rename migration functions * fix(registries): show accesses for admin * fix(kube): set token on transport * refactor(kube): move secret help to bottom * fix(kuberentes): remove shouldLog parameter * style(auth): add description of security.IsAdmin * feat(security): allow admin access to registry * feat(edge): connect to edge endpoint when creating client * style(portainer): change deprecation version * refactor(sidebar): hide manage * refactor(containers): revert changes * style(container): remove whitespace * fix(endpoint): add handler to registy on endpointService * refactor(image): use endpointService.registries * fix(kueb/namespaces): rename resource pool to namespace * fix(kube/namespace): move selected registries * fix(api/registries): hide accesses on registry creation Co-authored-by: LP B <xAt0mZ@users.noreply.github.com> refactor(api): remove code duplication after rebase fix(app/registries): replace last registry api usage by endpoint registry api fix(api/endpoints): update registry access policies on endpoint deletion (#5226) [EE-1027] fix(db): update db version * fix(dockerhub): fetch rate limits * fix(registry/tests): supply restricred context * fix(registries): show proget registry only when selected * fix(registry): create dockerhub registry * feat(db): move migrations to db 32 Co-authored-by: Chaim Lev-Ari <chiptus@gmail.com>
325 lines
8 KiB
JavaScript
325 lines
8 KiB
JavaScript
import registriesModule from './registries';
|
|
|
|
angular.module('portainer.kubernetes', ['portainer.app', registriesModule]).config([
|
|
'$stateRegistryProvider',
|
|
function ($stateRegistryProvider) {
|
|
'use strict';
|
|
|
|
const kubernetes = {
|
|
name: 'kubernetes',
|
|
url: '/kubernetes',
|
|
parent: 'endpoint',
|
|
abstract: true,
|
|
|
|
onEnter: /* @ngInject */ function onEnter($async, $state, endpoint, EndpointProvider, KubernetesHealthService, Notifications, StateManager) {
|
|
return $async(async () => {
|
|
if (![5, 6, 7].includes(endpoint.Type)) {
|
|
$state.go('portainer.home');
|
|
return;
|
|
}
|
|
try {
|
|
if (endpoint.Type === 7) {
|
|
//edge
|
|
try {
|
|
await KubernetesHealthService.ping(endpoint.Id);
|
|
endpoint.Status = 1;
|
|
} catch (e) {
|
|
endpoint.Status = 2;
|
|
}
|
|
}
|
|
|
|
EndpointProvider.setEndpointID(endpoint.Id);
|
|
await StateManager.updateEndpointState(endpoint, []);
|
|
|
|
if (endpoint.Type === 7 && endpoint.Status === 2) {
|
|
throw new Error('Unable to contact Edge agent, please ensure that the agent is properly running on the remote environment.');
|
|
}
|
|
} catch (e) {
|
|
Notifications.error('Failed loading endpoint', e);
|
|
$state.go('portainer.home', {}, { reload: true });
|
|
}
|
|
});
|
|
},
|
|
};
|
|
|
|
const applications = {
|
|
name: 'kubernetes.applications',
|
|
url: '/applications',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesApplicationsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const applicationCreation = {
|
|
name: 'kubernetes.applications.new',
|
|
url: '/new',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesCreateApplicationView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const application = {
|
|
name: 'kubernetes.applications.application',
|
|
url: '/:namespace/:name',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesApplicationView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const applicationEdit = {
|
|
name: 'kubernetes.applications.application.edit',
|
|
url: '/edit',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesCreateApplicationView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const applicationConsole = {
|
|
name: 'kubernetes.applications.application.console',
|
|
url: '/:pod/:container/console',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesApplicationConsoleView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const applicationLogs = {
|
|
name: 'kubernetes.applications.application.logs',
|
|
url: '/:pod/:container/logs',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesApplicationLogsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const applicationStats = {
|
|
name: 'kubernetes.applications.application.stats',
|
|
url: '/:pod/:container/stats',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesApplicationStatsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const stacks = {
|
|
name: 'kubernetes.stacks',
|
|
url: '/stacks',
|
|
abstract: true,
|
|
};
|
|
|
|
const stack = {
|
|
name: 'kubernetes.stacks.stack',
|
|
url: '/:namespace/:name',
|
|
abstract: true,
|
|
};
|
|
|
|
const stackLogs = {
|
|
name: 'kubernetes.stacks.stack.logs',
|
|
url: '/logs',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesStackLogsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const configurations = {
|
|
name: 'kubernetes.configurations',
|
|
url: '/configurations',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesConfigurationsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const configurationCreation = {
|
|
name: 'kubernetes.configurations.new',
|
|
url: '/new',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesCreateConfigurationView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const configuration = {
|
|
name: 'kubernetes.configurations.configuration',
|
|
url: '/:namespace/:name',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesConfigurationView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const cluster = {
|
|
name: 'kubernetes.cluster',
|
|
url: '/cluster',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesClusterView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const node = {
|
|
name: 'kubernetes.cluster.node',
|
|
url: '/:name',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesNodeView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const nodeStats = {
|
|
name: 'kubernetes.cluster.node.stats',
|
|
url: '/stats',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesNodeStatsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const dashboard = {
|
|
name: 'kubernetes.dashboard',
|
|
url: '/dashboard',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesDashboardView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const deploy = {
|
|
name: 'kubernetes.deploy',
|
|
url: '/deploy',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesDeployView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const resourcePools = {
|
|
name: 'kubernetes.resourcePools',
|
|
url: '/pools',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesResourcePoolsView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const resourcePoolCreation = {
|
|
name: 'kubernetes.resourcePools.new',
|
|
url: '/new',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesCreateResourcePoolView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const resourcePool = {
|
|
name: 'kubernetes.resourcePools.resourcePool',
|
|
url: '/:id',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesResourcePoolView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const resourcePoolAccess = {
|
|
name: 'kubernetes.resourcePools.resourcePool.access',
|
|
url: '/access',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesResourcePoolAccessView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const volumes = {
|
|
name: 'kubernetes.volumes',
|
|
url: '/volumes',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesVolumesView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const volume = {
|
|
name: 'kubernetes.volumes.volume',
|
|
url: '/:namespace/:name',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesVolumeView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const registries = {
|
|
name: 'kubernetes.registries',
|
|
url: '/registries',
|
|
views: {
|
|
'content@': {
|
|
component: 'endpointRegistriesView',
|
|
},
|
|
},
|
|
};
|
|
|
|
const registriesAccess = {
|
|
name: 'kubernetes.registries.access',
|
|
url: '/:id/access',
|
|
views: {
|
|
'content@': {
|
|
component: 'kubernetesRegistryAccessView',
|
|
},
|
|
},
|
|
};
|
|
|
|
$stateRegistryProvider.register(kubernetes);
|
|
$stateRegistryProvider.register(applications);
|
|
$stateRegistryProvider.register(applicationCreation);
|
|
$stateRegistryProvider.register(application);
|
|
$stateRegistryProvider.register(applicationEdit);
|
|
$stateRegistryProvider.register(applicationConsole);
|
|
$stateRegistryProvider.register(applicationLogs);
|
|
$stateRegistryProvider.register(applicationStats);
|
|
$stateRegistryProvider.register(stacks);
|
|
$stateRegistryProvider.register(stack);
|
|
$stateRegistryProvider.register(stackLogs);
|
|
$stateRegistryProvider.register(configurations);
|
|
$stateRegistryProvider.register(configurationCreation);
|
|
$stateRegistryProvider.register(configuration);
|
|
$stateRegistryProvider.register(cluster);
|
|
$stateRegistryProvider.register(dashboard);
|
|
$stateRegistryProvider.register(deploy);
|
|
$stateRegistryProvider.register(node);
|
|
$stateRegistryProvider.register(nodeStats);
|
|
$stateRegistryProvider.register(resourcePools);
|
|
$stateRegistryProvider.register(resourcePoolCreation);
|
|
$stateRegistryProvider.register(resourcePool);
|
|
$stateRegistryProvider.register(resourcePoolAccess);
|
|
$stateRegistryProvider.register(volumes);
|
|
$stateRegistryProvider.register(volume);
|
|
$stateRegistryProvider.register(registries);
|
|
$stateRegistryProvider.register(registriesAccess);
|
|
},
|
|
]);
|