From f487277f035138b5d263d6fb6a2f054c02ebe28f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Wed, 14 Nov 2012 12:54:31 +0100 Subject: [PATCH] Feature #1544: New xml-rpc method one.system.config --- include/Nebula.h | 6 ++++++ include/RequestManagerSystem.h | 18 ++++++++++++++++++ src/rm/RequestManager.cc | 2 ++ src/rm/RequestManagerSystem.cc | 19 +++++++++++++++++++ 4 files changed, 45 insertions(+) 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/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; +} + +/* ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------- */