Some configuration attribute are read by OpenSAF daemons as environment variables. eg.
export FMS_PROMOTE_ACTIVE_TIMER=0 There is no easy way to reload these values without a restart. ConfigFileReader will parse these files looking for 'export VAR=VAL' and store them into a map, so a daemon can reload configuration without a restart. --- src/base/Makefile.am | 2 ++ src/base/config_file_reader.cc | 43 ++++++++++++++++++++++++++++++++++ src/base/config_file_reader.h | 30 ++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/base/config_file_reader.cc create mode 100644 src/base/config_file_reader.h diff --git a/src/base/Makefile.am b/src/base/Makefile.am index c7dd01900..ce93562e5 100644 --- a/src/base/Makefile.am +++ b/src/base/Makefile.am @@ -33,6 +33,7 @@ lib_libopensaf_core_la_LDFLAGS += \ lib_libopensaf_core_la_SOURCES += \ src/base/condition_variable.cc \ src/base/conf.cc \ + src/base/config_file_reader.cc \ src/base/daemon.c \ src/base/file_descriptor.cc \ src/base/file_notify.cc \ @@ -94,6 +95,7 @@ noinst_HEADERS += \ src/base/buffer.h \ src/base/condition_variable.h \ src/base/conf.h \ + src/base/config_file_reader.h \ src/base/daemon.h \ src/base/file_descriptor.h \ src/base/file_notify.h \ diff --git a/src/base/config_file_reader.cc b/src/base/config_file_reader.cc new file mode 100644 index 000000000..d22930505 --- /dev/null +++ b/src/base/config_file_reader.cc @@ -0,0 +1,43 @@ +/* -*- OpenSAF -*- + * + * Copyright Ericsson AB 2018 - All Rights Reserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed + * under the GNU Lesser General Public License Version 2.1, February 1999. + * The complete license can be accessed from the following location: + * http://opensource.org/licenses/lgpl-license.php + * See the Copying file included with the OpenSAF distribution for full + * licensing terms. + * + */ + +#include <fstream> +#include <regex> +#include "base/config_file_reader.h" + +ConfigFileReader::SettingsMap ConfigFileReader::ParseFile(const std::string& filename) { + SettingsMap map; + std::ifstream file(filename); + std::string line; + + if (file.is_open()) { + while (getline(file, line)) { + // go through each line of the config file + // only process "export key=value" and ignore trailing comments + // note: value may be surrounded with quotes + std::regex re("^export\\s*(\\w+)\\s*=\\s*([^#\\n]+)"); + std::sregex_token_iterator key_iter(line.begin(), line.end(), re, 1); + std::sregex_token_iterator value_iter(line.begin(), line.end(), re, 2); + std::sregex_token_iterator end; + + for (; key_iter != end && value_iter != end; ++key_iter, ++value_iter) { + // store key-value pairs into map + map[key_iter->str()] = value_iter->str(); + } + } + file.close(); + } + return map; +} diff --git a/src/base/config_file_reader.h b/src/base/config_file_reader.h new file mode 100644 index 000000000..cb281b7db --- /dev/null +++ b/src/base/config_file_reader.h @@ -0,0 +1,30 @@ +/* -*- OpenSAF -*- + * + * Copyright Ericsson AB 2018 - All Rights Reserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed + * under the GNU Lesser General Public License Version 2.1, February 1999. + * The complete license can be accessed from the following location: + * http://opensource.org/licenses/lgpl-license.php + * See the Copying file included with the OpenSAF distribution for full + * licensing terms. + * + */ + +#ifndef BASE_CONFIG_FILE_READER_H_ +#define BASE_CONFIG_FILE_READER_H_ + +#include <map> +#include <string> + +class ConfigFileReader { + public: + typedef std::map<std::string, std::string> SettingsMap; + + // parses OpenSAF 'config' files and return key-value pairs in a map + ConfigFileReader::SettingsMap ParseFile(const std::string& filename); +}; + +#endif /* BASE_CONFIG_FILE_READER_H */ -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel