mirror of
https://github.com/OpenNebula/one.git
synced 2024-12-22 13:33:52 +03:00
Feature #1095: Templates in one.*.allocate, one.*.update & one.vn.add/rmleases can be in XML
This commit is contained in:
parent
bb35437206
commit
5cf1b27e2a
@ -219,13 +219,6 @@ protected:
|
||||
* @return string for logging
|
||||
*/
|
||||
string allocate_error (PoolObjectSQL::ObjectType obj, const string& error);
|
||||
|
||||
/**
|
||||
* Logs allocate errors
|
||||
* @param message with the allocate error details (parsing)
|
||||
* @return string for logging
|
||||
*/
|
||||
string allocate_error (char *error);
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
@ -52,7 +52,7 @@ protected:
|
||||
string& error_str) = 0;
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
string leases_error (char * error);
|
||||
string leases_error (const string& error);
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
@ -70,7 +70,7 @@ public:
|
||||
* Parse a string representing the template, each attribute is inserted
|
||||
* in the template class.
|
||||
* @param parse_str string with template attributes
|
||||
* @param error_msg error string, must be freed by the calling funtion.
|
||||
* @param error_msg error string, must be freed by the calling function.
|
||||
* This string is null if no error occurred.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
@ -79,12 +79,23 @@ public:
|
||||
/**
|
||||
* Parse a template file.
|
||||
* @param filename of the template file
|
||||
* @param error_msg error string, must be freed by the calling funtion.
|
||||
* @param error_msg error string, must be freed by the calling function.
|
||||
* This string is null if no error occurred.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int parse(const char * filename, char **error_msg);
|
||||
|
||||
/**
|
||||
* Parse a string representing the template, automatically detecting if
|
||||
* it is the default syntax, or an XML template. Each attribute is inserted
|
||||
* in the template class.
|
||||
* @param parse_str string with template attributes, or XML template
|
||||
* @param error_msg error string, must be freed by the calling function.
|
||||
* This string is null if no error occurred.
|
||||
* @return 0 on success.
|
||||
*/
|
||||
int parse_str_or_xml(const string &parse_str, string& error_msg);
|
||||
|
||||
/**
|
||||
* Marshall a template. This function generates a single string with the
|
||||
* template attributes ("VAR=VAL<delim>...").
|
||||
|
@ -166,7 +166,6 @@ void PoolObjectSQL::set_template_error_message(const string& message)
|
||||
int PoolObjectSQL::replace_template(const string& tmpl_str, string& error)
|
||||
{
|
||||
Template * new_tmpl = get_new_template();
|
||||
char * error_msg = 0;
|
||||
|
||||
if ( new_tmpl == 0 )
|
||||
{
|
||||
@ -174,19 +173,8 @@ int PoolObjectSQL::replace_template(const string& tmpl_str, string& error)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( new_tmpl->parse(tmpl_str, &error_msg) != 0 )
|
||||
if ( new_tmpl->parse_str_or_xml(tmpl_str, error) != 0 )
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
oss << "Parse error";
|
||||
|
||||
if (error_msg != 0)
|
||||
{
|
||||
oss << ": " << error_msg;
|
||||
}
|
||||
|
||||
error = oss.str();
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -293,22 +293,3 @@ string Request::allocate_error (const string& error)
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
string Request::allocate_error (char *error)
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
oss << "Parse error";
|
||||
|
||||
if ( error != 0 )
|
||||
{
|
||||
oss << ": " << error;
|
||||
free(error);
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << ".";
|
||||
}
|
||||
|
||||
return allocate_error(oss.str());
|
||||
}
|
||||
|
@ -99,16 +99,15 @@ void RequestManagerAllocate::request_execute(xmlrpc_c::paramList const& params,
|
||||
|
||||
if ( do_template == true )
|
||||
{
|
||||
char * error_msg = 0;
|
||||
string str_tmpl = xmlrpc_c::value_string(params.getString(1));
|
||||
|
||||
tmpl = get_object_template();
|
||||
|
||||
rc = tmpl->parse(str_tmpl, &error_msg);
|
||||
rc = tmpl->parse_str_or_xml(str_tmpl, error_str);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
failure_response(INTERNAL, allocate_error(error_msg), att);
|
||||
failure_response(INTERNAL, allocate_error(error_str), att);
|
||||
delete tmpl;
|
||||
|
||||
return;
|
||||
|
@ -420,7 +420,6 @@ void VirtualMachineSaveDisk::request_execute(xmlrpc_c::paramList const& paramLis
|
||||
int rc;
|
||||
ostringstream oss;
|
||||
string error_str;
|
||||
char * error_char;
|
||||
|
||||
// ------------------ Template for the new image ------------------
|
||||
|
||||
@ -437,7 +436,7 @@ void VirtualMachineSaveDisk::request_execute(xmlrpc_c::paramList const& paramLis
|
||||
|
||||
itemplate = new ImageTemplate;
|
||||
|
||||
itemplate->parse(oss.str(), &error_char);
|
||||
itemplate->parse_str_or_xml(oss.str(), error_str);
|
||||
|
||||
// ------------------ Authorize the operation ------------------
|
||||
|
||||
|
@ -22,19 +22,9 @@ using namespace std;
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
string RequestManagerVirtualNetwork::leases_error (char *error)
|
||||
string RequestManagerVirtualNetwork::leases_error (const string& error)
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
oss << "Parse error.";
|
||||
|
||||
if ( error != 0 )
|
||||
{
|
||||
oss << " " << error;
|
||||
free(error);
|
||||
}
|
||||
|
||||
return request_error("Error modifying network leases",oss.str());
|
||||
return request_error("Error modifying network leases",error);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
@ -50,7 +40,6 @@ void RequestManagerVirtualNetwork::
|
||||
VirtualNetworkTemplate tmpl;
|
||||
VirtualNetwork * vn;
|
||||
|
||||
char * error_msg = 0;
|
||||
string error_str;
|
||||
int rc;
|
||||
|
||||
@ -59,11 +48,11 @@ void RequestManagerVirtualNetwork::
|
||||
return;
|
||||
}
|
||||
|
||||
rc = tmpl.parse(str_tmpl, &error_msg);
|
||||
rc = tmpl.parse_str_or_xml(str_tmpl, error_str);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
failure_response(INTERNAL, leases_error(error_msg), att);
|
||||
failure_response(INTERNAL, leases_error(error_str), att);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -135,6 +135,52 @@ error_yy:
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
int Template::parse_str_or_xml(const string &parse_str, string& error_msg)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ( parse_str[0] == '<' )
|
||||
{
|
||||
rc = from_xml(parse_str);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
error_msg = "Parse error: XML Template malformed.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char * error_char = 0;
|
||||
|
||||
rc = parse(parse_str, &error_char);
|
||||
|
||||
if ( rc != 0 )
|
||||
{
|
||||
ostringstream oss;
|
||||
|
||||
oss << "Parse error";
|
||||
|
||||
if (error_char != 0)
|
||||
{
|
||||
oss << ": " << error_char;
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << ".";
|
||||
}
|
||||
|
||||
error_msg = oss.str();
|
||||
|
||||
free(error_char);
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
void Template::marshall(string &str, const char delim)
|
||||
{
|
||||
multimap<string,Attribute *>::iterator it;
|
||||
|
Loading…
Reference in New Issue
Block a user