ui/app/authenticated/clusters/project/route.js

89 lines
2.9 KiB
JavaScript

import EmberObject from '@ember/object';
import { Promise as EmberPromise } from 'rsvp';
import { inject as service } from '@ember/service';
import Route from '@ember/routing/route';
import C from 'ui/utils/constants';
import { xhrConcur } from 'ui/utils/platform';
import PromiseToCb from 'ui/mixins/promise-to-cb';
export default Route.extend(PromiseToCb, {
catalog: service(),
clusterStore: service('cluster-store'),
model: function(params /* , transition*/) {
const clusterStore = this.get('clusterStore');
let policyManagerOpt = {
headers: {
[C.HEADER.PROJECT_ID]: params.project_id
},
filter: {
name: C.CAPABILITY.NETWORK_POLICIES,
},
};
let promise = new EmberPromise((resolve, reject) => {
let tasks = {
allProjects: this.toCb(() => { return clusterStore.findAll('project'); }),
project: ['allProjects', this.toCb(() => { return clusterStore.find('project', params.project_id); })],
importMembers: ['project', this.toCb((results) => { return results.project.importLink('projectMembers'); })],
networks: this.toCb(() => { return clusterStore.find('network', null, {filter: {accountId: params.project_id}}); }),
policyManagers: this.toCb(() => { return clusterStore.find('stack', null, policyManagerOpt); }),
catalogs: this.toCb(() => { return this.get('catalog').fetchCatalogs();}),
};
async.auto(tasks, xhrConcur, function(err, res) {
if ( err ) {
reject(err);
} else {
resolve(res);
}
});
}, 'Load all the things');
return promise.then((hash) => {
let network = hash.networks.find((x) => C.PROJECT.SUPPORTS_NETWORK_POLICY.includes(x.get('name')));
if ( network ) {
network = network.clone();
if ( !network.get('defaultPolicyAction') ) {
network.set('defaultPolicyAction', 'allow');
}
let policy = network.get('policy');
if ( !policy ) {
policy = [];
network.set('policy', policy);
}
// Create default allow policies
const fields = ['linked','service','stack'];
fields.forEach((field) => {
let rule = policy.findBy('within', field);
if ( !rule ) {
policy.pushObject(clusterStore.createRecord({
type: 'networkPolicyRule',
within: field,
action: network.get('defaultPolicyAction'),
}));
}
});
}
let out = EmberObject.create({
all: hash.allProjects,
network: network,
policyManager: hash.policyManagers.objectAt(0),
catalogs: hash.catalogs.content,
});
out.setProperties({
originalProject: hash.project,
project: hash.project.clone(),
});
return out;
});
},
});