1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-01-11 05:17:41 +03:00

feature #253: Add PUBLIC column to sql table for VirtualMachinePool.

This commit is contained in:
Carlos Martín 2010-06-07 17:51:46 +02:00 committed by Constantino Vázquez Blanco
parent 3527189fbb
commit 125690380a
4 changed files with 70 additions and 24 deletions

View File

@ -176,6 +176,11 @@ private:
*/ */
NetworkType type; NetworkType type;
/**
* Public scope of this Virtual Network
*/
string public_vnet;
/** /**
* Pointer to leases class, can be fixed or ranged. * Pointer to leases class, can be fixed or ranged.
* Holds information on given (and, optionally, possible) leases * Holds information on given (and, optionally, possible) leases
@ -347,7 +352,8 @@ protected:
NAME = 2, NAME = 2,
TYPE = 3, TYPE = 3,
BRIDGE = 4, BRIDGE = 4,
LIMIT = 5 LIMIT = 5,
PUBLIC = 6
}; };
static const char * table; static const char * table;

View File

@ -125,6 +125,11 @@ private:
*/ */
unsigned int default_size; unsigned int default_size;
/**
* Default public scope
**/
string default_public;
/** /**
* Factory method to produce VN objects * Factory method to produce VN objects
* @return a pointer to the new VN * @return a pointer to the new VN
@ -155,4 +160,4 @@ private:
int get_cb(void * _oss, int num, char **values, char **names); int get_cb(void * _oss, int num, char **values, char **names);
}; };
#endif /*VIRTUAL_NETWORK_POOL_H_*/ #endif /*VIRTUAL_NETWORK_POOL_H_*/

View File

