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

feature #3987: Extend volatile DISK attribute with Datastore atttributes

This commit is contained in:
Ruben S. Montero 2015-10-29 00:02:26 +01:00
parent dd882538eb
commit e7349889a0
4 changed files with 61 additions and 11 deletions

View File

@ -1405,6 +1405,13 @@ public:
*/
static void disk_extended_info(int uid,
VirtualMachineTemplate *tmpl);
/**
* Adds extra info to the volatile disks of the given VM, ds inherited
* attributes and TYPE
* @param uid for template owner
* @param tmpl the virtual machine template
*/
void volatile_disk_extended_info();
// -------------------------------------------------------------------------
// Hotplug related functions

View File

@ -148,6 +148,12 @@ void Datastore::disk_attribute(
disk->replace(*it, inherit_val);
}
}
//Initialize TYPE for volatile disks
if (disk->vector_value("TYPE").empty())
{
disk->replace("TYPE", Image::disk_type_to_str(get_disk_type()));
}
}
/* ************************************************************************ */

View File

@ -836,7 +836,7 @@ void VirtualMachineDeploy::request_execute(xmlrpc_c::paramList const& paramList,
}
// ------------------------------------------------------------------------
// Add a new history record and deploy the VM
// Add a new history record and update volatile DISK info
// ------------------------------------------------------------------------
if (add_history(vm,
@ -854,6 +854,12 @@ void VirtualMachineDeploy::request_execute(xmlrpc_c::paramList const& paramList,
return;
}
vm->volatile_disk_extended_info();
// ------------------------------------------------------------------------
// deploy the VM
// ------------------------------------------------------------------------
if (vm->is_imported())
{
dm->import(vm);
@ -1134,7 +1140,7 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList
}
// ------------------------------------------------------------------------
// Add a new history record and migrate the VM
// Add a new history record and update volatile DISK attributes
// ------------------------------------------------------------------------
if ( (vm = get_vm(id, att)) == 0 )
@ -1157,6 +1163,12 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList
return;
}
vm->volatile_disk_extended_info();
// ------------------------------------------------------------------------
// Migrate the VM
// ------------------------------------------------------------------------
if (live == true && vm->get_lcm_state() == VirtualMachine::RUNNING )
{
dm->live_migrate(vm);

View File

@ -1925,15 +1925,15 @@ int VirtualMachine::get_disk_images(string& error_str)
disk = static_cast<VectorAttribute * >(disks[i]);
rc = ipool->acquire_disk( oid,
disk,
i,
img_type,
dev_prefix,
uid,
image_id,
&snap,
error_str);
rc = ipool->acquire_disk(oid,
disk,
i,
img_type,
dev_prefix,
uid,
image_id,
&snap,
error_str);
if (rc == 0 )
{
if (snap != 0)
@ -3678,6 +3678,31 @@ void VirtualMachine::disk_extended_info(int uid,
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
void VirtualMachine::volatile_disk_extended_info()
{
int num;
vector<Attribute * > disks;
VectorAttribute * disk;
DatastorePool * ds_pool = Nebula::instance().get_dspool();
num = obj_template->get("DISK",disks);
for(int i=0; i<num; i++)
{
disk = dynamic_cast<VectorAttribute * >(disks[i]);
if ( disk == 0 || !is_volatile(disk) )
{
continue;
}
ds_pool->disk_attribute(get_ds_id(), disk);
}
}
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
pthread_mutex_t VirtualMachine::lex_mutex = PTHREAD_MUTEX_INITIALIZER;
extern "C"