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; }, });