diff --git a/include/VirtualMachine.h b/include/VirtualMachine.h index 1f02e3514c..872cb01404 100644 --- a/include/VirtualMachine.h +++ b/include/VirtualMachine.h @@ -1646,7 +1646,7 @@ public: * clone_target and ln_target * @param tm_mad is the tm_mad for system datastore chosen */ - int check_tm_mad_disks(const string& tm_mad); + int check_tm_mad_disks(const string& tm_mad, string& error); private: diff --git a/include/VirtualMachineDisk.h b/include/VirtualMachineDisk.h index 2fe7e14d0a..1eeacae53b 100644 --- a/include/VirtualMachineDisk.h +++ b/include/VirtualMachineDisk.h @@ -357,12 +357,6 @@ public: */ void to_xml_short(std::ostringstream& oss) const; - /** - * Check if a tm_mad is valid and set clone_target and ln_target - * @param tm_mad is the tm_mad for system datastore chosen - */ - int check_tm_mad(const string& tm_mad); - private: Snapshots * snapshots; @@ -793,7 +787,7 @@ public: * clone_target and ln_target * @param tm_mad is the tm_mad for system datastore chosen */ - int check_tm_mad(const string& tm_mad); + int check_tm_mad(const string& tm_mad, string& error); protected: diff --git a/src/rm/RequestManagerVirtualMachine.cc b/src/rm/RequestManagerVirtualMachine.cc index 08aaed978b..3d577689da 100644 --- a/src/rm/RequestManagerVirtualMachine.cc +++ b/src/rm/RequestManagerVirtualMachine.cc @@ -975,18 +975,16 @@ void VirtualMachineDeploy::request_execute(xmlrpc_c::paramList const& paramList, return; } - if ( check_nic_auto && vm->get_auto_network_leases(&tmpl, error_str) != 0 ) + if ( check_nic_auto && vm->get_auto_network_leases(&tmpl, att.resp_msg) != 0 ) { - att.resp_msg = error_str; failure_response(ACTION, att); vm->unlock(); return; } - if ( vm->check_tm_mad_disks(tm_mad) != 0) + if ( vm->check_tm_mad_disks(tm_mad, att.resp_msg) != 0) { - att.resp_msg = error_str; failure_response(ACTION, att); vm->unlock(); diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc index ffccfdd9a2..314997530b 100644 --- a/src/vm/VirtualMachine.cc +++ b/src/vm/VirtualMachine.cc @@ -3471,7 +3471,7 @@ int VirtualMachine::parse_sched_action(string& error_str) /* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */ -int VirtualMachine::check_tm_mad_disks(const string& tm_mad) +int VirtualMachine::check_tm_mad_disks(const string& tm_mad, string& error) { string tm_mad_sys; @@ -3481,7 +3481,7 @@ int VirtualMachine::check_tm_mad_disks(const string& tm_mad) { return 0; } - if ( disks.check_tm_mad(tm_mad) != 0 ) + if ( disks.check_tm_mad(tm_mad, error) != 0 ) { return -1; } diff --git a/src/vm/VirtualMachineDisk.cc b/src/vm/VirtualMachineDisk.cc index d32223be24..f68072f67e 100644 --- a/src/vm/VirtualMachineDisk.cc +++ b/src/vm/VirtualMachineDisk.cc @@ -1617,7 +1617,7 @@ std::string& VirtualMachineDisks::to_xml_short(std::string& xml) /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ -int VirtualMachineDisks::check_tm_mad(const string& tm_mad) +int VirtualMachineDisks::check_tm_mad(const string& tm_mad, string& error) { DatastorePool * dspool = Nebula::instance().get_dspool(); @@ -1648,11 +1648,14 @@ int VirtualMachineDisks::check_tm_mad(const string& tm_mad) if ( ds_img == 0 ) { + error = "Datastore does not exist"; return -1; } - if ( ds_img->get_tm_mad_targets(tm_mad, ln_target, clone_target, disk_type) != 0 ) + if ( ds_img->get_tm_mad_targets(tm_mad, ln_target, clone_target, + disk_type) != 0 ) { + error = "Image Datastore does not support transfer mode: " + tm_mad; return -1; } @@ -1663,6 +1666,7 @@ int VirtualMachineDisks::check_tm_mad(const string& tm_mad) } else { + error = "Image datastore not defined for VM DISK"; return -1; }