[one-users] [RFC] Support for multiple oned conf files
Łukasz Oleś
lukaszoles at gmail.com
Sat Nov 27 17:11:19 PST 2010
Hi,
It searches for aditional conf files in etc_location/oned.conf.d/ dir.
This patch is valuable mainly for distributions like Debian/Ubuntu where one
package cannot modify other packages configs. Now when I create custom
transfer manager I can create deb package with separate configuration file and
easily install it.
See patch bellow and in attachment, it was build against latest one-2.0
branch. This patch requires boost-filesystem. It can by applied by 'git
apply'.
src/nebula/NebulaTemplate.cc | 38 ++++++++++++++++++++++++++++++++++++++
src/nebula/SConstruct | 3 ++-
2 files changed, 40 insertions(+), 1 deletions(-)
diff --git a/src/nebula/NebulaTemplate.cc b/src/nebula/NebulaTemplate.cc
index c9c1a5b..227515b 100644
--- a/src/nebula/NebulaTemplate.cc
+++ b/src/nebula/NebulaTemplate.cc
@@ -16,8 +16,13 @@
#include "NebulaTemplate.h"
#include "Nebula.h"
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/progress.hpp>
+#include <iostream>
using namespace std;
+namespace fs = boost::filesystem;
/* --------------------------------------------------------------------------
*/
/* --------------------------------------------------------------------------
*/
@@ -175,6 +180,39 @@ int NebulaTemplate::load_configuration()
return -1;
}
+ string full_path, tmp = conf_file + ".d";
+ fs::path extra_conf_dir = fs::system_complete(fs::path(tmp.c_str()));
+
+ if (fs::is_directory(extra_conf_dir))
+ {
+ fs::directory_iterator end_iter;
+ for (fs::directory_iterator dir_itr(extra_conf_dir);
+ dir_itr != end_iter;
+ ++dir_itr)
+ {
+ try
+ {
+ if (fs::is_regular_file(dir_itr->status()))
+ {
+ full_path = conf_file + ".d/" + dir_itr-
>path().filename();
+ rc = parse(full_path.c_str(), &error);
+ if ( rc != 0 && error != 0)
+ {
+ cout << "\nError while parsing" << full_path << "
file:\n" << error << endl;
+
+ free(error);
+
+ return -1;
+ }
+ }
+ }
+ catch ( const std::exception & ex )
+ {
+ std::cout << dir_itr->path().filename() << " " << ex.what()
<< std::endl;
+ }
+ }
+ }
+
for(iter=conf_default.begin();iter!=conf_default.end();)
{
aname = iter->first;
diff --git a/src/nebula/SConstruct b/src/nebula/SConstruct
index ebc9f81..9f1366a 100644
--- a/src/nebula/SConstruct
+++ b/src/nebula/SConstruct
@@ -51,7 +51,8 @@ env.Append(LIBS=[
'nebula_common',
'nebula_sql',
'nebula_log',
- 'crypto'
+ 'crypto',
+ 'boost_filesystem',
])
# Sources to generate the library
-------------- next part --------------
A non-text attachment was scrubbed...
Name: multiple-conf-files.patch
Type: text/x-patch
Size: 2400 bytes
Desc: not available
URL: <http://lists.opennebula.org/pipermail/users-opennebula.org/attachments/20101128/29cd6a18/attachment.bin>
More information about the Users
mailing list