mirror of https://github.com/rancher/ui.git
89 lines
2.9 KiB
JavaScript
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;
|
|
});
|
|
},
|
|
});
|