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

Feature #3158: Force CONTEXT to be the last CDROM

This commit is contained in:
Carlos Martín 2014-10-20 16:38:19 +02:00
parent 24a50d6188
commit d691daf980

View File

@ -1683,9 +1683,6 @@ int VirtualMachine::get_disk_images(string& error_str)
vector<Attribute*>::iterator it;
// -------------------------------------------------------------------------
// The context is the first of the cdroms
// -------------------------------------------------------------------------
num_context = user_obj_template->remove("CONTEXT", context_disks);
num_disks = user_obj_template->remove("DISK", disks);
@ -1704,35 +1701,6 @@ int VirtualMachine::get_disk_images(string& error_str)
goto error_max_disks;
}
if ( num_context > 0 )
{
disk = dynamic_cast<VectorAttribute * >(context_disks[0]);
if ( disk != 0 )
{
target = disk->vector_value("TARGET");
if ( !target.empty() )
{
used_targets.insert(target);
}
else
{
dev_prefix = disk->vector_value("DEV_PREFIX");
if ( dev_prefix.empty() )
{
dev_prefix = ipool->default_cdrom_dev_prefix();
}
cdrom_disks.push(make_pair(dev_prefix, disk));
}
// Disk IDs are 0..num-1, context disk is is num
disk->replace("DISK_ID", num_disks);
}
}
// -------------------------------------------------------------------------
// Set DISK attributes & Targets
// -------------------------------------------------------------------------
@ -1805,6 +1773,41 @@ int VirtualMachine::get_disk_images(string& error_str)
}
}
// -------------------------------------------------------------------------
// The context is the last of the cdroms
// -------------------------------------------------------------------------
if ( num_context > 0 )
{
disk = dynamic_cast<VectorAttribute * >(context_disks[0]);
if ( disk != 0 )
{
target = disk->vector_value("TARGET");
if ( !target.empty() )
{
if ( used_targets.insert(target).second == false )
{
goto error_duplicated_target;
}
}
else
{
dev_prefix = disk->vector_value("DEV_PREFIX");
if ( dev_prefix.empty() )
{
dev_prefix = ipool->default_cdrom_dev_prefix();
}
cdrom_disks.push(make_pair(dev_prefix, disk));
}
// Disk IDs are 0..num-1, context disk is is num
disk->replace("DISK_ID", num_disks);
}
}
assign_disk_targets(os_disk, used_targets);
assign_disk_targets(cdrom_disks, used_targets);
assign_disk_targets(datablock_disks, used_targets);