1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-02 20:35:25 +02:00

fix cluster setup page route (#6020)

This commit is contained in:
Richard Wei 2021-11-08 14:32:36 +13:00 committed by GitHub
parent ebfabe6c47
commit af0d637414
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 403 additions and 389 deletions

View file

@ -28,7 +28,13 @@
Namespaces
</sidebar-menu-item>
<sidebar-menu-item path="kubernetes.templates.helm" path-params="{ endpointId: $ctrl.endpointId }" icon-class="fa-dharmachakra fa-fw" class-name="sidebar-list" data-cy="k8sSidebar-helm">
<sidebar-menu-item
path="kubernetes.templates.helm"
path-params="{ endpointId: $ctrl.endpointId }"
icon-class="fa-dharmachakra fa-fw"
class-name="sidebar-list"
data-cy="k8sSidebar-helm"
>
Helm
</sidebar-menu-item>
@ -62,12 +68,12 @@
path="kubernetes.cluster"
path-params="{ endpointId: $ctrl.endpointId }"
is-sidebar-open="$ctrl.isSidebarOpen"
children-paths="['kubernetes.cluster', 'portainer.endpoints.endpoint.kubernetesConfig', 'kubernetes.registries', 'kubernetes.registries.access']"
children-paths="['kubernetes.cluster', 'portainer.k8sendpoint.kubernetesConfig', 'kubernetes.registries', 'kubernetes.registries.access']"
>
<div ng-if="$ctrl.adminAccess">
<sidebar-menu-item
authorization="K8sClusterSetupRW"
path="portainer.endpoints.endpoint.kubernetesConfig"
path="portainer.k8sendpoint.kubernetesConfig"
path-params="{ id: $ctrl.endpointId }"
class-name="sidebar-sublist"
data-cy="k8sSidebar-setup"

View file

@ -1007,7 +1007,7 @@
</p>
<p ng-if="ctrl.isAdmin">
Server metrics features must be enabled in the
<a ui-sref="portainer.endpoints.endpoint.kubernetesConfig({id: ctrl.endpoint.Id})" class="ctrl.isAdmin">environment configuration view</a>.
<a ui-sref="portainer.k8sendpoint.kubernetesConfig({id: ctrl.endpoint.Id})" class="ctrl.isAdmin">environment configuration view</a>.
</p>
</div>
</div>

View file

@ -1,4 +1,4 @@
<kubernetes-view-header title="Kubernetes features configuration" state="portainer.endpoints.endpoint.kubernetesConfig" view-ready="ctrl.state.viewReady">
<kubernetes-view-header title="Kubernetes features configuration" state="portainer.k8sendpoint.kubernetesConfig" view-ready="ctrl.state.viewReady">
<a ui-sref="portainer.endpoints">Environment</a> &gt; <a ui-sref="portainer.endpoints.endpoint({id: ctrl.endpoint.Id})">{{ ctrl.endpoint.Name }}</a> &gt; Kubernetes configuration
</kubernetes-view-header>

View file

@ -210,8 +210,8 @@
<div class="form-group" ng-if="$ctrl.formValues.IngressClasses.length === 0">
<div class="col-sm-12 small text-muted">
The ingress feature must be enabled in the
<a ui-sref="portainer.endpoints.endpoint.kubernetesConfig({id: $ctrl.endpoint.Id})">environment configuration view</a> to be able to register ingresses inside
this namespace.
<a ui-sref="portainer.k8sendpoint.kubernetesConfig({id: $ctrl.endpoint.Id})">environment configuration view</a> to be able to register ingresses inside this
namespace.
</div>
</div>

View file

@ -164,8 +164,8 @@
<div class="form-group" ng-if="ctrl.formValues.IngressClasses.length === 0">
<div class="col-sm-12 small text-muted">
The ingress feature must be enabled in the
<a ui-sref="portainer.endpoints.endpoint.kubernetesConfig({id: ctrl.endpoint.Id})">environment configuration view</a> to be able to register ingresses inside
this namespace.
<a ui-sref="portainer.k8sendpoint.kubernetesConfig({id: ctrl.endpoint.Id})">environment configuration view</a> to be able to register ingresses inside this
namespace.
</div>
</div>

View file

@ -21,436 +21,444 @@ async function initAuthentication(authManager, Authentication, $rootScope, $stat
return await Authentication.init();
}
angular.module('portainer.app', ['portainer.oauth', 'portainer.rbac', componentsModule, settingsModule, featureFlagModule, userActivityModule, 'portainer.shared.datatable']).config([
'$stateRegistryProvider',
function ($stateRegistryProvider) {
'use strict';
angular
.module('portainer.app', ['portainer.oauth', 'portainer.rbac', componentsModule, settingsModule, featureFlagModule, userActivityModule, 'portainer.shared.datatable'])
.config([
'$stateRegistryProvider',
function ($stateRegistryProvider) {
'use strict';
var root = {
name: 'root',
abstract: true,
onEnter: /* @ngInject */ function onEnter($async, StateManager, Authentication, Notifications, authManager, $rootScope, $state) {
return $async(async () => {
const appState = StateManager.getState();
if (!appState.loading) {
return;
}
try {
const loggedIn = await initAuthentication(authManager, Authentication, $rootScope, $state);
await StateManager.initialize();
if (!loggedIn && isTransitionRequiresAuthentication($state.transition)) {
$state.go('portainer.logout');
return Promise.reject('Unauthenticated');
}
} catch (err) {
Notifications.error('Failure', err, 'Unable to retrieve application settings');
throw err;
}
});
},
views: {
'sidebar@': {
templateUrl: './views/sidebar/sidebar.html',
controller: 'SidebarController',
},
},
resolve: {
featuresServiceInitialized: /* @ngInject */ function featuresServiceInitialized($async, featureService, Notifications) {
var root = {
name: 'root',
abstract: true,
onEnter: /* @ngInject */ function onEnter($async, StateManager, Authentication, Notifications, authManager, $rootScope, $state) {
return $async(async () => {
try {
await featureService.init();
} catch (e) {
Notifications.error('Failed initializing features service', e);
throw e;
}
});
},
},
};
var endpointRoot = {
name: 'endpoint',
url: '/:endpointId',
parent: 'root',
abstract: true,
resolve: {
endpoint: /* @ngInject */ function endpoint($async, $state, $transition$, EndpointService, Notifications) {
return $async(async () => {
try {
const endpointId = +$transition$.params().endpointId;
const endpoint = await EndpointService.endpoint(endpointId);
if ((endpoint.Type === 4 || endpoint.Type === 7) && !endpoint.EdgeID) {
$state.go('portainer.endpoints.endpoint', { id: endpoint.Id });
return;
}
return endpoint;
} catch (e) {
Notifications.error('Failed loading environment', e);
$state.go('portainer.home', {}, { reload: true });
const appState = StateManager.getState();
if (!appState.loading) {
return;
}
try {
const loggedIn = await initAuthentication(authManager, Authentication, $rootScope, $state);
await StateManager.initialize();
if (!loggedIn && isTransitionRequiresAuthentication($state.transition)) {
$state.go('portainer.logout');
return Promise.reject('Unauthenticated');
}
} catch (err) {
Notifications.error('Failure', err, 'Unable to retrieve application settings');
throw err;
}
});
},
},
};
var portainer = {
name: 'portainer',
parent: 'root',
abstract: true,
};
var account = {
name: 'portainer.account',
url: '/account',
views: {
'content@': {
templateUrl: './views/account/account.html',
controller: 'AccountController',
views: {
'sidebar@': {
templateUrl: './views/sidebar/sidebar.html',
controller: 'SidebarController',
},
},
},
};
var authentication = {
name: 'portainer.auth',
url: '/auth',
params: {
reload: false,
},
views: {
'content@': {
templateUrl: './views/auth/auth.html',
controller: 'AuthenticationController',
controllerAs: 'ctrl',
resolve: {
featuresServiceInitialized: /* @ngInject */ function featuresServiceInitialized($async, featureService, Notifications) {
return $async(async () => {
try {
await featureService.init();
} catch (e) {
Notifications.error('Failed initializing features service', e);
throw e;
}
});
},
},
'sidebar@': {},
},
};
const logout = {
name: 'portainer.logout',
url: '/logout',
params: {
error: '',
performApiLogout: false,
},
views: {
'content@': {
templateUrl: './views/logout/logout.html',
controller: 'LogoutController',
controllerAs: 'ctrl',
};
var endpointRoot = {
name: 'endpoint',
url: '/:endpointId',
parent: 'root',
abstract: true,
resolve: {
endpoint: /* @ngInject */ function endpoint($async, $state, $transition$, EndpointService, Notifications) {
return $async(async () => {
try {
const endpointId = +$transition$.params().endpointId;
const endpoint = await EndpointService.endpoint(endpointId);
if ((endpoint.Type === 4 || endpoint.Type === 7) && !endpoint.EdgeID) {
$state.go('portainer.endpoints.endpoint', { id: endpoint.Id });
return;
}
return endpoint;
} catch (e) {
Notifications.error('Failed loading environment', e);
$state.go('portainer.home', {}, { reload: true });
return;
}
});
},
},
'sidebar@': {},
},
};
};
var endpoints = {
name: 'portainer.endpoints',
url: '/endpoints',
views: {
'content@': {
templateUrl: './views/endpoints/endpoints.html',
controller: 'EndpointsController',
var portainer = {
name: 'portainer',
parent: 'root',
abstract: true,
};
var account = {
name: 'portainer.account',
url: '/account',
views: {
'content@': {
templateUrl: './views/account/account.html',
controller: 'AccountController',
},
},
},
};
};
var endpoint = {
name: 'portainer.endpoints.endpoint',
url: '/:id',
views: {
'content@': {
templateUrl: './views/endpoints/edit/endpoint.html',
controller: 'EndpointController',
var authentication = {
name: 'portainer.auth',
url: '/auth',
params: {
reload: false,
},
},
};
const endpointKubernetesConfiguration = {
name: 'portainer.endpoints.endpoint.kubernetesConfig',
url: '/configure',
views: {
'content@': {
templateUrl: '../kubernetes/views/configure/configure.html',
controller: 'KubernetesConfigureController',
controllerAs: 'ctrl',
views: {
'content@': {
templateUrl: './views/auth/auth.html',
controller: 'AuthenticationController',
controllerAs: 'ctrl',
},
'sidebar@': {},
},
},
};
var endpointCreation = {
name: 'portainer.endpoints.new',
url: '/new',
views: {
'content@': {
templateUrl: './views/endpoints/create/createendpoint.html',
controller: 'CreateEndpointController',
};
const logout = {
name: 'portainer.logout',
url: '/logout',
params: {
error: '',
performApiLogout: false,
},
},
};
var endpointAccess = {
name: 'portainer.endpoints.endpoint.access',
url: '/access',
views: {
'content@': {
templateUrl: './views/endpoints/access/endpointAccess.html',
controller: 'EndpointAccessController',
controllerAs: 'ctrl',
views: {
'content@': {
templateUrl: './views/logout/logout.html',
controller: 'LogoutController',
controllerAs: 'ctrl',
},
'sidebar@': {},
},
},
};
};
var groups = {
name: 'portainer.groups',
url: '/groups',
views: {
'content@': {
templateUrl: './views/groups/groups.html',
controller: 'GroupsController',
var endpoints = {
name: 'portainer.endpoints',
url: '/endpoints',
views: {
'content@': {
templateUrl: './views/endpoints/endpoints.html',
controller: 'EndpointsController',
},
},
},
};
};
var group = {
name: 'portainer.groups.group',
url: '/:id',
views: {
'content@': {
templateUrl: './views/groups/edit/group.html',
controller: 'GroupController',
var endpoint = {
name: 'portainer.endpoints.endpoint',
url: '/:id',
views: {
'content@': {
templateUrl: './views/endpoints/edit/endpoint.html',
controller: 'EndpointController',
},
},
},
};
};
var groupCreation = {
name: 'portainer.groups.new',
url: '/new',
views: {
'content@': {
templateUrl: './views/groups/create/creategroup.html',
controller: 'CreateGroupController',
var k8sendpoint = {
name: 'portainer.k8sendpoint',
url: '/:id',
};
const endpointKubernetesConfiguration = {
name: 'portainer.k8sendpoint.kubernetesConfig',
url: '/configure',
views: {
'content@': {
templateUrl: '../kubernetes/views/configure/configure.html',
controller: 'KubernetesConfigureController',
controllerAs: 'ctrl',
},
},
},
};
};
var groupAccess = {
name: 'portainer.groups.group.access',
url: '/access',
views: {
'content@': {
templateUrl: './views/groups/access/groupAccess.html',
controller: 'GroupAccessController',
var endpointCreation = {
name: 'portainer.endpoints.new',
url: '/new',
views: {
'content@': {
templateUrl: './views/endpoints/create/createendpoint.html',
controller: 'CreateEndpointController',
},
},
},
};
};
var home = {
name: 'portainer.home',
url: '/home',
views: {
'content@': {
templateUrl: './views/home/home.html',
controller: 'HomeController',
var endpointAccess = {
name: 'portainer.endpoints.endpoint.access',
url: '/access',
views: {
'content@': {
templateUrl: './views/endpoints/access/endpointAccess.html',
controller: 'EndpointAccessController',
controllerAs: 'ctrl',
},
},
},
};
};
var init = {
name: 'portainer.init',
abstract: true,
url: '/init',
views: {
'sidebar@': {},
},
};
const wizard = {
name: 'portainer.wizard',
url: '/wizard',
views: {
'content@': {
component: 'wizardView',
var groups = {
name: 'portainer.groups',
url: '/groups',
views: {
'content@': {
templateUrl: './views/groups/groups.html',
controller: 'GroupsController',
},
},
},
};
};
const wizardEndpoints = {
name: 'portainer.wizard.endpoints',
url: '/endpoints',
views: {
'content@': {
component: 'wizardEndpoints',
var group = {
name: 'portainer.groups.group',
url: '/:id',
views: {
'content@': {
templateUrl: './views/groups/edit/group.html',
controller: 'GroupController',
},
},
},
};
};
var initEndpoint = {
name: 'portainer.init.endpoint',
url: '/endpoint',
views: {
'content@': {
templateUrl: './views/init/endpoint/initEndpoint.html',
controller: 'InitEndpointController',
controllerAs: 'ctrl',
var groupCreation = {
name: 'portainer.groups.new',
url: '/new',
views: {
'content@': {
templateUrl: './views/groups/create/creategroup.html',
controller: 'CreateGroupController',
},
},
},
};
};
var initAdmin = {
name: 'portainer.init.admin',
url: '/admin',
views: {
'content@': {
templateUrl: './views/init/admin/initAdmin.html',
controller: 'InitAdminController',
var groupAccess = {
name: 'portainer.groups.group.access',
url: '/access',
views: {
'content@': {
templateUrl: './views/groups/access/groupAccess.html',
controller: 'GroupAccessController',
},
},
},
};
};
var registries = {
name: 'portainer.registries',
url: '/registries',
views: {
'content@': {
templateUrl: './views/registries/registries.html',
controller: 'RegistriesController',
var home = {
name: 'portainer.home',
url: '/home',
views: {
'content@': {
templateUrl: './views/home/home.html',
controller: 'HomeController',
},
},
},
};
};
var registry = {
name: 'portainer.registries.registry',
url: '/:id',
views: {
'content@': {
templateUrl: './views/registries/edit/registry.html',
controller: 'RegistryController',
var init = {
name: 'portainer.init',
abstract: true,
url: '/init',
views: {
'sidebar@': {},
},
},
};
};
const registryCreation = {
name: 'portainer.registries.new',
url: '/new',
views: {
'content@': {
component: 'createRegistry',
const wizard = {
name: 'portainer.wizard',
url: '/wizard',
views: {
'content@': {
component: 'wizardView',
},
},
},
};
};
var settings = {
name: 'portainer.settings',
url: '/settings',
views: {
'content@': {
templateUrl: './views/settings/settings.html',
controller: 'SettingsController',
const wizardEndpoints = {
name: 'portainer.wizard.endpoints',
url: '/endpoints',
views: {
'content@': {
component: 'wizardEndpoints',
},
},
},
};
};
var settingsAuthentication = {
name: 'portainer.settings.authentication',
url: '/auth',
views: {
'content@': {
templateUrl: './views/settings/authentication/settingsAuthentication.html',
controller: 'SettingsAuthenticationController',
var initEndpoint = {
name: 'portainer.init.endpoint',
url: '/endpoint',
views: {
'content@': {
templateUrl: './views/init/endpoint/initEndpoint.html',
controller: 'InitEndpointController',
controllerAs: 'ctrl',
},
},
},
};
};
var tags = {
name: 'portainer.tags',
url: '/tags',
views: {
'content@': {
templateUrl: './views/tags/tags.html',
controller: 'TagsController',
var initAdmin = {
name: 'portainer.init.admin',
url: '/admin',
views: {
'content@': {
templateUrl: './views/init/admin/initAdmin.html',
controller: 'InitAdminController',
},
},
},
};
};
var users = {
name: 'portainer.users',
url: '/users',
views: {
'content@': {
templateUrl: './views/users/users.html',
controller: 'UsersController',
var registries = {
name: 'portainer.registries',
url: '/registries',
views: {
'content@': {
templateUrl: './views/registries/registries.html',
controller: 'RegistriesController',
},
},
},
};
};
var user = {
name: 'portainer.users.user',
url: '/:id',
views: {
'content@': {
templateUrl: './views/users/edit/user.html',
controller: 'UserController',
var registry = {
name: 'portainer.registries.registry',
url: '/:id',
views: {
'content@': {
templateUrl: './views/registries/edit/registry.html',
controller: 'RegistryController',
},
},
},
};
};
var teams = {
name: 'portainer.teams',
url: '/teams',
views: {
'content@': {
templateUrl: './views/teams/teams.html',
controller: 'TeamsController',
const registryCreation = {
name: 'portainer.registries.new',
url: '/new',
views: {
'content@': {
component: 'createRegistry',
},
},
},
};
};
var team = {
name: 'portainer.teams.team',
url: '/:id',
views: {
'content@': {
templateUrl: './views/teams/edit/team.html',
controller: 'TeamController',
var settings = {
name: 'portainer.settings',
url: '/settings',
views: {
'content@': {
templateUrl: './views/settings/settings.html',
controller: 'SettingsController',
},
},
},
};
};
$stateRegistryProvider.register(root);
$stateRegistryProvider.register(endpointRoot);
$stateRegistryProvider.register(portainer);
$stateRegistryProvider.register(account);
$stateRegistryProvider.register(authentication);
$stateRegistryProvider.register(logout);
$stateRegistryProvider.register(endpoints);
$stateRegistryProvider.register(endpoint);
$stateRegistryProvider.register(endpointAccess);
$stateRegistryProvider.register(endpointCreation);
$stateRegistryProvider.register(endpointKubernetesConfiguration);
$stateRegistryProvider.register(groups);
$stateRegistryProvider.register(group);
$stateRegistryProvider.register(groupAccess);
$stateRegistryProvider.register(groupCreation);
$stateRegistryProvider.register(home);
$stateRegistryProvider.register(init);
$stateRegistryProvider.register(wizard);
$stateRegistryProvider.register(wizardEndpoints);
$stateRegistryProvider.register(initEndpoint);
$stateRegistryProvider.register(initAdmin);
$stateRegistryProvider.register(registries);
$stateRegistryProvider.register(registry);
$stateRegistryProvider.register(registryCreation);
$stateRegistryProvider.register(settings);
$stateRegistryProvider.register(settingsAuthentication);
$stateRegistryProvider.register(tags);
$stateRegistryProvider.register(users);
$stateRegistryProvider.register(user);
$stateRegistryProvider.register(teams);
$stateRegistryProvider.register(team);
},
]);
var settingsAuthentication = {
name: 'portainer.settings.authentication',
url: '/auth',
views: {
'content@': {
templateUrl: './views/settings/authentication/settingsAuthentication.html',
controller: 'SettingsAuthenticationController',
},
},
};
var tags = {
name: 'portainer.tags',
url: '/tags',
views: {
'content@': {
templateUrl: './views/tags/tags.html',
controller: 'TagsController',
},
},
};
var users = {
name: 'portainer.users',
url: '/users',
views: {
'content@': {
templateUrl: './views/users/users.html',
controller: 'UsersController',
},
},
};
var user = {
name: 'portainer.users.user',
url: '/:id',
views: {
'content@': {
templateUrl: './views/users/edit/user.html',
controller: 'UserController',
},
},
};
var teams = {
name: 'portainer.teams',
url: '/teams',
views: {
'content@': {
templateUrl: './views/teams/teams.html',
controller: 'TeamsController',
},
},
};
var team = {
name: 'portainer.teams.team',
url: '/:id',
views: {
'content@': {
templateUrl: './views/teams/edit/team.html',
controller: 'TeamController',
},
},
};
$stateRegistryProvider.register(root);
$stateRegistryProvider.register(endpointRoot);
$stateRegistryProvider.register(portainer);
$stateRegistryProvider.register(account);
$stateRegistryProvider.register(authentication);
$stateRegistryProvider.register(logout);
$stateRegistryProvider.register(endpoints);
$stateRegistryProvider.register(endpoint);
$stateRegistryProvider.register(k8sendpoint);
$stateRegistryProvider.register(endpointAccess);
$stateRegistryProvider.register(endpointCreation);
$stateRegistryProvider.register(endpointKubernetesConfiguration);
$stateRegistryProvider.register(groups);
$stateRegistryProvider.register(group);
$stateRegistryProvider.register(groupAccess);
$stateRegistryProvider.register(groupCreation);
$stateRegistryProvider.register(home);
$stateRegistryProvider.register(init);
$stateRegistryProvider.register(wizard);
$stateRegistryProvider.register(wizardEndpoints);
$stateRegistryProvider.register(initEndpoint);
$stateRegistryProvider.register(initAdmin);
$stateRegistryProvider.register(registries);
$stateRegistryProvider.register(registry);
$stateRegistryProvider.register(registryCreation);
$stateRegistryProvider.register(settings);
$stateRegistryProvider.register(settingsAuthentication);
$stateRegistryProvider.register(tags);
$stateRegistryProvider.register(users);
$stateRegistryProvider.register(user);
$stateRegistryProvider.register(teams);
$stateRegistryProvider.register(team);
},
]);
function isTransitionRequiresAuthentication(transition) {
const UNAUTHENTICATED_ROUTES = ['portainer.logout', 'portainer.auth'];

View file

@ -164,7 +164,7 @@ angular
EndpointService.createLocalKubernetesEndpoint(name, tagIds)
.then(function success(result) {
Notifications.success('Environment created', name);
$state.go('portainer.endpoints.endpoint.kubernetesConfig', { id: result.Id });
$state.go('portainer.k8sendpoint.kubernetesConfig', { id: result.Id });
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to create environment');
@ -263,7 +263,7 @@ angular
$state.go('portainer.endpoints.endpoint', { id: endpoint.Id });
break;
case PortainerEndpointTypes.AgentOnKubernetesEnvironment:
$state.go('portainer.endpoints.endpoint.kubernetesConfig', { id: endpoint.Id });
$state.go('portainer.k8sendpoint.kubernetesConfig', { id: endpoint.Id });
break;
default:
$state.go('portainer.endpoints', {}, { reload: true });

View file

@ -104,7 +104,7 @@
<span class="small text-muted">
<i class="fa fa-tools blue-icon" aria-hidden="true" style="margin-right: 2px;"></i>
You should configure the features available in this Kubernetes environment in the
<a ui-sref="portainer.endpoints.endpoint.kubernetesConfig({id: endpoint.Id})">Kubernetes configuration</a> view.
<a ui-sref="portainer.k8sendpoint.kubernetesConfig({id: endpoint.Id})">Kubernetes configuration</a> view.
</span>
</information-panel>
</div>

View file

@ -95,7 +95,7 @@ class InitEndpointController {
try {
this.state.actionInProgress = true;
const endpoint = await this.EndpointService.createLocalKubernetesEndpoint();
this.$state.go('portainer.endpoints.endpoint.kubernetesConfig', { id: endpoint.Id });
this.$state.go('portainer.k8sendpoint.kubernetesConfig', { id: endpoint.Id });
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to connect to the Kubernetes environment');
} finally {
@ -131,7 +131,7 @@ class InitEndpointController {
null,
null
);
const routeName = endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ? 'portainer.endpoints.endpoint.kubernetesConfig' : 'portainer.home';
const routeName = endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ? 'portainer.k8sendpoint.kubernetesConfig' : 'portainer.home';
this.$state.go(routeName, { id: endpoint.Id });
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to connect to the Docker environment');