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:
parent
dd882538eb
commit
e7349889a0
@ -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
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
/* ************************************************************************ */
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user