1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-10 00:05:24 +02:00
portainer/app/kubernetes/__module.js
Prabhat Khera 6f5d9c357f
Some checks failed
/ triage (push) Has been cancelled
Lint / Run linters (push) Has been cancelled
Test / test-client (push) Has been cancelled
Test / test-server (push) Has been cancelled
Revert multiple commits to set it back to tag 2.19 (#10946)
* Revert "docs(dashboard): update link for swarm node [EE-6318] (#10770)"

This reverts commit 30356d2c15.

* Revert "docs(api): default to pascal case for property name [EE-6471] (#10861)"

This reverts commit 392819576c.

* Revert "fix(edge/jobs): clear logs [EE-5923] (#10819)"

This reverts commit e01386f63d.

* Revert "disable html5 validation (#10843)"

This reverts commit 4b0f08e92a.

* Revert "fix(edgestack): allow to set retry deployment  toggle EE-6167 (#10676) (#10805)"

This reverts commit eee632b22d.

* Revert "fix(stack): edit git stack validation (#10812)"

This reverts commit d3b150b29c.

* Revert "Revert "Revert "fix(rollback): reversed rollback code from 2.19.4 [EE-6435] (#10811)" (#10832)"

This reverts commit 32e05bb705.

* Revert "fix(setting/ssl): cert files are optional to upload [EE-6139] (#10779)"

This reverts commit 7408668dbb.

* Revert "fix(endpoint): delete the endpoint proxy when updating an endpoint address [EE-5577] (#10824)"

This reverts commit 4b5ea01456.

* Revert "fix(swagger): custom template create docs EE-6428 (#10806)"

This reverts commit 0d55cb3e08.

* Revert "fix(images): sort by tags [EE-6410] (#10755)"

This reverts commit 7f51c727a0.

* Revert "fix(stacks): sort by date [EE-5766] (#10758)"

This reverts commit 57b80cd9ac.

* Revert "fix(UI): remember backup settings tab [EE-6347] (#10764)"

This reverts commit c20452492d.

* Revert "fix(backup ui): minor typo on backup page EE-6348 (#10717)"

This reverts commit d58046eb68.

* Revert "fix(app): shift external to the top [EE-6392] (#10753) (#10802)"

This reverts commit 4795e85d18.

* Revert "fix(app): update sliders when limits are known [EE-5933] (#10769) (#10801)"

This reverts commit d090b0043a.

* Revert "fix(gitops): correct commit hash link [EE-6346] (#10800)"

This reverts commit 0e59cf76ec.

* Revert "fix toast error (#10804)"

This reverts commit 9978b88ed4.

* Revert "fix(kube): configmaps and secrets from envFrom in the app detail screen [EE-6282] (#10741) (#10798)"

This reverts commit c1a01558d0.

* Revert "fix(stacks): allow editing custom templates before stack deployment EE-6380 (#10713)"

This reverts commit f0aa0554f8.

* Reapply "fix(rollback): reversed rollback code from 2.19.4 [EE-6435] (#10811)

This reverts commit c58fa274e7.
2024-01-25 12:50:56 +13:00

482 lines
13 KiB
JavaScript

import { EnvironmentStatus } from '@/react/portainer/environments/types';
import { getSelfSubjectAccessReview } from '@/react/kubernetes/namespaces/service';
import { PortainerEndpointTypes } from 'Portainer/models/endpoint/models';
import registriesModule from './registries';
import customTemplateModule from './custom-templates';
import { reactModule } from './react';
import './views/kubernetes.css';
angular.module('portainer.kubernetes', ['portainer.app', registriesModule, customTemplateModule, reactModule]).config([
'$stateRegistryProvider',
function ($stateRegistryProvider) {
'use strict';
const kubernetes = {
name: 'kubernetes',
url: '/kubernetes',
parent: 'endpoint',
abstract: true,
onEnter: /* @ngInject */ function onEnter($async, $state, endpoint, KubernetesHealthService, KubernetesNamespaceService, Notifications, StateManager) {
return $async(async () => {
const kubeTypes = [
PortainerEndpointTypes.KubernetesLocalEnvironment,
PortainerEndpointTypes.AgentOnKubernetesEnvironment,
PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment,
];
if (!kubeTypes.includes(endpoint.Type)) {
$state.go('portainer.home');
return;
}
try {
if (endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment) {
//edge
try {
await KubernetesHealthService.ping(endpoint.Id);
endpoint.Status = EnvironmentStatus.Up;
} catch (e) {
endpoint.Status = EnvironmentStatus.Down;
}
}
await StateManager.updateEndpointState(endpoint);
if (endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment && endpoint.Status === EnvironmentStatus.Down) {
throw new Error('Unable to contact Edge agent, please ensure that the agent is properly running on the remote environment.');
}
// use selfsubject access review to check if we can connect to the kubernetes environment
// because it's gets a fast response, and is accessible to all users
try {
await getSelfSubjectAccessReview(endpoint.Id, 'default');
} catch (e) {
throw new Error('Environment is unreachable.');
}
} catch (e) {
let params = {};
if (endpoint.Type == PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment) {
params = { redirect: true, environmentId: endpoint.Id, environmentName: endpoint.Name, route: 'kubernetes.dashboard' };
} else {
Notifications.error('Failed loading environment', e);
}
$state.go('portainer.home', params, { reload: true, inherit: false });
}
});
},
};
const helmApplication = {
name: 'kubernetes.helm',
url: '/helm/:namespace/:name',
views: {
'content@': {
component: 'kubernetesHelmApplicationView',
},
},
};
const helmTemplates = {
name: 'kubernetes.templates.helm',
url: '/helm',
views: {
'content@': {
component: 'helmTemplatesView',
},
},
};
const services = {
name: 'kubernetes.services',
url: '/services',
views: {
'content@': {
component: 'kubernetesServicesView',
},
},
};
const ingresses = {
name: 'kubernetes.ingresses',
url: '/ingresses',
views: {
'content@': {
component: 'kubernetesIngressesView',
},
},
};
const ingressesCreate = {
name: 'kubernetes.ingresses.create',
url: '/add',
views: {
'content@': {
component: 'kubernetesIngressesCreateView',
},
},
};
const ingressesEdit = {
name: 'kubernetes.ingresses.edit',
url: '/:namespace/:name/edit',
views: {
'content@': {
component: 'kubernetesIngressesCreateView',
},
},
};
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?resource-type',
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: 'kubernetesConsoleView',
},
},
};
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?tab',
views: {
'content@': {
component: 'kubernetesConfigMapsAndSecretsView',
},
},
params: {
tab: null,
},
};
const configmaps = {
name: 'kubernetes.configmaps',
url: '/configmaps',
abstract: true,
};
const configMapCreation = {
name: 'kubernetes.configmaps.new',
url: '/new',
views: {
'content@': {
component: 'kubernetesCreateConfigMapView',
},
},
};
const configMap = {
name: 'kubernetes.configmaps.configmap',
url: '/:namespace/:name',
views: {
'content@': {
component: 'kubernetesConfigMapView',
},
},
};
const secrets = {
name: 'kubernetes.secrets',
url: '/secrets',
abstract: true,
};
const secretCreation = {
name: 'kubernetes.secrets.new',
url: '/new',
views: {
'content@': {
component: 'kubernetesCreateSecretView',
},
},
};
const secret = {
name: 'kubernetes.secrets.secret',
url: '/:namespace/:name',
views: {
'content@': {
component: 'kubernetesSecretView',
},
},
};
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?templateId&referrer&tab',
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',
},
},
};
const endpointKubernetesConfiguration = {
name: 'kubernetes.cluster.setup',
url: '/configure',
views: {
'content@': {
templateUrl: './views/configure/configure.html',
controller: 'KubernetesConfigureController',
controllerAs: 'ctrl',
},
},
};
const endpointKubernetesSecurityConstraint = {
name: 'kubernetes.cluster.securityConstraint',
url: '/securityConstraint',
views: {
'content@': {
templateUrl: '../kubernetes/views/security-constraint/constraint.html',
controller: 'KubernetesSecurityConstraintController',
},
},
};
$stateRegistryProvider.register(kubernetes);
$stateRegistryProvider.register(helmApplication);
$stateRegistryProvider.register(helmTemplates);
$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(configmaps);
$stateRegistryProvider.register(configMapCreation);
$stateRegistryProvider.register(secrets);
$stateRegistryProvider.register(secretCreation);
$stateRegistryProvider.register(configMap);
$stateRegistryProvider.register(secret);
$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);
$stateRegistryProvider.register(endpointKubernetesConfiguration);
$stateRegistryProvider.register(endpointKubernetesSecurityConstraint);
$stateRegistryProvider.register(services);
$stateRegistryProvider.register(ingresses);
$stateRegistryProvider.register(ingressesCreate);
$stateRegistryProvider.register(ingressesEdit);
},
]);