ui/app/models/nodedriver.js

137 lines
3.7 KiB
JavaScript

import { get, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import Resource from 'ember-api-store/models/resource';
import C from 'ui/utils/constants';
import { parseExternalId } from 'ui/utils/parse-externalid';
export const BUILT_IN_UI = ['amazonec2','digitalocean', 'azure', 'exoscale','packet','rackspace','vmwarevsphere','aliyunecs'];
export const BUILT_IN_ICON_ONLY = ['openstack'];
function displayUrl(url) {
url = url||'';
let parts = url.split('/');
let out = null;
if ( parts.length < 2 )
{
return url;
}
if (url.indexOf('github.com') >= 0) {
out = `.../${parts[parts.length-2]}/${parts[parts.length-1]}`;
} else {
out = url;
}
return out;
}
export default Resource.extend({
type: 'nodeDriver',
modalService: service('modal'),
catalog: service(),
intl: service(),
actions: {
activate: function() {
return this.doAction('activate');
},
deactivate: function() {
return this.doAction('deactivate');
},
edit: function() {
get(this,'modalService').toggleModal('modal-edit-driver', this);
},
},
catalogTemplateIcon: computed('externalId', function() {
let parsedExtId = parseExternalId(get(this,'externalId')) || null;
if (!parsedExtId) {
return null;
}
if (get(this,'catalog').getTemplateFromCache(parsedExtId.templateId)) {
return get(this,'catalog').getTemplateFromCache(parsedExtId.templateId).get('links.icon');
} else {
return `${get(this,'app.baseAssets')}assets/images/providers/generic-driver.svg`;
}
}),
displayName: computed('name', 'intl.locale', function() {
const intl = get(this,'intl');
const name = get(this, 'name');
const key = `nodeDriver.displayName.${name}`;
if ( name && intl.exists(key) ) {
return intl.t(key);
} else if ( name ) {
return name;
} else {
return '(' + get(this, 'id') + ')';
}
}),
displayIcon: computed('name', function() {
let name = get(this,'name');
if ( get(this,'hasBuiltinUi') ) {
return name;
} else {
return 'generic';
}
}),
displayUrl: computed('url', function() {
return displayUrl(get(this,'url'));
}),
displayChecksum: computed('checksum', function() {
return get(this,'checksum').substring(0, 8);
}),
displayUiUrl: computed('uiUrl', function() {
return displayUrl(get(this,'uiUrl'));
}),
hasBuiltinUi: computed('name', function() {
return BUILT_IN_UI.indexOf(get(this,'name')) >= 0;
}),
hasBuiltinIconOnly: computed('name', function() {
return BUILT_IN_ICON_ONLY.indexOf(get(this,'name')) >= 0;
}),
isCustom: computed('builtin','externalId', function() {
return !get(this,'builtin') && !get(this,'externalId');
}),
hasUi: computed('hasBuiltinUi', function() {
return get(this,'hasBuiltinUi') || !!get(this,'uiUrl');
}),
newExternalId: computed('isSystem','selectedTemplateModel.id', function() {
var externalId = C.EXTERNAL_ID.KIND_CATALOG + C.EXTERNAL_ID.KIND_SEPARATOR + get(this,'selectedTemplateModel.id');
return externalId;
}),
canEdit: computed('links.update', 'builtin', function() {
return !!get(this, 'links.update') && !get(this, 'builtin');
}),
availableActions: computed('actionLinks.{activate,deactivate}', function() {
let a = get(this,'actionLinks');
return [
{ label: 'action.activate', icon: 'icon icon-play', action: 'activate', enabled: !!a.activate, bulkable: true},
{ label: 'action.deactivate', icon: 'icon icon-pause', action: 'deactivate', enabled: !!a.deactivate, bulkable: true},
];
}),
externalIdInfo: computed('externalId', function() {
return parseExternalId(get(this,'externalId'));
}),
});