mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-20 10:50:08 +03:00
feature #3357: Add option to disable capacity and network selects per template
This commit is contained in:
parent
1ea4c1a8d6
commit
d1d0e7f5b2
@ -90,6 +90,17 @@ module OpenNebulaJSON
|
||||
|
||||
def instantiate(params=Hash.new)
|
||||
if params['template']
|
||||
select_capacity = self['TEMPLATE/SUNSTONE_CAPACITY_SELECT']
|
||||
if (select_capacity && select_capacity.upcase == "NO")
|
||||
params['template'].delete("CPU")
|
||||
params['template'].delete("MEMORY")
|
||||
end
|
||||
|
||||
select_network = self['TEMPLATE/SUNSTONE_NETWORK_SELECT']
|
||||
if (select_network && select_network.upcase == "NO")
|
||||
params['template'].delete("NIC")
|
||||
end
|
||||
|
||||
template = template_to_str(params['template'])
|
||||
super(params['vm_name'], params['hold'], template)
|
||||
else
|
||||
|
@ -554,16 +554,14 @@ var provision_create_vm = '<form id="provision_create_vm" class="hidden section_
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
(Config.provision.create_vm.isEnabled("capacity_select") ?
|
||||
'<div class="provision_capacity_selector">'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<br>' : '') +
|
||||
(Config.provision.create_vm.isEnabled("network_select") ?
|
||||
'<div class="provision_network_selector">'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<br>' : '') +
|
||||
'<div class="provision_capacity_selector">'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<br>' +
|
||||
'<div class="provision_network_selector">'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<br>' +
|
||||
'<div class="provision_custom_attributes_selector">'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
@ -2265,6 +2263,7 @@ function generate_provision_instance_type_accordion(context, capacity) {
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
(Config.provision.create_vm.isEnabled("capacity_select") && (capacity.SUNSTONE_CAPACITY_SELECT != "NO") ?
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
@ -2301,7 +2300,7 @@ function generate_provision_instance_type_accordion(context, capacity) {
|
||||
'</dd>'+
|
||||
'</dl>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'</div>' : '' ) +
|
||||
'<br>');
|
||||
|
||||
var cost = 0;
|
||||
@ -2323,118 +2322,120 @@ function generate_provision_instance_type_accordion(context, capacity) {
|
||||
$(".provision_create_template_cost_div").hide();
|
||||
}
|
||||
|
||||
provision_instance_type_accordion_id += 1;
|
||||
if (Config.provision.create_vm.isEnabled("capacity_select") && (capacity.SUNSTONE_CAPACITY_SELECT != "NO")) {
|
||||
provision_instance_type_accordion_id += 1;
|
||||
|
||||
var provision_instance_types_datatable = $('.provision_instance_types_table', context).dataTable({
|
||||
"iDisplayLength": 6,
|
||||
"sDom" : '<"H">t<"F"lp>',
|
||||
"bSort" : false,
|
||||
"aLengthMenu": [[6, 12, 36, 72], [6, 12, 36, 72]],
|
||||
"aoColumnDefs": [
|
||||
{ "bVisible": false, "aTargets": ["all"]}
|
||||
],
|
||||
"aoColumns": [
|
||||
{ "mDataProp": "name" }
|
||||
],
|
||||
"fnPreDrawCallback": function (oSettings) {
|
||||
// create a thumbs container if it doesn't exist. put it in the dataTables_scrollbody div
|
||||
if (this.$('tr', {"filter": "applied"} ).length == 0) {
|
||||
this.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
tr("There are no instance_types available. Please contact your cloud administrator")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
var provision_instance_types_datatable = $('.provision_instance_types_table', context).dataTable({
|
||||
"iDisplayLength": 6,
|
||||
"sDom" : '<"H">t<"F"lp>',
|
||||
"bSort" : false,
|
||||
"aLengthMenu": [[6, 12, 36, 72], [6, 12, 36, 72]],
|
||||
"aoColumnDefs": [
|
||||
{ "bVisible": false, "aTargets": ["all"]}
|
||||
],
|
||||
"aoColumns": [
|
||||
{ "mDataProp": "name" }
|
||||
],
|
||||
"fnPreDrawCallback": function (oSettings) {
|
||||
// create a thumbs container if it doesn't exist. put it in the dataTables_scrollbody div
|
||||
if (this.$('tr', {"filter": "applied"} ).length == 0) {
|
||||
this.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
tr("There are no instance_types available. Please contact your cloud administrator")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
} else {
|
||||
$(".provision_instance_types_table", context).html(
|
||||
'<ul class="provision_instance_types_ul large-block-grid-3 medium-block-grid-3 small-block-grid-1 text-center">'+
|
||||
'</ul>');
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
||||
var data = aData;
|
||||
|
||||
var li = $('<li>'+
|
||||
'<ul class="provision-pricing-table hoverable only-one" cpu="'+data.cpu+'" memory="'+data.memory+'">'+
|
||||
'<li class="provision-title" title="'+data.name+'">'+
|
||||
data.name+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item">'+
|
||||
'<span style="font-size: 40px">'+
|
||||
'<i class="fa fa-fw fa-laptop"/> '+
|
||||
'<span style="vertical-align: middle; font-size:14px">'+
|
||||
'x'+data.cpu+' - '+
|
||||
((data.memory > 1000) ?
|
||||
(Math.floor(data.memory/1024)+'GB') :
|
||||
(data.memory+'MB'))+
|
||||
'</span>'+
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'<li class="provision-description">'+
|
||||
(data.description || '')+
|
||||
'</li>'+
|
||||
'</ul>'+
|
||||
'</li>').appendTo($(".provision_instance_types_ul", context));
|
||||
|
||||
$(".provision-pricing-table", li).data("opennebula", data)
|
||||
|
||||
return nRow;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('.provision-search-input', context).on('keyup',function(){
|
||||
provision_instance_types_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
$('.provision-search-input', context).on('change',function(){
|
||||
provision_instance_types_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
context.on("click", ".provision-pricing-table.only-one" , function(){
|
||||
$(".cpu_value", context).html($(this).attr("cpu"));
|
||||
|
||||
var memory_value;
|
||||
var memory_unit;
|
||||
|
||||
if ($(this).attr("memory") > 1000){
|
||||
memory_value = Math.floor($(this).attr("memory")/1024);
|
||||
memory_unit = "GB";
|
||||
} else {
|
||||
$(".provision_instance_types_table", context).html(
|
||||
'<ul class="provision_instance_types_ul large-block-grid-3 medium-block-grid-3 small-block-grid-1 text-center">'+
|
||||
'</ul>');
|
||||
memory_value = $(this).attr("memory");
|
||||
memory_unit = "MB";
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
||||
var data = aData;
|
||||
$(".memory_value", context).html(memory_value);
|
||||
$(".memory_unit", context).html(memory_unit);
|
||||
|
||||
var li = $('<li>'+
|
||||
'<ul class="provision-pricing-table hoverable only-one" cpu="'+data.cpu+'" memory="'+data.memory+'">'+
|
||||
'<li class="provision-title" title="'+data.name+'">'+
|
||||
data.name+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item">'+
|
||||
'<span style="font-size: 40px">'+
|
||||
'<i class="fa fa-fw fa-laptop"/> '+
|
||||
'<span style="vertical-align: middle; font-size:14px">'+
|
||||
'x'+data.cpu+' - '+
|
||||
((data.memory > 1000) ?
|
||||
(Math.floor(data.memory/1024)+'GB') :
|
||||
(data.memory+'MB'))+
|
||||
'</span>'+
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'<li class="provision-description">'+
|
||||
(data.description || '')+
|
||||
'</li>'+
|
||||
'</ul>'+
|
||||
'</li>').appendTo($(".provision_instance_types_ul", context));
|
||||
if (Config.isFeatureEnabled("showback")) {
|
||||
var cost = 0;
|
||||
|
||||
$(".provision-pricing-table", li).data("opennebula", data)
|
||||
if ($(".cost_value").data("CPU_COST")) {
|
||||
cost += $(this).attr("cpu") * $(".cost_value").data("CPU_COST")
|
||||
}
|
||||
|
||||
return nRow;
|
||||
}
|
||||
});
|
||||
if ($(".cost_value").data("MEMORY_COST")) {
|
||||
cost += $(this).attr("memory") * $(".cost_value").data("MEMORY_COST")
|
||||
}
|
||||
|
||||
|
||||
$('.provision-search-input', context).on('keyup',function(){
|
||||
provision_instance_types_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
$('.provision-search-input', context).on('change',function(){
|
||||
provision_instance_types_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
context.on("click", ".provision-pricing-table.only-one" , function(){
|
||||
$(".cpu_value", context).html($(this).attr("cpu"));
|
||||
|
||||
var memory_value;
|
||||
var memory_unit;
|
||||
|
||||
if ($(this).attr("memory") > 1000){
|
||||
memory_value = Math.floor($(this).attr("memory")/1024);
|
||||
memory_unit = "GB";
|
||||
} else {
|
||||
memory_value = $(this).attr("memory");
|
||||
memory_unit = "MB";
|
||||
}
|
||||
|
||||
$(".memory_value", context).html(memory_value);
|
||||
$(".memory_unit", context).html(memory_unit);
|
||||
|
||||
if (Config.isFeatureEnabled("showback")) {
|
||||
var cost = 0;
|
||||
|
||||
if ($(".cost_value").data("CPU_COST")) {
|
||||
cost += $(this).attr("cpu") * $(".cost_value").data("CPU_COST")
|
||||
$(".cost_value").html(cost);
|
||||
}
|
||||
|
||||
if ($(".cost_value").data("MEMORY_COST")) {
|
||||
cost += $(this).attr("memory") * $(".cost_value").data("MEMORY_COST")
|
||||
}
|
||||
$('.accordion a', context).first().trigger("click");
|
||||
})
|
||||
|
||||
$(".cost_value").html(cost);
|
||||
}
|
||||
$(document).foundation();
|
||||
|
||||
$('.accordion a', context).first().trigger("click");
|
||||
})
|
||||
|
||||
$(document).foundation();
|
||||
|
||||
update_provision_instance_types_datatable(provision_instance_types_datatable);
|
||||
update_provision_instance_types_datatable(provision_instance_types_datatable);
|
||||
}
|
||||
}
|
||||
|
||||
var provision_nic_accordion_id = 0;
|
||||
@ -6295,13 +6296,11 @@ $(document).ready(function(){
|
||||
|
||||
$(".provision_accordion_template a").first().trigger("click");
|
||||
|
||||
if (Config.provision.create_vm.isEnabled("capacity_select")) {
|
||||
generate_provision_instance_type_accordion(
|
||||
$(".provision_capacity_selector", create_vm_context),
|
||||
template_json.VMTEMPLATE.TEMPLATE);
|
||||
};
|
||||
generate_provision_instance_type_accordion(
|
||||
$(".provision_capacity_selector", create_vm_context),
|
||||
template_json.VMTEMPLATE.TEMPLATE);
|
||||
|
||||
if (Config.provision.create_vm.isEnabled("network_select")) {
|
||||
if (Config.provision.create_vm.isEnabled("network_select") && (template_json.VMTEMPLATE.TEMPLATE.SUNSTONE_NETWORK_SELECT != "NO")) {
|
||||
generate_provision_network_accordion(
|
||||
$(".provision_network_selector", create_vm_context));
|
||||
|
||||
@ -6310,8 +6309,10 @@ $(document).ready(function(){
|
||||
$(".provision_nic_accordion", create_vm_context),
|
||||
nic);
|
||||
})
|
||||
} else {
|
||||
$(".provision_network_selector", create_vm_context).html("");
|
||||
}
|
||||
|
||||
|
||||
if (template_json.VMTEMPLATE.TEMPLATE.USER_INPUTS) {
|
||||
generate_custom_attrs(
|
||||
$(".provision_custom_attributes_selector", create_vm_context),
|
||||
|
@ -1808,7 +1808,23 @@ function generate_capacity_tab_content() {
|
||||
'<input type="text" id="vcenter_template_uuid" name="name"/>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
generate_capacity_inputs();
|
||||
generate_capacity_inputs() +
|
||||
'<div class="row">'+
|
||||
'<div class="large-6 columns">'+
|
||||
'<input type="checkbox" id="sunstone_capacity_select" name="name"/>'+
|
||||
'<label for="sunstone_capacity_select">'+tr("Do not allow to change capacity")+'\
|
||||
<span class="tip">'+tr("Users using the cloud view will not be able to select a new capacity for this template") + '</span>\
|
||||
</label>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-6 columns">'+
|
||||
'<input type="checkbox" id="sunstone_network_select" name="name"/>'+
|
||||
'<label for="sunstone_network_select">'+tr("Do not allow to modify network configuration")+'\
|
||||
<span class="tip">'+tr("Users using the cloud view will not be able to remove or add new NICs")+'</span>\
|
||||
</label>'+
|
||||
'</div>'+
|
||||
'</div>';
|
||||
|
||||
return html;
|
||||
}
|
||||
@ -3890,6 +3906,19 @@ function build_template(dialog){
|
||||
addSectionJSON(vm_json,$('#capacityTab',dialog));
|
||||
vm_json["DESCRIPTION"] = $('#DESCRIPTION',$('#capacityTab',dialog)).val();
|
||||
vm_json["LOGO"] = $('#LOGO',$('#capacityTab',dialog)).val();
|
||||
|
||||
if ($('input#sunstone_capacity_select:checked', $('#capacityTab',dialog)).length > 0) {
|
||||
vm_json["SUNSTONE_CAPACITY_SELECT"] = "NO"
|
||||
} else {
|
||||
vm_json["SUNSTONE_CAPACITY_SELECT"] = "YES"
|
||||
}
|
||||
|
||||
if ($('input#sunstone_network_select:checked', $('#capacityTab',dialog)).length > 0) {
|
||||
vm_json["SUNSTONE_NETWORK_SELECT"] = "NO"
|
||||
} else {
|
||||
vm_json["SUNSTONE_NETWORK_SELECT"] = "YES"
|
||||
}
|
||||
|
||||
var hypervisor = $('input[name="hypervisor"]:checked', $('#capacityTab',dialog)).val();
|
||||
vm_json["HYPERVISOR"] = hypervisor;
|
||||
if (hypervisor == "vcenter") {
|
||||
@ -4126,6 +4155,18 @@ var fillTemplatePopUp = function(template, dialog){
|
||||
$("#DESCRIPTION", capacity_section).val(escapeDoubleQuotes(htmlDecode(template["DESCRIPTION"])));
|
||||
delete template["DESCRIPTION"];
|
||||
|
||||
if (template["SUNSTONE_CAPACITY_SELECT"] && (template["SUNSTONE_CAPACITY_SELECT"].toUpperCase() == "NO")) {
|
||||
$("#sunstone_capacity_select", capacity_section).attr("checked", "checked");
|
||||
}
|
||||
|
||||
delete template["SUNSTONE_CAPACITY_SELECT"];
|
||||
|
||||
if (template["SUNSTONE_NETWORK_SELECT"] && (template["SUNSTONE_NETWORK_SELECT"].toUpperCase() == "NO")) {
|
||||
$("#sunstone_network_select", capacity_section).attr("checked", "checked");
|
||||
}
|
||||
|
||||
delete template["SUNSTONE_NETWORK_SELECT"];
|
||||
|
||||
if (template["HYPERVISOR"]) {
|
||||
$("input[name='hypervisor'][value='"+template["HYPERVISOR"]+"']", capacity_section).trigger("click")
|
||||
delete template["HYPERVISOR"];
|
||||
|
Loading…
x
Reference in New Issue
Block a user