diff --git a/include/Nebula.h b/include/Nebula.h index a61ffe45c8..85131be7ea 100644 --- a/include/Nebula.h +++ b/include/Nebula.h @@ -305,6 +305,12 @@ public: nebula_configuration->Template::get(_name,value); }; + string get_configuration_xml() const + { + string xml; + return nebula_configuration->to_xml(xml); + }; + private: // ----------------------------------------------------------------------- diff --git a/include/RequestManagerSystem.h b/include/RequestManagerSystem.h index f774a7759a..be66eaed25 100644 --- a/include/RequestManagerSystem.h +++ b/include/RequestManagerSystem.h @@ -60,6 +60,24 @@ public: RequestAttributes& att); }; +/* ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------- */ + +class SystemConfig : public RequestManagerSystem +{ +public: + SystemConfig(): + RequestManagerSystem("SystemConfig", + "Returns the OpenNebula configuration", + "A:s") + {}; + + ~SystemConfig(){}; + + void request_execute(xmlrpc_c::paramList const& _paramList, + RequestAttributes& att); +}; + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ diff --git a/src/oca/java/src/org/opennebula/client/Client.java b/src/oca/java/src/org/opennebula/client/Client.java index 7d4c87ad83..2fff759a34 100644 --- a/src/oca/java/src/org/opennebula/client/Client.java +++ b/src/oca/java/src/org/opennebula/client/Client.java @@ -129,6 +129,16 @@ public class Client{ return call("system.version"); } + /** + * Calls OpenNebula and retrieves oned configuration + * + * @return The server's xml-rpc response encapsulated + */ + public OneResponse get_config() + { + return call("system.config"); + } + //-------------------------------------------------------------------------- // PRIVATE ATTRIBUTES AND METHODS //-------------------------------------------------------------------------- diff --git a/src/oca/ruby/OpenNebula.rb b/src/oca/ruby/OpenNebula.rb index 5ad8a36680..6dbb239e2b 100644 --- a/src/oca/ruby/OpenNebula.rb +++ b/src/oca/ruby/OpenNebula.rb @@ -171,5 +171,9 @@ module OpenNebula def get_version() call("system.version") end + + def get_config() + call("system.config") + end end end diff --git a/src/rm/RequestManager.cc b/src/rm/RequestManager.cc index 341d44d159..5e9e0311b1 100644 --- a/src/rm/RequestManager.cc +++ b/src/rm/RequestManager.cc @@ -366,6 +366,7 @@ void RequestManager::register_xml_methods() // System Methods xmlrpc_c::methodPtr system_version(new SystemVersion()); + xmlrpc_c::methodPtr system_config(new SystemConfig()); /* VM related methods */ RequestManagerRegistry.addMethod("one.vm.deploy", vm_deploy); @@ -498,6 +499,7 @@ void RequestManager::register_xml_methods() /* System related methods */ RequestManagerRegistry.addMethod("one.system.version", system_version); + RequestManagerRegistry.addMethod("one.system.config", system_config); }; diff --git a/src/rm/RequestManagerSystem.cc b/src/rm/RequestManagerSystem.cc index 84d9486e5e..df3f39204c 100644 --- a/src/rm/RequestManagerSystem.cc +++ b/src/rm/RequestManagerSystem.cc @@ -37,3 +37,22 @@ void SystemVersion::request_execute(xmlrpc_c::paramList const& paramList, /* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */ + +void SystemConfig::request_execute(xmlrpc_c::paramList const& paramList, + RequestAttributes& att) +{ + if ( att.gid != GroupPool::ONEADMIN_ID ) + { + failure_response(AUTHORIZATION, + "The oned configuration can only be retrieved by users in the oneadmin group", + att); + return; + } + + success_response(Nebula::instance().get_configuration_xml(), att); + + return; +} + +/* ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------- */