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

102 lines
1.9 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((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
});
}
});
flavorChoices.sort((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',
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'
},
],
config: alias('model.rackspaceConfig'),
bootstrap() {
let store = this.get('globalStore');
let config = store.createRecord({
type: 'rackspaceConfig',
username: '',
apiKey: '',
region: 'DFW',
flavorId: 'general1-2',
});
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;
},
});