ui/lib/istio/addon/cluster-setting/route.js

61 lines
1.9 KiB
JavaScript

import Route from '@ember/routing/route';
import { set, get } from '@ember/object';
import { inject as service } from '@ember/service';
import { on } from '@ember/object/evented';
import C from 'ui/utils/constants';
import { all as PromiseAll } from 'rsvp';
const NAMESPACE_NAME = 'istio-system';
const APP_NAME = 'cluster-istio';
const MONITORING_APP_NAME = 'cluster-monitoring';
export default Route.extend({
session: service(),
scope: service(),
router: service(),
model() {
const cluster = window.l('route:application').modelFor('authenticated.cluster');
const project = get(cluster, 'systemProject');
if (!project) {
return { owner: false, }
}
const apps = project.followLink('apps')
const namespaces = cluster.followLink('namespaces')
const storageClasses = cluster.followLink('storageClasses')
const persistentVolumeClaims = project.followLink('persistentVolumeClaims')
return PromiseAll([apps, namespaces, storageClasses, persistentVolumeClaims]).then((data) => {
const app = data[0].findBy('name', APP_NAME)
const monitoringApp = data[0].findBy('name', MONITORING_APP_NAME)
const namespaces = data[1] || [];
const storageClasses = data[2] || []
const persistentVolumeClaims = data[3] || []
const namespace = namespaces.findBy('name', NAMESPACE_NAME)
return {
app,
nsExists: !!namespace,
cluster,
project,
storageClasses,
persistentVolumeClaims: persistentVolumeClaims.filter((p) => p.namespaceId === NAMESPACE_NAME && p.state === 'bound'),
namespace,
owner: true,
apps: data[0].filter((a) => a.name === APP_NAME),
monitoringApp,
}
});
},
setDefaultRoute: on('activate', function() {
set(this, `session.${ C.SESSION.CLUSTER_ROUTE }`, 'authenticated.cluster.istio.cluster-setting');
}),
});