mirror of
https://github.com/OpenNebula/one.git
synced 2024-12-24 21:34:01 +03:00
Feature #1739: Add messages when extra VMs are detected
This commit is contained in:
parent
ce565ac542
commit
e37c4d1665
@ -397,12 +397,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets an error message for the VM in the template
|
* Sets an error message with timestamp in the template
|
||||||
* @param message
|
* @param message Message string
|
||||||
* @return 0 on success
|
* @return 0 on success
|
||||||
*/
|
*/
|
||||||
void set_template_error_message(const string& message);
|
void set_template_error_message(const string& message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a message with timestamp in the template
|
||||||
|
* @param att_name Name for the attribute
|
||||||
|
* @param message Message string
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
void set_template_message(const string& att_name, const string& message);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory method for templates, it should be implemented
|
* Factory method for templates, it should be implemented
|
||||||
* by classes that uses templates
|
* by classes that uses templates
|
||||||
|
@ -138,7 +138,7 @@ void InformationManagerDriver::protocol(
|
|||||||
goto error_common_info;
|
goto error_common_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO The hinfo string is parsed again because HostTemplate has
|
// The hinfo string is parsed again because HostTemplate has
|
||||||
// replace_mode set to true, but we expect several VM vector attributes
|
// replace_mode set to true, but we expect several VM vector attributes
|
||||||
Template* tmpl = new Template();
|
Template* tmpl = new Template();
|
||||||
tmpl->parse(*hinfo, &error_msg);
|
tmpl->parse(*hinfo, &error_msg);
|
||||||
@ -159,6 +159,9 @@ void InformationManagerDriver::protocol(
|
|||||||
|
|
||||||
host->unlock();
|
host->unlock();
|
||||||
|
|
||||||
|
vector<string> external_vms;
|
||||||
|
map<int,string> rogue_vms;
|
||||||
|
|
||||||
for (it=vm_att.begin(); it != vm_att.end(); it++)
|
for (it=vm_att.begin(); it != vm_att.end(); it++)
|
||||||
{
|
{
|
||||||
vatt = dynamic_cast<VectorAttribute*>(*it);
|
vatt = dynamic_cast<VectorAttribute*>(*it);
|
||||||
@ -171,7 +174,7 @@ void InformationManagerDriver::protocol(
|
|||||||
|
|
||||||
rc = vatt->vector_value("ID", vmid);
|
rc = vatt->vector_value("ID", vmid);
|
||||||
|
|
||||||
if (rc == 0)
|
if (rc == 0 && vmid != -1)
|
||||||
{
|
{
|
||||||
if (vm_ids.erase(vmid) == 1)
|
if (vm_ids.erase(vmid) == 1)
|
||||||
{
|
{
|
||||||
@ -181,12 +184,12 @@ void InformationManagerDriver::protocol(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: This VM shoulnd't be running on this host
|
rogue_vms[vmid] = vatt->vector_value("DEPLOY_ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (rc == 0)
|
||||||
{
|
{
|
||||||
// TODO: unknown VM found running on this host
|
external_vms.push_back( vatt->vector_value("DEPLOY_ID") );
|
||||||
}
|
}
|
||||||
|
|
||||||
delete *it;
|
delete *it;
|
||||||
@ -201,6 +204,57 @@ void InformationManagerDriver::protocol(
|
|||||||
VirtualMachineManagerDriver::process_failed_poll(*it);
|
VirtualMachineManagerDriver::process_failed_poll(*it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!rogue_vms.empty())
|
||||||
|
{
|
||||||
|
map<int,string>::iterator it;
|
||||||
|
|
||||||
|
oss.str("");
|
||||||
|
oss << "Manual intervention required, these VMs should"
|
||||||
|
<< " not be running on Host " << id << ":";
|
||||||
|
|
||||||
|
for(it = rogue_vms.begin(); it != rogue_vms.end(); it++)
|
||||||
|
{
|
||||||
|
oss << " VM " << it->first << " (hypervisor name '" << it->second << "')";
|
||||||
|
}
|
||||||
|
|
||||||
|
host = hpool->get(id,true);
|
||||||
|
|
||||||
|
if ( host != 0 )
|
||||||
|
{
|
||||||
|
host->set_template_error_message(oss.str());
|
||||||
|
|
||||||
|
hpool->update(host);
|
||||||
|
|
||||||
|
host->unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
NebulaLog::log("InM",Log::ERROR,oss);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!external_vms.empty())
|
||||||
|
{
|
||||||
|
vector<string>::iterator it;
|
||||||
|
|
||||||
|
oss.str("");
|
||||||
|
oss << "External VMs found:";
|
||||||
|
|
||||||
|
for(it = external_vms.begin(); it != external_vms.end(); it++)
|
||||||
|
{
|
||||||
|
oss << " " << *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
host = hpool->get(id,true);
|
||||||
|
|
||||||
|
if ( host != 0 )
|
||||||
|
{
|
||||||
|
host->set_template_message("INFO_MESSAGE", oss.str());
|
||||||
|
|
||||||
|
hpool->update(host);
|
||||||
|
|
||||||
|
host->unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (action == "LOG")
|
else if (action == "LOG")
|
||||||
{
|
{
|
||||||
|
@ -137,30 +137,27 @@ int PoolObjectSQL::drop(SqlDB *db)
|
|||||||
const char * PoolObjectSQL::error_attribute_name = "ERROR";
|
const char * PoolObjectSQL::error_attribute_name = "ERROR";
|
||||||
|
|
||||||
void PoolObjectSQL::set_template_error_message(const string& message)
|
void PoolObjectSQL::set_template_error_message(const string& message)
|
||||||
|
{
|
||||||
|
set_template_message(error_attribute_name, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PoolObjectSQL::set_template_message(
|
||||||
|
const string& att_name,
|
||||||
|
const string& message)
|
||||||
{
|
{
|
||||||
SingleAttribute * attr;
|
SingleAttribute * attr;
|
||||||
ostringstream error_value;
|
ostringstream error_value;
|
||||||
|
|
||||||
char str[26];
|
error_value << one_util::log_time() << " : " << message;
|
||||||
time_t the_time;
|
|
||||||
|
|
||||||
the_time = time(NULL);
|
|
||||||
|
|
||||||
#ifdef SOLARIS
|
|
||||||
ctime_r(&(the_time),str,sizeof(char)*26);
|
|
||||||
#else
|
|
||||||
ctime_r(&(the_time),str);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
str[24] = '\0'; // Get rid of final enter character
|
|
||||||
|
|
||||||
error_value << str << " : " << message;
|
|
||||||
|
|
||||||
//Replace previous error message and insert the new one
|
//Replace previous error message and insert the new one
|
||||||
|
|
||||||
attr = new SingleAttribute(error_attribute_name, error_value.str());
|
attr = new SingleAttribute(att_name, error_value.str());
|
||||||
|
|
||||||
obj_template->erase(error_attribute_name);
|
obj_template->erase(att_name);
|
||||||
obj_template->set(attr);
|
obj_template->set(attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user