diff --git a/src/sunstone/public/app/utils/vcenter/templates.js b/src/sunstone/public/app/utils/vcenter/templates.js
index c6e438654c..012d6e5676 100644
--- a/src/sunstone/public/app/utils/vcenter/templates.js
+++ b/src/sunstone/public/app/utils/vcenter/templates.js
@@ -123,6 +123,24 @@ define(function(require) {
var trow = $(RowTemplate(opts)).appendTo(tbody);
+ $("#linked_clone_"+opts.id).on("change", function(){
+ if ($("#linked_clone_"+opts.id).is(":checked")){
+ $("#create_"+opts.id).show();
+ } else {
+ $("#create_"+opts.id).hide();
+ $("#create_copy_"+opts.id).prop("checked", false);
+ $("#name_"+opts.id).hide();
+ }
+ });
+
+ $("#create_copy_"+opts.id).on("change", function(){
+ if ($("#create_copy_"+opts.id).is(":checked")){
+ $("#name_"+opts.id).show();
+ } else {
+ $("#name_"+opts.id).hide();
+ }
+ });
+
$('.check_item', trow).data("import_data", element);
});
@@ -353,13 +371,13 @@ define(function(require) {
});
}
- if (disks_and_nets[index].type == "EXISTING_NIC") {
+ if (disks_and_nets[index] != undefined && disks_and_nets[index].type == "EXISTING_NIC") {
template += disks_and_nets[index].network_tmpl;
++index;
getNext();
}
- if (disks_and_nets[index].type === "DUPLICATED_NIC") {
+ if (disks_and_nets[index] != undefined && disks_and_nets[index].type == "DUPLICATED_NIC") {
var network_id = duplicated_nics[disks_and_nets[index].network_name];
template += "NIC=[\n";
@@ -394,6 +412,26 @@ define(function(require) {
var rpModify = $('.modify_rp', rpInput).val();
var rpInitial = $('.initial_rp', rpInput).val();
var rpParams = "";
+ var linkedClone = $('.linked_clone', rpInput).prop("checked");
+ var createCopy = $('.create_copy', rpInput).prop("checked");
+ var templateName = $('.template_name', rpInput).val();
+
+ var vcenter_ref = $(this).data("import_data").vcenter_ref;
+ if(linkedClone){
+ var linked = true;
+ if(createCopy && templateName != ""){
+ var copy = true;
+ var template_name = templateName;
+ } else {
+ var copy = false;
+ var template_name = "";
+ }
+ } else {
+ var template_name = "";
+ var linked = false;
+ var copy = false;
+ }
+
$.each($('.available_rps option:selected', rpInput), function(){
rpParams += $(this).val() + ",";
});
@@ -428,11 +466,8 @@ define(function(require) {
var template_json = {
"vmtemplate": { "template_raw": template }
};
-
- var vcenter_ref = $(this).data("import_data").vcenter_ref;
-
OpenNebulaTemplate.create({
- timeout: true,
+ timeout: false,
data: template_json,
success: function(request, response) {
VCenterCommon.importLoading({
@@ -445,7 +480,12 @@ define(function(require) {
$.ajax({
url: path,
type: "GET",
- data: {timeout: false},
+ data: {
+ timeout: false,
+ use_linked_clones: linked,
+ create_copy: copy,
+ template_name: template_name
+ },
headers: {
"X-VCENTER-USER": that.opts.vcenter_user,
"X-VCENTER-PASSWORD": that.opts.vcenter_password,
@@ -453,8 +493,29 @@ define(function(require) {
},
dataType: "json",
success: function(response){
- var disks_and_nets = response.disks.concat(response.nics)
- import_images_and_nets(disks_and_nets, row_context, template_id)
+ var disks_and_nets = response.disks.concat(response.nics);
+ var template_json = {
+ "vmtemplate": { "template_raw": response.one }
+ };
+ if(response.create_copy){
+ OpenNebulaTemplate.del({
+ timeout: true,
+ data : {
+ id : template_id
+ },
+ success: function(){
+ OpenNebulaTemplate.create({
+ timeout: false,
+ data: template_json,
+ success: function(request, response){
+ import_images_and_nets(disks_and_nets, row_context, response.VMTEMPLATE.ID);
+ }
+ });
+ }
+ });
+ } else {
+ import_images_and_nets(disks_and_nets, row_context, template_id);
+ }
},
error: function(response){
VCenterCommon.importFailure({
diff --git a/src/sunstone/public/app/utils/vcenter/templates/row.hbs b/src/sunstone/public/app/utils/vcenter/templates/row.hbs
index 77c7591257..21fd1d783e 100644
--- a/src/sunstone/public/app/utils/vcenter/templates/row.hbs
+++ b/src/sunstone/public/app/utils/vcenter/templates/row.hbs
@@ -60,10 +60,33 @@
+
{{/if}}
+
diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb
index f19bb5f5a2..9aa141e101 100644
--- a/src/sunstone/routes/vcenter.rb
+++ b/src/sunstone/routes/vcenter.rb
@@ -234,7 +234,6 @@ post '/vcenter/wild_rollback/:vm_id' do
end
end
-
get '/vcenter/template/:vcenter_ref/:template_id' do
begin
t = {}
@@ -246,6 +245,9 @@ get '/vcenter/template/:vcenter_ref/:template_id' do
ref = params[:vcenter_ref]
template_id = params[:template_id]
+ use_linked_clones = params[:use_linked_clones] || false
+ create_copy = params[:create_copy] || false
+ template_name = params[:template_name] || ""
if !ref || ref.empty?
msg = "No template ref specified"
@@ -290,62 +292,50 @@ get '/vcenter/template/:vcenter_ref/:template_id' do
end
# POST params
- if @request_body && !@request_body.empty?
- body_hash = JSON.parse(@request_body)
- use_linked_clones = body_hash['use_linked_clones'] || false
- create_copy = body_hash['create_copy'] || false
- template_name = body_hash['template_name'] || ""
+ if !use_linked_clones && (create_copy || !template_name.empty?)
+ msg = "Should not set create template copy or template copy name if not using linked clones"
+ logger.error("[vCenter] " + msg)
+ error = Error.new(msg)
+ error 403, error.to_json
+ end
- if !use_linked_clones && (create_copy || !template_name.empty?)
- msg = "Should not set create template copy or template copy name if not using linked clones"
- logger.error("[vCenter] " + msg)
- error = Error.new(msg)
- error 403, error.to_json
- end
+ if use_linked_clones && !create_copy && !template_name.empty?
+ msg = "Should not set template copy name if create template copy hasn't been selected"
+ logger.error("[vCenter] " + msg)
+ error = Error.new(msg)
+ error 403, error.to_json
+ end
- if use_linked_clones && !create_copy && !template_name.empty?
- msg = "Should not set template copy name if create template copy hasn't been selected"
- logger.error("[vCenter] " + msg)
- error = Error.new(msg)
- error 403, error.to_json
- end
+ if create_copy
- if create_copy
+ lc_error, template_copy_ref = template.create_template_copy(template_name)
- lc_error, template_copy_ref = template.create_template_copy(template_name)
-
- if template_copy_ref
-
- template = VCenterDriver::Template.new_from_ref(template_copy_ref, vcenter_client)
-
- one_template = VCenterDriver::Template.get_xml_template(template, vc_uuid, vcenter_client, vcenter_client.vim.host)
-
- if one_template
-
- lc_error, use_lc = template.create_delta_disks
- if !lc_error
- one_template[:one] << "\nVCENTER_LINKED_CLONES=\"YES\"\n"
- t = one_template
- append = false # t[:one] replaces the current template
- end
- else
- lc_error = "Could not obtain the info from the template's copy"
- template.delete_template if template_copy_ref
+ if template_copy_ref
+ template = VCenterDriver::Template.new_from_ref(template_copy_ref, vcenter_client)
+ one_template = VCenterDriver::Template.get_xml_template(template, vc_uuid, vcenter_client, vcenter_client.vim.host, "Datacenter")
+ if one_template
+ lc_error, use_lc = template.create_delta_disks
+ if !lc_error
+ one_template[:one] << "\nVCENTER_LINKED_CLONES=\"YES\"\n"
+ one_template[:create_copy] = "YES"
+ t = one_template
+ append = false # t[:one] replaces the current template
end
+ else
+ lc_error = "Could not obtain the info from the template's copy"
+ template.delete_template if template_copy_ref
end
-
- else
- lc_error, use_lc = template.create_delta_disks
- if !lc_error
- append = true
- t[:one] << "\nVCENTER_LINKED_CLONES=\"YES\"\n" if use_lc
- end
+ end
+ else
+ lc_error, use_lc = template.create_delta_disks
+ if !lc_error
+ append = true
+ t[:one] << "\nVCENTER_LINKED_CLONES=\"YES\"\n" if use_lc
end
end
# Create images or get disks information for template
error, template_disks = template.import_vcenter_disks(vc_uuid, dpool, ipool, true, template_id)
-
if !error.empty?
append = false
template.delete_template if template_copy_ref
@@ -387,7 +377,6 @@ get '/vcenter/template/:vcenter_ref/:template_id' do
t[:lc_error] = lc_error
t[:append] = append
-
[200, t.to_json]
rescue Exception => e
template.delete_template if template_copy_ref