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

B #4238: Fix vnets parameters in oneflow templates (#4251)

Co-authored-by: Tino Vázquez <cvazquez@opennebula.systems>
This commit is contained in:
Sergio Betanzos 2020-02-24 18:41:42 +01:00 committed by GitHub
parent df7e2ea50b
commit fc39ec6967
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 127 additions and 33 deletions

View File

@ -127,14 +127,14 @@ define(function(require) {
$(".add_service_network", context).trigger("click");
context.on("change", ".service_network_name", function(){
_redo_service_networks_selector(context);
_redo_service_networks_selector(context, that);
});
context.on("click", ".service_networks i.remove-tab", function(){
var tr = $(this).closest('tr');
tr.remove();
_redo_service_networks_selector(context);
_redo_service_networks_selector(context, that);
});
$("#tf_btn_roles", context).bind("click", function(){
@ -412,10 +412,14 @@ define(function(require) {
//----------------------------------------------------------------------------
function _redo_service_networks_selector(dialog){
function _redo_service_networks_selector(dialog, that){
$('#roles_tabs_content .role_content', dialog).each(function(){
var role_section = this;
_redo_service_networks_selector_role(dialog, role_section);
$(Object.values(that.roleTabObjects)).each(function(_, section) {
section && section.refresh(role_section);
});
});
}
@ -429,22 +433,36 @@ define(function(require) {
});
$(".networks_role", role_section).hide();
$(".networks_role_rdp", role_section).hide();
var service_networks = false;
var role_tab_id = $(role_section).attr('id');
var str = "";
$(".service_networks .service_network_name", dialog).each(function(){
if ($(this).val()) {
$(".service_networks .service_network_name", dialog).each(function(index, input){
var pattern = $("input.service_network_name").not(input).map(function(_, v) {
return $(v).val();
}).get().join("|");
$(this).attr("pattern", "^(?!"+pattern+")(\\w+)$");
var valueNetwork = $(this).val();
var regexp = new RegExp("^(?!"+pattern+")(\\w+)$", "gi");
if (valueNetwork && valueNetwork.match(regexp)) {
service_networks = true;
str += "<tr>\
<td style='width:10%'>\
<input class='service_network_checkbox check_item' type='checkbox' value='"+$(this).val()+"' id='"+role_tab_id+"_"+$(this).val()+"'/>\
</td>\
<td>\
<label for='"+role_tab_id+"_"+$(this).val()+"'>"+$(this).val()+"</label>\
</td>\
</tr>";
var idNetwork = role_tab_id + "_" + index;
var idName = idNetwork + "_name";
str += "<tr id='"+idNetwork+"'>\
<td style='width:10%'>\
<input class='service_network_checkbox check_item'\
type='checkbox' value='"+valueNetwork+"' id='"+idName+"' data-index='"+index+"'/>\
</td>\
<td>\
<label for='"+idName+"'>"+valueNetwork+"</label>\
</td>\
</tr>";
}
});
@ -452,9 +470,9 @@ define(function(require) {
if (service_networks) {
$(".networks_role", role_section).show();
$(".networks_role_rdp", role_section).show();
}
$.each(selected_networks, function(){
$(".service_network_checkbox[value='"+this+"']", role_section).attr('checked', true).change();
});

View File

@ -27,7 +27,8 @@ define(function(require) {
function RoleTab(html_role_id) {
this.html_role_id = html_role_id;
this.old_template = "";
this.global_template = {};
this.refresh = _refreshVMTemplate;
return this;
}
@ -99,26 +100,68 @@ define(function(require) {
$("#tf_btn_elas_policies", role_section).trigger("click");
$("#tf_btn_sche_policies", role_section).trigger("click");
var textareaTemplate = $(".vm_template_contents", role_section);
role_section.on("change", ".service_network_checkbox", role_section, function(){
if (this.checked) {
if (that.old_template === "") {
var vm_template_contents = { NIC: [] };
// Network values
var index = $(this).data("index");
var name = $(this).val();
updateOptionsRDP(that.global_template, role_section);
(this.checked)
? that.global_template[index] = { "NETWORK_ID": "$"+name }
: delete that.global_template[index];
$(".service_network_checkbox:checked", role_section).each(function(){
vm_template_contents["NIC"].push({"NETWORK_ID":"$"+$(this).val()});
});
updateTextareaTemplate(role_section, that.global_template);
});
textareaTemplate.val(TemplateUtils.templateToString(vm_template_contents));
}
else {
textareaTemplate.val(TemplateUtils.stringToTemplate(that.old_template));
}
role_section.on("change", ".networks_role_rdp select#rdp", role_section, function(){
var valueSelected = this.value;
// delete RDP in global template when is
$.each(Object.entries(that.global_template), function(_, network) {
var nicIndex = network[0];
var nicTemplate = network[1];
(nicIndex !== valueSelected && nicTemplate["RDP"])
&& delete that.global_template[nicIndex]["RDP"];
});
if (valueSelected !== "" && that.global_template[valueSelected]) {
that.global_template[valueSelected]["RDP"] = "yes";
}
else {
that.old_template = textareaTemplate.val();
textareaTemplate.val("");
updateTextareaTemplate(role_section, that.global_template);
});
}
function updateTextareaTemplate(roleContext, currentTemplate) {
// create a correct template with new changes
var newTemplate = TemplateUtils.templateToString({
NIC: Object.values(currentTemplate)
});
var textareaTemplate = $(".vm_template_contents", roleContext);
textareaTemplate.val(newTemplate);
}
function updateOptionsRDP(currentTemplate, context) {
var selectRDP = $(".networks_role_rdp select#rdp", context);
// empty all options in select rdp
selectRDP.empty();
selectRDP.append("<option value=''></option>")
$(".service_network_checkbox:checked", context).each(function () {
var index = $(this).data("index");
var name = $(this).val();
selectRDP.append("<option value='"+index+"'>"+name+"</option>")
});
// if some nic has RDP, update selector
$.each(Object.entries(currentTemplate), function(_, nic) {
var nicIndex = nic[0];
var nicTemplate = nic[1];
if (nicTemplate["RDP"] && nicTemplate["RDP"] === "yes") {
selectRDP.val(nicIndex);
}
});
}
@ -198,14 +241,16 @@ define(function(require) {
}
function _fill(context, value, network_names) {
var that = this;
$("#role_name", context).val(value.name);
$("#role_name", context).change();
$("#cardinality", context).val(value.cardinality);
this.templatesTable.selectResourceTableSelect({ids : value.vm_template});
that.templatesTable.selectResourceTableSelect({ids : value.vm_template});
if (value.vm_template_contents){
// check all networks appear in vm template
$(network_names).each(function(){
var reg = new RegExp("\\$"+this+"\\b");
@ -214,7 +259,23 @@ define(function(require) {
}
});
$(".vm_template_contents", context).val(value.vm_template_contents);
// map template
var template = TemplateUtils.stringToTemplate(value.vm_template_contents)["NIC"];
$(network_names).each(function(index, name) {
var nicTemplate = $.grep(template, function(nic) {
return (nic["NETWORK_ID"] === "$"+name) && nic;
})
if (nicTemplate && nicTemplate[0]) {
that.global_template[String(index)] = nicTemplate[0];
}
});
// update textarea template content
updateTextareaTemplate(context, that.global_template);
// update options for RDP
updateOptionsRDP(that.global_template, context);
}
$("select[name='shutdown_action_role']", context).val(value.shutdown_action);
@ -266,6 +327,15 @@ define(function(require) {
}
}
function _refreshVMTemplate(role_section) {
var that = this;
$.grep($(".service_network_checkbox:not(:checked)", role_section), function (nic) {
delete that.global_template[$(nic).data("index")];
});
updateTextareaTemplate(role_section, that.global_template);
}
//----------------------------------------------------------------------------
function _removeEmptyObjects(obj){

View File

@ -51,6 +51,12 @@
<tbody class="networks_role_body">
</tbody>
</table>
<div class="form-group networks_role_rdp">
<label for="rdp">RDP</label>
<select class="form-control" id="rdp">
<option value=""></option>
</select>
</div>
</div>
<div class="service_template_param service_role medium-6 columns">
<table class="parent_roles dataTable">