ui/lib/global-admin/addon/clusters/index/controller.js

123 lines
3.6 KiB
JavaScript

import { inject as service } from '@ember/service';
import Controller, { inject as controller } from '@ember/controller';
import { getOwner } from '@ember/application';
import { computed, get, set } from '@ember/object';
const headers = [
{
name: 'state',
sort: ['sortState', 'name', 'id'],
translationKey: 'generic.state',
width: 125,
},
{
name: 'name',
searchField: 'displayName',
sort: ['displayName', 'id'],
translationKey: 'clustersPage.cluster.label',
},
{
name: 'provider',
searchField: 'displayProvider',
sort: ['displayProvider', 'name', 'id'],
translationKey: 'clustersPage.provider.label',
width: 150,
},
{
name: 'nodes',
searchField: 'nodes.length',
sort: ['nodes.length', 'name', 'id'],
translationKey: 'clustersPage.nodes.label',
width: 100,
},
{
name: 'cpu',
sort: ['cpuUsage', 'name'],
searchField: 'cpuUsage',
translationKey: 'clustersPage.cpu.label',
width: 100,
},
{
name: 'memory',
searchField: 'memoryUsage',
sort: ['memoryUsage', 'name'],
translationKey: 'clustersPage.memory.label',
width: 125,
},
{
name: 'explorer',
searchField: false,
sort: false,
label: '',
width: 100,
}
];
const NODE_SEARCH_FIELDS = ['displayName', 'externalIpAddress:ip', 'ipAddress:ip'];
export default Controller.extend({
modalService: service('modal'),
access: service(),
scope: service(),
settings: service(),
prefs: service(),
router: service(),
globalStore: service(),
application: controller(),
queryParams: ['mode'],
mode: 'grouped',
headers,
extraSearchFields: ['version.gitVersion'],
sortBy: 'name',
searchText: null,
bulkActions: true,
_allClusters: null,
extraSearchSubFields: NODE_SEARCH_FIELDS,
init() {
this._super(...arguments);
set(this, '_allClusters', this.globalStore.all('cluster'));
},
actions: {
launchOnCluster(model) {
let authenticated = getOwner(this).lookup('route:authenticated');
if (this.get('scope.currentProject.id') === model.get('defaultProject.id')) {
this.transitionToRoute('authenticated.host-templates', {
queryParams: {
clusterId: model.get('id'),
backTo: 'clusters'
}
});
} else {
authenticated.send('switchProject', model.get('defaultProject.id'), 'authenticated.host-templates', [model.id, { queryParams: { backTo: 'clusters' } }]);
}
},
useKubernetes(model) {
let authenticated = getOwner(this).lookup('route:authenticated');
authenticated.send('switchProject', model.get('defaultProject.id'), 'authenticated.cluster.import', [model.id, { queryParams: { backTo: 'clusters' } }]);
},
},
filteredClusters: computed('_allClusters.@each.{id,state,transitioning,transitioningMessage}', '_allClusters.[]', function() {
const hideLocalCluster = get(this.settings, 'shouldHideLocalCluster');
return get(this, '_allClusters').filter((cluster) => {
if ((hideLocalCluster && get(cluster, 'id') !== 'local') || !hideLocalCluster) {
return cluster;
}
});
}),
hasWindowsRke1Cluster: computed('_allClusters.[]', function() {
return get(this, '_allClusters').any((cluster) => cluster.isWindows && cluster.isRKE);
})
});