mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-23 22:50:09 +03:00
B #5429: Linked clones are always created when importing templates
(cherry picked from commit bbd05b3785ee88d5bed398406e2446bbdff3ea7e)
This commit is contained in:
parent
59ef8a193e
commit
f533249494
@ -407,7 +407,6 @@ define(function(require) {
|
||||
getNext();
|
||||
}
|
||||
|
||||
|
||||
function _import(context) {
|
||||
that = this;
|
||||
$.each($(".vcenter_import_table", context), function() {
|
||||
@ -429,9 +428,10 @@ define(function(require) {
|
||||
var templateName = $('.template_name', rpInput).val();
|
||||
|
||||
var vcenter_ref = $(this).data("import_data").vcenter_ref;
|
||||
if(linkedClone){
|
||||
if (linkedClone) {
|
||||
var linked = true;
|
||||
if(createCopy && templateName != ""){
|
||||
|
||||
if (createCopy && templateName != "") {
|
||||
var copy = true;
|
||||
var template_name = templateName;
|
||||
} else {
|
||||
@ -474,6 +474,10 @@ define(function(require) {
|
||||
template += "\nUSER_INPUTS=[\n" + userInputs.join(",\n") + "]";
|
||||
}
|
||||
|
||||
if (linked) {
|
||||
template += "\nVCENTER_LINKED_CLONES=\"YES\"";
|
||||
}
|
||||
|
||||
if($(this).data("import_data").import_disks_and_nics){
|
||||
var template_json = {
|
||||
"vmtemplate": { "template_raw": template }
|
||||
@ -506,9 +510,11 @@ define(function(require) {
|
||||
dataType: "json",
|
||||
success: function(response){
|
||||
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,
|
||||
@ -591,4 +597,4 @@ define(function(require) {
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -27,7 +27,6 @@ MAX_VCENTER_PASSWORD_LENGTH = 22 #This is the maximum length for a vCenter passw
|
||||
|
||||
require 'vcenter_driver'
|
||||
|
||||
|
||||
helpers do
|
||||
def vcenter_client
|
||||
hpref = "HTTP-"
|
||||
@ -79,7 +78,12 @@ helpers do
|
||||
:user => vuser,
|
||||
:password => vpass,
|
||||
:host => vhost})
|
||||
end
|
||||
|
||||
def return_error(code, msg)
|
||||
logger.error("[vCenter] " + msg.to_s)
|
||||
error = Error.new(msg.to_s)
|
||||
error code, error.to_json
|
||||
end
|
||||
|
||||
# def af_format_response(resp)
|
||||
@ -237,23 +241,22 @@ end
|
||||
get '/vcenter/template/:vcenter_ref/:template_id' do
|
||||
begin
|
||||
t = {}
|
||||
t[:one] = ""
|
||||
template_copy_ref = nil
|
||||
template = nil
|
||||
append = true
|
||||
lc_error = nil
|
||||
|
||||
ref = params[:vcenter_ref]
|
||||
template_id = params[:template_id]
|
||||
t[:one] = ""
|
||||
template_copy_ref = nil
|
||||
template = nil
|
||||
append = true
|
||||
lc_error = nil
|
||||
|
||||
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] || ""
|
||||
create_copy = params[:create_copy] != "false"
|
||||
template_name = params[:template_name] || ""
|
||||
|
||||
if !ref || ref.empty?
|
||||
msg = "No template ref specified"
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
return_error(404, msg)
|
||||
end
|
||||
|
||||
template = VCenterDriver::Template.new_from_ref(ref, vcenter_client)
|
||||
@ -262,127 +265,95 @@ get '/vcenter/template/:vcenter_ref/:template_id' do
|
||||
dpool = VCenterDriver::VIHelper.one_pool(OpenNebula::DatastorePool)
|
||||
if dpool.respond_to?(:message)
|
||||
msg = "Could not get OpenNebula DatastorePool: #{dpool.message}"
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
return_error(404, msg)
|
||||
end
|
||||
|
||||
ipool = VCenterDriver::VIHelper.one_pool(OpenNebula::ImagePool)
|
||||
if ipool.respond_to?(:message)
|
||||
msg = "Could not get OpenNebula ImagePool: #{ipool.message}"
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
return_error(404, msg)
|
||||
end
|
||||
|
||||
npool = VCenterDriver::VIHelper.one_pool(OpenNebula::VirtualNetworkPool)
|
||||
if npool.respond_to?(:message)
|
||||
msg = "Could not get OpenNebula VirtualNetworkPool: #{npool.message}"
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
return_error(404, msg)
|
||||
end
|
||||
|
||||
hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool)
|
||||
if hpool.respond_to?(:message)
|
||||
msg = "Could not get OpenNebula HostPool: #{hpool.message}"
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
return_error(404, msg)
|
||||
end
|
||||
|
||||
# POST params
|
||||
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
|
||||
return_error(404, msg)
|
||||
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
|
||||
return_error(404, msg)
|
||||
end
|
||||
|
||||
if create_copy
|
||||
if use_linked_clones
|
||||
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, "Datacenter")
|
||||
|
||||
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
|
||||
if one_template
|
||||
lc_error, use_lc = template.create_delta_disks
|
||||
if lc_error.nil?
|
||||
one_template[:create_copy] = "YES"
|
||||
one_template[:one] << "\nVCENTER_LINKED_CLONES=\"YES\"\n"
|
||||
t = one_template
|
||||
else
|
||||
return_error(404, lc_error)
|
||||
end
|
||||
else
|
||||
lc_error = "Could not obtain the info from the template's copy"
|
||||
return_error(404, lc_error)
|
||||
end
|
||||
else
|
||||
lc_error = "Could not obtain the info from the template's copy"
|
||||
template.delete_template if template_copy_ref
|
||||
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
|
||||
else
|
||||
lc_error, use_lc = template.create_delta_disks
|
||||
if lc_error && use_lc
|
||||
return_error(404, lc_error)
|
||||
end
|
||||
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
|
||||
msg = error
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
end
|
||||
|
||||
#t[:one] << template_disks
|
||||
t[:disks] = template_disks
|
||||
raise error if !error.empty?
|
||||
|
||||
template_moref = template_copy_ref ? template_copy_ref : ref
|
||||
|
||||
wild = false #We're importing templates not wild vms
|
||||
|
||||
# Create images or get nics information for template
|
||||
error, template_nics = template.import_vcenter_nics(vc_uuid,
|
||||
npool,
|
||||
hpool,
|
||||
vcenter_client.vim.host,
|
||||
template_moref,
|
||||
wild,
|
||||
false,
|
||||
true,
|
||||
template["name"],
|
||||
template_id)
|
||||
|
||||
if !error.empty?
|
||||
append = false
|
||||
template.delete_template if template_copy_ref
|
||||
msg = error
|
||||
logger.error("[vCenter] " + msg)
|
||||
error = Error.new(msg)
|
||||
error 404, error.to_json
|
||||
end
|
||||
|
||||
#t[:one] << template_nics
|
||||
t[:nics] = template_nics
|
||||
raise error if !error.empty?
|
||||
|
||||
t[:disks] = template_disks
|
||||
t[:nics] = template_nics
|
||||
t[:lc_error] = lc_error
|
||||
t[:append] = append
|
||||
|
||||
[200, t.to_json]
|
||||
rescue Exception => e
|
||||
template.delete_template if template_copy_ref
|
||||
logger.error("[vCenter] " + e.message)
|
||||
error = Error.new(e.message)
|
||||
error 403, error.to_json
|
||||
return_error(e.message, 403)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -419,7 +419,7 @@ before do
|
||||
|
||||
client = $cloud_auth.client(session[:user], session[:active_zone_endpoint])
|
||||
|
||||
@SunstoneServer = SunstoneServer.new(client,$conf,logger)
|
||||
@SunstoneServer = SunstoneServer.new(client, $conf, logger)
|
||||
end
|
||||
|
||||
after do
|
||||
|
@ -753,7 +753,6 @@ class Template
|
||||
end
|
||||
|
||||
def self.get_xml_template(template, vcenter_uuid, vi_client, vcenter_instance_name=nil, dc_name=nil, rp_cache={})
|
||||
|
||||
begin
|
||||
template_ref = template['_ref']
|
||||
template_name = template["name"]
|
||||
|
Loading…
x
Reference in New Issue
Block a user