Project

General

Profile

Download (3.6 KB) Statistics
| Branch: | Tag: | Revision:
/* eslint-disable global-require */
import $ from 'jquery';
import { activateDatatables } from './foreman_tools';
import { notify } from './foreman_toast_notifications';

export default {
ec2: require('./compute_resource/ec2'),
libvirt: require('./compute_resource/libvirt'),
openstack: require('./compute_resource/openstack'),
ovirt: require('./compute_resource/ovirt'),
vmware: require('./compute_resource/vmware'),
capacityEdit,
providerSelected,
testConnection,
};

// Common functions used by one or more Compute Resource

// AJAX load vm listing

$(document).on('ContentLoad', () => {
$('#vms, #images_list, #key_pairs_list')
.filter('[data-url]')
.each((i, el) => {
const tab = $(el);
const url = tab.attr('data-url');

tab.load(`${url} table`, (response, status, xhr) => {
if (status === 'error') {
// eslint-disable-next-line function-paren-newline
tab.html(
// eslint-disable-next-line no-undef
Jed.sprintf(__('There was an error listing VMs: %(status)s %(statusText)s'), {
status: xhr.status,
statusText: xhr.statusText,
}));
} else {
activateDatatables();
}
});
});
});

// eslint-disable-next-line max-statements
export function providerSelected(item) {
const computeConnection = $('#compute_connection');
const provider = $(item).val();

if (provider === '') {
computeConnection.hide();
$('[type=submit]').attr('disabled', true);
return false;
}
$('[type=submit]').attr('disabled', false);
const url = $(item).attr('data-url');
const data = `provider=${provider}`;

computeConnection.show();
computeConnection.load(`${url} div#compute_connection`, data, () => {
// eslint-disable-next-line no-undef
password_caps_lock_hint();
});

return false;
}

export function testConnection(item) {
let crId = $('form').data('id');

if (crId === undefined || crId === null) {
crId = '';
}

const password = $('input#compute_resource_password').val();

$('.tab-error').removeClass('tab-error');
$('#test_connection_indicator').show();
$.ajax({
type: 'put',
url: $(item).attr('data-url'),
data: `${$('form').serialize()}&cr_id=${crId}`,
success(result) {
const res = $(`<div>${result}</div>`);

$('#compute_connection').html(res.find('#compute_connection'));
$('#compute_connection').prepend(res.find('.alert'));
if (
$('.alert-danger', result).length === 0 &&
$('#compute_connection .has-error', result).length === 0
) {
notify({ message: `<p>${__('Test connection was successful')}</p>`, type: 'success' });
}
},
error({ statusText }) {
notify({
message: `<p>${__('An error occurred while testing the connection: ')}${statusText}</p>`,
type: 'danger',
});
},
complete(result) {
// we need to restore the password field as it is not sent back from the server.
$('input#compute_resource_password').val(password);
$('#compute_resource_password').prop('disabled', false);
$('#test_connection_indicator').hide();
// eslint-disable-next-line no-undef
reloadOnAjaxComplete('#test_connection_indicator');
},
});
}

export function capacityEdit(element) {
const buttons = $(element)
.closest('.fields')
.find('button[name=allocation_radio_btn].btn.active');

if (buttons.length > 0 && buttons[0].id === 'btnAllocationFull') {
const allocation = $(element)
.closest('.fields')
.find('[id$=allocation]')[0];

allocation.value = element.value;
}
return false;
}
(9-9/30)