ui/lib/shared/addon/components/node-driver/driver-rackspace/component.js

82 lines
1.8 KiB
JavaScript

import { alias } from '@ember/object/computed';
import Component from '@ember/component';
import NodeDriver from 'shared/mixins/node-driver';
import Flavors from 'ui/utils/rackspace-choices';
import layout from './template';
let flavorChoices = [];
Flavors.forEach(function(flavor) {
let parts = flavor.name.match(/^(\d+)\s*([a-z]+)\s*(.*)$/i);
if ( parts ) {
let sizeMb = parseInt(parts[1],10);
if ( parts[2].toLowerCase() === 'gb' ) {
sizeMb *= 1024;
}
flavorChoices.push({
group : parts[3],
label : parts[3] + ' : ' + parts[1] + ' ' + parts[2],
value : flavor.id,
sizeMb : sizeMb
});
}
});
flavorChoices.sort(function(a,b) {
let ag = a.group;
let bg = b.group;
let as = a.sizeMb;
let bs = b.sizeMb;
if ( ag < bg ) {
return -1;
} else if ( ag > bg ) {
return 1;
} else {
return as - bs;
}
});
export default Component.extend(NodeDriver, {
layout,
driverName : 'rackspace',
config : alias('model.rackspaceConfig'),
flavorChoices : flavorChoices,
regionChoices : [
{label: 'Dallas (DFW)', value: 'DFW'},
{label: 'Chicago (ORD)', value: 'ORD'},
{label: 'Hong Kong (HKG)', value: 'HKG'},
{label: 'London (LON)', value: 'LON'},
{label: 'Northern Virginia (IAD)', value: 'IAD'},
{label: 'Sydney (SYD)', value: 'SYD'},
],
bootstrap: function() {
let store = this.get('globalStore');
let config = store.createRecord({
type: 'rackspaceConfig',
username: '',
apiKey: '',
region: 'DFW',
flavorId: 'general1-1',
});
this.set('model.rackspaceConfig', config);
},
validate() {
let errors = [];
if ( !this.get('model.name') ) {
errors.push('Name is required');
}
this.set('errors', errors);
return errors.length === 0;
},
});