diff --git a/include/MarketPlacePool.h b/include/MarketPlacePool.h index c61ed67fb1..bfe7c59a91 100644 --- a/include/MarketPlacePool.h +++ b/include/MarketPlacePool.h @@ -27,7 +27,7 @@ class MarketPlaceApp; class MarketPlacePool : public PoolSQL { public: - MarketPlacePool(SqlDB * db):PoolSQL(db, MarketPlace::table, true, true){}; + MarketPlacePool(SqlDB * db); ~MarketPlacePool(){}; diff --git a/share/etc/oned.conf b/share/etc/oned.conf index 6d96e76c2e..ac6a35c44a 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -1080,6 +1080,11 @@ DS_MAD_CONF = [ # template #******************************************************************************* +MARKET_MAD_CONF = [ + NAME = "one", + REQUIRED_ATTRS = "" +] + MARKET_MAD_CONF = [ NAME = "http", REQUIRED_ATTRS = "BASE_URL,PUBLIC_DIR" diff --git a/src/market/MarketPlacePool.cc b/src/market/MarketPlacePool.cc index 512c2f547d..470fdcfb06 100644 --- a/src/market/MarketPlacePool.cc +++ b/src/market/MarketPlacePool.cc @@ -15,8 +15,63 @@ /* -------------------------------------------------------------------------- */ #include "MarketPlacePool.h" +#include "User.h" #include "Nebula.h" +/* -------------------------------------------------------------------------- */ + +MarketPlacePool::MarketPlacePool(SqlDB * db) + :PoolSQL(db, MarketPlace::table, true, true) +{ + //lastOID is set in PoolSQL::init_cb + if (get_lastOID() == -1) + { + // Build the default default security group + string default_market = + "NAME=\"OpenNebula Public\"\n" + "MARKET_MAD=one\n" + "DESCRIPTION=\"OpenNebula Systems MarketPlace\""; + + Nebula& nd = Nebula::instance(); + UserPool * upool = nd.get_upool(); + User * oneadmin = upool->get(0, false); + + string error; + + MarketPlaceTemplate * default_tmpl = new MarketPlaceTemplate; + char * error_parse; + + default_tmpl->parse(default_market, &error_parse); + + MarketPlace * marketplace = new MarketPlace( + oneadmin->get_uid(), + oneadmin->get_gid(), + oneadmin->get_uname(), + oneadmin->get_gname(), + oneadmin->get_umask(), + default_tmpl); + + marketplace->set_permissions(1,1,1, 1,0,0, 1,0,0, error); + + if (PoolSQL::allocate(marketplace, error) < 0) + { + ostringstream oss; + oss << "Error trying to create default " + << "OpenNebula Systems MarketPlace: " << error; + NebulaLog::log("MKP", Log::ERROR, oss); + + throw runtime_error(oss.str()); + } + + // The first 100 IDs are reserved for system MarketPlaces. + // Regular ones start from ID 100 + + set_update_lastOID(99); + } + + return; +} + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ diff --git a/src/nebula/Nebula.cc b/src/nebula/Nebula.cc index 13c61649f9..6366066769 100644 --- a/src/nebula/Nebula.cc +++ b/src/nebula/Nebula.cc @@ -488,9 +488,6 @@ void Nebula::start(bool bootstrap_only) zonepool= new ZonePool(db, is_federation_slave()); vdcpool = new VdcPool(db, is_federation_slave()); - marketpool = new MarketPlacePool(db); - apppool = new MarketPlaceAppPool(db); - nebula_configuration->get("VM_HOOK", vm_hooks); nebula_configuration->get("HOST_HOOK", host_hooks); nebula_configuration->get("VROUTER_HOOK", vrouter_hooks); @@ -608,6 +605,9 @@ void Nebula::start(bool bootstrap_only) default_group_quota.select(); secgrouppool = new SecurityGroupPool(db); + + marketpool = new MarketPlacePool(db); + apppool = new MarketPlaceAppPool(db); } catch (exception&) { diff --git a/src/nebula/NebulaTemplate.cc b/src/nebula/NebulaTemplate.cc index 1d677c79f9..510fe5d8da 100644 --- a/src/nebula/NebulaTemplate.cc +++ b/src/nebula/NebulaTemplate.cc @@ -156,8 +156,9 @@ void OpenNebulaTemplate::set_multiple_conf_default() #****** */ + set_conf_market("one", ""); set_conf_market("http", "BASE_URL,PUBLIC_DIR"); - set_conf_market("s3", "ACCESS_KEY_ID,SECRET_ACCESS_KEY,REGION,BUCKET"); + set_conf_market("s3", "ACCESS_KEY_ID,SECRET_ACCESS_KEY,REGION,BUCKET"); register_multiple_conf_default("MARKET_MAD_CONF"); } diff --git a/src/onedb/local/4.13.85_to_4.90.0.rb b/src/onedb/local/4.13.85_to_4.90.0.rb index c0822166e8..a5ecf9764f 100644 --- a/src/onedb/local/4.13.85_to_4.90.0.rb +++ b/src/onedb/local/4.13.85_to_4.90.0.rb @@ -83,7 +83,41 @@ module Migrator log_time() + ######################################################################## + # OpenNebula Systems MarketPlace + ######################################################################## + + oneadmin_uname = nil + + @db.fetch("SELECT name FROM user_pool WHERE oid=0") do |row| + oneadmin_uname = row[:name] + end + + if oneadmin_uname == nil + puts "Error trying to read oneadmin's user name ('SELECT name FROM user_pool WHERE oid=0')" + return false + end + + oneadmin_gname = nil + + @db.fetch("SELECT name FROM group_pool WHERE oid=0") do |row| + oneadmin_gname = row[:name] + end + + if oneadmin_gname == nil + puts "Error trying to read oneadmin's group name ('SELECT name FROM group_pool WHERE oid=0')" + return false + end + + @db.run "CREATE TABLE marketplace_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);" + + @db.run "INSERT INTO marketplace_pool VALUES(0,'OpenNebula Public','000#{oneadmin_uname}#{oneadmin_gname}OpenNebula Public000111100100',0,0,1,1,1);" + + @db.run "INSERT INTO pool_control VALUES('marketplace_pool',99);" + + @db.run "CREATE TABLE marketplaceapp_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name,uid));" + return true end -end \ No newline at end of file +end