@ -30,6 +30,7 @@ VirtualNetwork::VirtualNetwork(unsigned int mp, int ds):
uid(-1), uid(-1),
bridge(""), bridge(""),
type(UNINITIALIZED), type(UNINITIALIZED),
public_vnet(""),
leases(0), leases(0),
mac_prefix(mp), mac_prefix(mp),
default_size(ds){}; default_size(ds){};
@ -49,11 +50,11 @@ VirtualNetwork::~VirtualNetwork()
/* Virtual Network :: Database Access Functions */ /* Virtual Network :: Database Access Functions */
/* ************************************************************************** */ /* ************************************************************************** */
const char * VirtualNetwork::table = "network_pool"; const char * VirtualNetwork::table = "network_pool";
const char * VirtualNetwork::db_names = "(oid,uid,name,type,bridge)"; const char * VirtualNetwork::db_names = "(oid,uid,name,type,bridge,public)";
const char * VirtualNetwork::db_bootstrap = "CREATE TABLE IF NOT EXISTS" const char * VirtualNetwork::db_bootstrap = "CREATE TABLE IF NOT EXISTS"
" network_pool (" " network_pool ("
"oid INTEGER PRIMARY KEY, uid INTEGER, name VARCHAR(256), type INTEGER, " "oid INTEGER PRIMARY KEY, uid INTEGER, name VARCHAR(256), type INTEGER, "
"bridge TEXT, UNIQUE(name))"; "bridge TEXT, UNIQUE(name))";
@ -68,19 +69,22 @@ int VirtualNetwork::select_cb(void * nil, int num, char **values, char **names)
(!values[NAME]) || (!values[NAME]) ||
(!values[TYPE]) || (!values[TYPE]) ||
(!values[BRIDGE]) || (!values[BRIDGE]) ||
(!values[PUBLIC]) ||
(num != LIMIT )) (num != LIMIT ))
{ {
return -1; return -1;
} }
oid = atoi(values[OID]); oid = atoi(values[OID]);
uid = atoi(values[UID]); uid = atoi(values[UID]);
name = values[NAME]; name = values[NAME];
type = (NetworkType)atoi(values[TYPE]); type = (NetworkType)atoi(values[TYPE]);
bridge = values[BRIDGE]; bridge = values[BRIDGE];
public_vnet = values[PUBLIC];
// Virtual Network template ID is the Network ID // Virtual Network template ID is the Network ID
vn_template.id = oid; vn_template.id = oid;
@ -221,7 +225,8 @@ int VirtualNetwork::dump(ostringstream& oss,
(!values[TYPE]) || (!values[TYPE]) ||
(!values[BRIDGE])|| (!values[BRIDGE])||
(!values[LIMIT]) || (!values[LIMIT]) ||
(num != LIMIT + 2 )) (!values[PUBLIC])||
(num != PUBLIC + 2 ))
{ {
return -1; return -1;
} }
@ -235,6 +240,7 @@ int VirtualNetwork::dump(ostringstream& oss,
"<TYPE>" << values[TYPE] << "</TYPE>" << "<TYPE>" << values[TYPE] << "</TYPE>" <<
"<BRIDGE>" << values[BRIDGE] << "</BRIDGE>" << "<BRIDGE>" << values[BRIDGE] << "</BRIDGE>" <<
"<TOTAL_LEASES>" << values[LIMIT]<< "</TOTAL_LEASES>" << "<TOTAL_LEASES>" << values[LIMIT]<< "</TOTAL_LEASES>" <<
"<PUBLIC>" << values[PUBLIC] << "</PUBLIC>" <<
"</VNET>"; "</VNET>";
return 0; return 0;
@ -402,6 +408,15 @@ int VirtualNetwork::insert_replace(SqlDB *db, bool replace)
return -1; return -1;
} }
char * sql_public = db->escape_str(public_vnet.c_str());
if ( sql_public == 0 )
{
db->free_str(sql_name);
db->free_str(sql_bridge);
return -1;
}
// Construct the SQL statement to Insert or Replace // Construct the SQL statement to Insert or Replace
if(replace) if(replace)
{ {
@ -412,17 +427,19 @@ int VirtualNetwork::insert_replace(SqlDB *db, bool replace)
oss << "INSERT"; oss << "INSERT";
} }
oss << " INTO " << table << " "<< db_names <<" VALUES ("<< oss << " INTO " << table << " "<< db_names <<" VALUES ("
oid << "," << << oid << ","
uid << "," << << uid << ","
"'" << sql_name << "'," << << "'" << sql_name << "',"
type << "," << << type << ","
"'" << sql_bridge << "')"; << "'" << sql_bridge << "',"
<< "'" << sql_public << "')";
rc = db->exec(oss); rc = db->exec(oss);
db->free_str(sql_name); db->free_str(sql_name);
db->free_str(sql_bridge); db->free_str(sql_bridge);
db->free_str(sql_public);
return rc; return rc;
} }
@ -478,14 +495,17 @@ string& VirtualNetwork::to_xml(string& xml) const
os << os <<
"<VNET>" << "<VNET>" <<
"<ID>" << oid << "</ID>" << "<ID>" << oid << "</ID>" <<
"<UID>" << uid << "</UID>" << "<UID>" << uid << "</UID>" <<
"<NAME>" << name << "</NAME>" << "<NAME>" << name << "</NAME>" <<
"<TYPE>" << type << "</TYPE>" << "<TYPE>" << type << "</TYPE>" <<
"<BRIDGE>"<< bridge<< "</BRIDGE>" << "<BRIDGE>" << bridge << "</BRIDGE>" <<
"<PUBLIC>" << public_vnet << "</PUBLIC>" <<
vn_template.to_xml(template_xml); vn_template.to_xml(template_xml);
if (leases) if (leases)
{
os << leases->to_xml(leases_xml); os << leases->to_xml(leases_xml);
}
os << "</VNET>"; os << "</VNET>";
xml = os.str(); xml = os.str();
@ -516,7 +536,8 @@ string& VirtualNetwork::to_str(string& str) const
os << "Fixed" << endl; os << "Fixed" << endl;
} }
os << "Bridge : " << bridge << endl << endl; os << "Bridge : " << bridge << endl;
os << "Public : " << public_vnet << endl << endl;
os << "....: Template :...." << vn_template.to_str(template_str) << endl << endl; os << "....: Template :...." << vn_template.to_str(template_str) << endl << endl;

View File

@ -55,6 +55,8 @@ VirtualNetworkPool::VirtualNetworkPool(SqlDB * db,
iss >> hex >> mac_prefix >> ws >> hex >> tmp >> ws; iss >> hex >> mac_prefix >> ws >> hex >> tmp >> ws;
mac_prefix <<= 8; mac_prefix <<= 8;
mac_prefix += tmp; mac_prefix += tmp;
default_public = "NO";
} }
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
@ -72,6 +74,7 @@ int VirtualNetworkPool::allocate (
string name; string name;
string bridge; string bridge;
string public_attr;
string s_type; string s_type;
@ -121,6 +124,17 @@ int VirtualNetworkPool::allocate (
vn->get_template_attribute("BRIDGE",bridge); vn->get_template_attribute("BRIDGE",bridge);
vn->bridge = bridge; vn->bridge = bridge;
vn->get_template_attribute("PUBLIC", public_attr);
if ( public_attr.empty() == true )
{
public_attr = default_public;
}
else
{
vn->vn_template.erase("PUBLIC");
}
// Insert the VN in the pool so we have a valid OID // Insert the VN in the pool so we have a valid OID
*oid = PoolSQL::allocate(vn); *oid = PoolSQL::allocate(vn);
@ -233,4 +247,4 @@ int VirtualNetworkPool::dump(ostringstream& oss, const string& where)
oss << "</VNET_POOL>"; oss << "</VNET_POOL>";
return rc; return rc;
} }