1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

B #5854: Check history VM_MAD for VM migration (#2132)

This commit is contained in:
Frederick Borges 2022-06-06 18:59:58 +02:00 committed by GitHub
parent 62424b9c15
commit d87f232ad4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 44 deletions

View File

@ -855,7 +855,8 @@ define(function(require) {
"detachsg" : function(params) {
var action_obj = params.data.extra_param;
OpenNebulaAction.simple_action(params, RESOURCE, "sg_detach", action_obj);
}
},
"getHypervisor": getHypervisor,
};
function hostnameStr(element, navigationLink = false) {
@ -1362,5 +1363,25 @@ define(function(require) {
return rtn;
}
/**
* This functions gets the VM hypervisor based on the VM history.
*
* @param {Object} template: VM template
* @returns {String} VM hypervisor based on HISTORY.
*/
function getHypervisor(template) {
var history = template.HISTORY_RECORDS && template.HISTORY_RECORDS.HISTORY;
if (!Array.isArray(history)){
history = [history];
}
currentHistory = history.reduce(function(prev, current) {
return (prev.SEQ > current.SEQ) ? prev : current;
});
return currentHistory.VM_MAD;
}
return VM;
});

View File

@ -19,28 +19,28 @@ define(function(require) {
DEPENDENCIES
*/
var BaseDialog = require('utils/dialogs/dialog');
var Config = require('sunstone-config');
var DatastoresTable = require('tabs/datastores-tab/datatable');
var HostsTable = require('tabs/hosts-tab/datatable');
var Locale = require('utils/locale');
var Notifier = require('utils/notifier');
var OpenNebulaVM = require('opennebula/vm');
var Sunstone = require('sunstone');
var Tips = require('utils/tips');
var BaseDialog = require("utils/dialogs/dialog");
var Config = require("sunstone-config");
var DatastoresTable = require("tabs/datastores-tab/datatable");
var HostsTable = require("tabs/hosts-tab/datatable");
var Locale = require("utils/locale");
var Notifier = require("utils/notifier");
var OpenNebulaVM = require("opennebula/vm");
var Sunstone = require("sunstone");
var Tips = require("utils/tips");
/*
TEMPLATES
*/
var TemplateHTML = require('hbs!./migrate/html');
var TemplateHTML = require("hbs!./migrate/html");
/*
CONSTANTS
*/
var DIALOG_ID = require('./migrate/dialogId');
var TAB_ID = require('../tabId');
var DIALOG_ID = require("./migrate/dialogId");
var TAB_ID = require("../tabId");
/*
CONSTRUCTOR
@ -49,11 +49,11 @@ define(function(require) {
function Dialog() {
this.dialogId = DIALOG_ID;
this.hostsTable = new HostsTable('migrate_vm', {'select': true});
this.datastoresTable = new DatastoresTable('migrate_vm_ds', {
'select': true,
'selectOptions': {
'filter_fn': function(ds) { return ds.TYPE == 1; } // Show system DS only
this.hostsTable = new HostsTable("migrate_vm", {"select": true});
this.datastoresTable = new DatastoresTable("migrate_vm_ds", {
"select": true,
"selectOptions": {
"filter_fn": function(ds) { return ds.TYPE == 1; } // Show system DS only
}
});
@ -77,9 +77,9 @@ define(function(require) {
function _html() {
return TemplateHTML({
'dialogId': this.dialogId,
'hostsTableHTML': this.hostsTable.dataTableHTML,
'datastoresTableHTML': this.datastoresTable.dataTableHTML
"dialogId": this.dialogId,
"hostsTableHTML": this.hostsTable.dataTableHTML,
"datastoresTableHTML": this.datastoresTable.dataTableHTML
});
}
@ -93,18 +93,18 @@ define(function(require) {
$("#enforce", context).attr("checked", Config.isFeatureEnabled("migrate_enforce"));
$('#' + DIALOG_ID + 'Form', context).submit(function() {
$("#" + DIALOG_ID + "Form", context).submit(function() {
var extra_info = {};
if ($("#selected_resource_id_migrate_vm", context).val()) {
extra_info['host_id'] = $("#selected_resource_id_migrate_vm", context).val();
extra_info["host_id"] = $("#selected_resource_id_migrate_vm", context).val();
} else {
Notifier.notifyError(Locale.tr("You have not selected a host"));
return false;
}
extra_info['ds_id'] = $("#selected_resource_id_migrate_vm_ds", context).val() || -1;
extra_info['enforce'] = $("#enforce", context).is(":checked");
extra_info["ds_id"] = $("#selected_resource_id_migrate_vm_ds", context).val() || -1;
extra_info["enforce"] = $("#enforce", context).is(":checked");
$.each(Sunstone.getDataTable(TAB_ID).elements(), function(index, elem) {
if (that.live) {
@ -130,25 +130,26 @@ define(function(require) {
this.datastoresTable.resetResourceTableSelect();
this.hostsTable.resetResourceTableSelect();
var vmTemplate = Sunstone.getElementRightInfo(TAB_ID);
var migrateWithDsSelection = true
var migrateWithDsSelection = true;
var vmHypervisor = OpenNebulaVM.getHypervisor(vmTemplate);
if (
this.live &&
vmTemplate &&
vmTemplate.USER_TEMPLATE &&
vmTemplate.USER_TEMPLATE.HYPERVISOR &&
Config && Config.onedConf && Config.onedConf.VM_MAD && Array.isArray(Config.onedConf.VM_MAD)
Config &&
Config.onedConf &&
Config.onedConf.VM_MAD &&
Array.isArray(Config.onedConf.VM_MAD)
) {
var hypervisor = $.grep(Config.onedConf.VM_MAD, function(n,i) {
return n.NAME && n.NAME === vmTemplate.USER_TEMPLATE.HYPERVISOR;
})
return n.NAME && n.NAME === vmHypervisor;
});
if (
!hypervisor[0] ||
!hypervisor[0].DS_LIVE_MIGRATION ||
hypervisor[0].DS_LIVE_MIGRATION !== "yes"
) {
migrateWithDsSelection = false
migrateWithDsSelection = false;
$(".migrate_vm_ds_selection", context).hide();
}
}
@ -166,19 +167,19 @@ define(function(require) {
var hostname = OpenNebulaVM.hostnameStr(element);
var datastore = OpenNebulaVM.datastoreStr(element);
var hostnameHtml = $('<span/>').css('font-weight', '600').text(hostname)
var datastoreHtml = $('<span/>').css('font-weight', '600').text(datastore)
var hostnameHtml = $("<span/>").css("font-weight", "600").text(hostname);
var datastoreHtml = $("<span/>").css("font-weight", "600").text(datastore);
var label = $('<span>', { class: 'radius secondary label' })
.append(Locale.tr("VM") + ' ' + element.ID + ' ' + element.NAME + ' ' +
Locale.tr("is currently running on Host") + ' ')
.append(hostnameHtml)
var label = $("<span>", { class: "radius secondary label" })
.append(Locale.tr("VM") + " " + element.ID + " " + element.NAME + " " +
Locale.tr("is currently running on Host") + " ")
.append(hostnameHtml);
migrateWithDsSelection && label
.append(' ' + Locale.tr("and Datastore") + ' ')
.append(datastoreHtml)
.append(" " + Locale.tr("and Datastore") + " ")
.append(datastoreHtml);
$('.confirm-resources-header', context).append(label)
$(".confirm-resources-header", context).append(label);
}
});
});