[Cluster-devel] conga/ricci/modules/service ServiceManager.cpp ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Tue Sep 11 13:53:20 UTC 2007
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-09-11 13:53:19
Modified files:
ricci/modules/service: ServiceManager.cpp ServiceManager.h
ServiceModule.cpp ServiceModule.h
main.cpp
Log message:
- Detect FC6 and F7 as supporting RHEL5 clusters.
- Default to RHEL5 cluster type if an unknown release name appears in /etc/redhat-release.
- Cleanup
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.h.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/main.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
--- conga/ricci/modules/service/ServiceManager.cpp 2007/09/11 02:45:28 1.12
+++ conga/ricci/modules/service/ServiceManager.cpp 2007/09/11 13:53:19 1.13
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2006
+ Copyright Red Hat, Inc. 2006-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -27,714 +27,817 @@
#include <vector>
-
using namespace std;
+#define CHKCONFIG_PATH "/sbin/chkconfig"
+#define SERVICE_PATH "/sbin/service"
-#define CHKCONFIG_PATH "/sbin/chkconfig"
-#define SERVICE_PATH "/sbin/service"
-
-#define INITD_DIR_PATH "/etc/init.d/"
-
-#define DESC_SIG String("# description:")
-
-
-static bool
-RHEL4=false, RHEL5=false, FC5=false, FC6=false;
-static void
-set_release();
-
+#define INITD_DIR_PATH "/etc/init.d/"
+#define DESC_SIG String("# description:")
+static bool RHEL4=false, RHEL5=false, FC5=false, FC6=false;
+static void set_release();
Service::Service()
{
- set_release();
+ set_release();
}
Service::Service(const String& name, bool enabled) :
- _name(counting_auto_ptr<String>(new String(name))),
- _enabled(counting_auto_ptr<bool>(new bool(enabled)))
+ _name(counting_auto_ptr<String>(new String(name))),
+ _enabled(counting_auto_ptr<bool>(new bool(enabled)))
{
- set_release();
- if (_name->empty())
- throw String("noname service???");
+ set_release();
+ if (_name->empty())
+ throw String("no service name given");
}
Service::~Service()
{}
-
XMLObject
Service::xml(bool descr) const
{
- if (!_name.get())
- throw String("internal: service not initialized");
+ if (!_name.get())
+ throw String("internal: service not initialized");
+
+ XMLObject xml("service");
+ xml.set_attr("name", name());
+ xml.set_attr("enabled", enabled() ? "true" : "false");
+ xml.set_attr("running", running() ? "true" : "false");
+ xml.set_attr("description", descr ? description() : "");
- XMLObject xml("service");
- xml.set_attr("name", name());
- xml.set_attr("enabled", enabled()?"true":"false");
- xml.set_attr("running", running()?"true":"false");
- xml.set_attr("description", descr?description():"");
- return xml;
+ return xml;
}
String
Service::name() const
{
- if (!_name.get())
- throw String("internal: service not initialized");
- return *_name;
+ if (!_name.get())
+ throw String("internal: service not initialized");
+ return *_name;
}
bool
Service::enabled() const
{
- if (!_enabled.get())
- throw String("internal: service not initialized");
- return *_enabled;
+ if (!_enabled.get())
+ throw String("internal: service not initialized");
+ return *_enabled;
}
bool
Service::running() const
{
- if (!_running.get())
- _running = counting_auto_ptr<bool>(new bool(service_running(name())));
- return *_running;
+ if (!_running.get())
+ _running = counting_auto_ptr<bool>(new bool(service_running(name())));
+ return *_running;
}
String
Service::description() const
{
- if (!_descr.get()) {
- String path(INITD_DIR_PATH);
- path += name();
-
- String initd(File::open(path));
-
- list<String> desc_lines;
-
- vector<String> lines = utils::split(initd, "\n");
- for (vector<String>::const_iterator iter = lines.begin();
- iter != lines.end();
- iter++) {
- String line(utils::strip(*iter));
- if (line.empty())
- continue;
- if (line.find(DESC_SIG) != 0)
- continue;
- desc_lines.push_back(line);
- while (desc_lines.back()[desc_lines.back().size()-1] == '\\' &&
- ++iter != lines.end())
- if (iter->size())
- desc_lines.push_back(*iter);
- else
- break;
- break;
- }
-
- String desc;
- for (list<String>::const_iterator l_iter = desc_lines.begin();
- l_iter != desc_lines.end();
- l_iter++) {
- String s = utils::rstrip(*l_iter, "\\");
- s = utils::lstrip(s, DESC_SIG);
- s = utils::lstrip(s, "#");
- s = utils::lstrip(s);
- desc += s;
- }
+ if (!_descr.get()) {
+ String path(INITD_DIR_PATH);
+ path += name();
+
+ String initd(File::open(path));
+
+ list<String> desc_lines;
+
+ vector<String> lines = utils::split(initd, "\n");
+ for (vector<String>::const_iterator
+ iter = lines.begin() ;
+ iter != lines.end() ;
+ iter++)
+ {
+ String line(utils::strip(*iter));
+ if (line.empty())
+ continue;
+ if (line.find(DESC_SIG) != 0)
+ continue;
+
+ desc_lines.push_back(line);
+ while (desc_lines.back()[desc_lines.back().size() - 1] == '\\' && ++iter != lines.end())
+ {
+ if (iter->size())
+ desc_lines.push_back(*iter);
+ else
+ break;
+ }
+
+ break;
+ }
+
+ String desc;
+ for (list<String>::const_iterator
+ l_iter = desc_lines.begin() ;
+ l_iter != desc_lines.end() ;
+ l_iter++)
+ {
+ String s = utils::rstrip(*l_iter, "\\");
+ s = utils::lstrip(s, DESC_SIG);
+ s = utils::lstrip(s, "#");
+ s = utils::lstrip(s);
+ desc += s;
+ }
- _descr = counting_auto_ptr<String>(new String(desc));
- }
+ _descr = counting_auto_ptr<String>(new String(desc));
+ }
- return *_descr;
+ return *_descr;
}
void
Service::enable()
{
- if (!enabled()) {
- enable_service(name(), true);
- *_enabled = true;
- }
+ if (!enabled()) {
+ enable_service(name(), true);
+ *_enabled = true;
+ }
}
void
Service::disable()
{
- if (enabled()) {
- enable_service(name(), false);
- *_enabled = false;
- }
+ if (enabled()) {
+ enable_service(name(), false);
+ *_enabled = false;
+ }
}
void
Service::start()
{
- running();
- run_service(name(), START);
- *_running = true;
+ running();
+ run_service(name(), START);
+ *_running = true;
}
void
Service::restart()
{
- running();
- run_service(name(), RESTART);
- *_running = true;
+ running();
+ run_service(name(), RESTART);
+ *_running = true;
}
void
Service::stop()
{
- running();
- run_service(name(), STOP);
- *_running = false;
+ running();
+ run_service(name(), STOP);
+ *_running = false;
}
void
Service::enable_service(const String& name, bool on)
{
- String out, err;
- int status;
- vector<String> args;
- args.push_back(name);
- if (on)
- args.push_back("on");
- else
- args.push_back("off");
- if (utils::execute(CHKCONFIG_PATH, args, out, err, status, false))
- throw command_not_found_error_msg(CHKCONFIG_PATH);
- if (status != 0)
- throw String("chkconfig failed for service ") + name;
+ String out, err;
+ int status;
+ vector<String> args;
+
+ args.push_back(name);
+
+ if (on)
+ args.push_back("on");
+ else
+ args.push_back("off");
+
+ if (utils::execute(CHKCONFIG_PATH, args, out, err, status, false))
+ throw command_not_found_error_msg(CHKCONFIG_PATH);
+ if (status != 0)
+ throw String("chkconfig failed for service ") + name + ": " + err;
}
bool
Service::service_running(const String& name)
{
- String path(INITD_DIR_PATH);
- path += name;
+ String path(INITD_DIR_PATH);
+ path += name;
- String out, err;
- int status;
- vector<String> args;
- args.push_back("status");
- if (utils::execute(path, args, out, err, status, false) != 0)
- throw command_not_found_error_msg(path);
- return status == 0;
+ String out, err;
+ int status;
+ vector<String> args;
+
+ args.push_back("status");
+ if (utils::execute(path, args, out, err, status, false) != 0)
+ throw command_not_found_error_msg(path);
+ return status == 0;
}
void
Service::run_service(const String& name, ActionState state)
{
- String path(INITD_DIR_PATH);
- path += name;
+ String path(INITD_DIR_PATH);
+ path += name;
- String out, err;
- int status;
- vector<String> args;
- switch (state) {
- case START:
- args.push_back("start");
- break;
- case STOP:
- args.push_back("stop");
- break;
- case RESTART:
- args.push_back("restart");
- break;
- }
- if (utils::execute(path, args, out, err, status, false) != 0)
- throw command_not_found_error_msg(path);
- if (status) {
- bool running = service_running(name);
- if (state == START || state == RESTART) {
- if (!running)
- throw String("service ") + name + " " + String(state == START ? "start" : "restart") + " failed";
- } else {
- if (running)
- throw String("service ") + name + " stop failed";
- }
- }
+ String out, err;
+ int status;
+ vector<String> args;
+
+ switch (state) {
+ case START:
+ args.push_back("start");
+ break;
+
+ case STOP:
+ args.push_back("stop");
+ break;
+
+ case RESTART:
+ args.push_back("restart");
+ break;
+ }
+
+ if (utils::execute(path, args, out, err, status, false) != 0)
+ throw command_not_found_error_msg(path);
+
+ if (status) {
+ bool running = service_running(name);
+ if (state == START || state == RESTART) {
+ if (!running) {
+ throw String("service ") + name + " "
+ + String(state == START ? "start" : "restart")
+ + " failed: " + err;
+ }
+ } else {
+ if (running)
+ throw String("service ") + name + " stop failed: " + err;
+ }
+ }
}
-
-
-
-
-
-
-
-
ServiceSet::ServiceSet()
{
- set_release();
+ set_release();
}
-ServiceSet::ServiceSet(const String& name,
- const String& description) :
- _name(counting_auto_ptr<String>(new String(name))),
- _descr(counting_auto_ptr<String>(new String(description)))
+ServiceSet::ServiceSet(const String& name, const String& description) :
+ _name(counting_auto_ptr<String>(new String(name))),
+ _descr(counting_auto_ptr<String>(new String(description)))
{
- set_release();
- if (_name->empty())
- throw String("noname ServiceSet???");
+ set_release();
+
+ if (_name->empty())
+ throw String("no ServiceSet name");
}
ServiceSet::~ServiceSet()
{}
-
XMLObject
ServiceSet::xml(bool descr) const
{
- XMLObject xml("set");
- xml.set_attr("name", name());
- xml.set_attr("enabled", enabled()?"true":"false");
- xml.set_attr("running", running()?"true":"false");
- xml.set_attr("description", descr?description():"");
- return xml;
+ XMLObject xml("set");
+ xml.set_attr("name", name());
+ xml.set_attr("enabled", enabled() ? "true" : "false");
+ xml.set_attr("running", running() ? "true" : "false");
+ xml.set_attr("description", descr ? description() : "");
+ return xml;
}
String
ServiceSet::name() const
{
- if (!_name.get() || servs.empty())
- throw String("internal: ServiceSet not initialized");
- return *_name;
+ if (!_name.get() || servs.empty())
+ throw String("internal: ServiceSet not initialized");
+ return *_name;
}
bool
ServiceSet::enabled() const
{
- name();
- for (list<Service>::const_iterator iter = servs.begin();
- iter != servs.end();
- iter++)
- if (!iter->enabled())
- return false;
- return true;
+ name();
+
+ for (list<Service>::const_iterator
+ iter = servs.begin() ;
+ iter != servs.end() ;
+ iter++)
+ {
+ if (!iter->enabled())
+ return false;
+ }
+
+ return true;
}
bool
ServiceSet::running() const
{
- name();
- for (list<Service>::const_iterator iter = servs.begin();
- iter != servs.end();
- iter++)
- if (!iter->running())
- return false;
- return true;
+ name();
+
+ for (list<Service>::const_iterator
+ iter = servs.begin() ;
+ iter != servs.end() ;
+ iter++)
+ {
+ if (!iter->running())
+ return false;
+ }
+
+ return true;
}
String
ServiceSet::description() const
{
- name();
- return *_descr;
+ name();
+ return *_descr;
}
void
ServiceSet::enable()
{
- name();
- try {
- for (list<Service>::iterator iter = servs.begin();
- iter != servs.end();
- iter++)
- iter->enable();
- } catch (String e) {
- throw String("service set '") + name() + "' failed to enable";
- }
+ name();
+
+ try {
+ for (list<Service>::iterator
+ iter = servs.begin() ;
+ iter != servs.end() ;
+ iter++)
+ {
+ iter->enable();
+ }
+ } catch (String e) {
+ throw String("service set '") + name() + "' failed to enable: " + e;
+ }
}
void
ServiceSet::disable()
{
- name();
- try {
- for (list<Service>::iterator iter = servs.begin();
- iter != servs.end();
- iter++)
- iter->disable();
- } catch (String e) {
- throw String("service set '") + name() + "' failed to disable";
- }
+ name();
+
+ try {
+ for (list<Service>::iterator
+ iter = servs.begin() ;
+ iter != servs.end() ;
+ iter++)
+ {
+ iter->disable();
+ }
+ } catch (String e) {
+ throw String("service set '") + name() + "' failed to disable: " + e;
+ }
}
void
ServiceSet::start()
{
- name();
- try {
- for (list<Service>::iterator iter = servs.begin();
- iter != servs.end();
- iter++)
- iter->start();
- } catch (String e) {
- throw String("service set '") + name() + "' failed to start";
- }
+ name();
+
+ try {
+ for (list<Service>::iterator
+ iter = servs.begin() ;
+ iter != servs.end() ;
+ iter++)
+ {
+ iter->start();
+ }
+ } catch (String e) {
+ throw String("service set '") + name() + "' failed to start: " + e;
+ }
}
void
ServiceSet::restart()
{
- name();
- try {
- // ordered sequence: last started, first to be stoped
- stop();
- start();
- } catch (String e) {
- throw String("service set '") + name() + "' failed to restart";
- }
+ name();
+
+ try {
+ // ordered sequence: last started, first to be stoped
+ stop();
+ start();
+ } catch (String e) {
+ throw String("service set '") + name() + "' failed to restart: " + e;
+ }
}
void
ServiceSet::stop()
{
- name();
- try {
- for (list<Service>::reverse_iterator iter = servs.rbegin();
- iter != servs.rend();
- iter++)
- iter->stop();
- } catch (String e) {
- throw String("service set '") + name() + "' failed to stop";
- }
-}
-
-
-
+ name();
+ try {
+ for (list<Service>::reverse_iterator
+ iter = servs.rbegin() ;
+ iter != servs.rend() ;
+ iter++)
+ {
+ iter->stop();
+ }
+ } catch (String e) {
+ throw String("service set '") + name() + "' failed to stop: " + e;
+ }
+}
ServiceManager::ServiceManager()
{
- set_release();
+ set_release();
- String out, err;
- int status;
- vector<String> args;
- args.push_back("--list");
- if (utils::execute(CHKCONFIG_PATH, args, out, err, status, true))
- throw command_not_found_error_msg(CHKCONFIG_PATH);
- if (status)
- throw String("chkconfig failed");
- vector<String> lines = utils::split(out, "\n");
- for (vector<String>::const_iterator iter = lines.begin();
- iter != lines.end();
- iter++) {
- vector<String> words = utils::split(utils::strip(*iter));
- if (words.size() != 8)
- continue;
- String name = words[0];
- bool enabled = false;
- for (vector<String>::size_type i=2;
- i < words.size() - 1;
- i++)
- if (words[i].find("on") != String::npos)
- enabled = true;
- _servs[name] = Service(name, enabled);
- }
+ String out, err;
+ int status;
+ vector<String> args;
+
+ args.push_back("--list");
+ if (utils::execute(CHKCONFIG_PATH, args, out, err, status, true))
+ throw command_not_found_error_msg(CHKCONFIG_PATH);
+ if (status)
+ throw String("chkconfig failed: " + err);
+
+ vector<String> lines = utils::split(out, "\n");
+ for (vector<String>::const_iterator
+ iter = lines.begin() ;
+ iter != lines.end() ;
+ iter++)
+ {
+ vector<String> words = utils::split(utils::strip(*iter));
+ if (words.size() != 8)
+ continue;
+
+ String name = words[0];
+ bool enabled = false;
+ for (vector<String>::size_type i = 2; i < words.size() - 1; i++) {
+ if (words[i].find("on") != String::npos)
+ enabled = true;
+ }
+ _servs[name] = Service(name, enabled);
+ }
- _sets = generate_sets();
+ _sets = generate_sets();
}
ServiceManager::~ServiceManager()
{}
-
map<String, ServiceSet>
ServiceManager::generate_sets()
{
- map<String, ServiceSet> sets;
-
- list<String> servs;
- String name = "Cluster Base";
- String descr = "Cluster infrastructure: ccs, cman, fence";
- if (RHEL4 || FC5) {
- servs.push_back("ccsd");
- servs.push_back("cman");
- servs.push_back("fenced");
- } else if (RHEL5 || FC6) {
- servs.push_back("cman");
- servs.push_back("qdiskd");
- }
- ServiceSet s(name, descr);
- if (populate_set(s, servs))
- sets[name] = s;
-
-
- if (RHEL4 || FC5) {
- servs.clear();
- name = "Cluster Base - Gulm";
- descr = "Cluster infrastructure: ccs, gulm";
- s = ServiceSet(name, descr);
- servs.push_back("ccsd");
- servs.push_back("lock_gulmd");
- if (populate_set(s, servs))
- sets[name] = s;
- }
-
-
- servs.clear();
- name = "Cluster Service Manager";
- descr = "Cluster Service Manager: rgmanager";
- s = ServiceSet(name, descr);
- servs.push_back("rgmanager");
- if (populate_set(s, servs))
- sets[name] = s;
-
-
- servs.clear();
- name = "Clustered Storage";
- if (RHEL4 || FC5) {
- descr = "Shared Storage: clvmd, gfs";
- servs.push_back("clvmd");
- servs.push_back("gfs");
- } else if (RHEL5 || FC6) {
- descr = "Shared Storage: clvmd, gfs, gfs2";
- servs.push_back("clvmd");
- servs.push_back("gfs");
- servs.push_back("gfs2");
- }
- s = ServiceSet(name, descr);
- if (populate_set(s, servs))
- sets[name] = s;
-
-
- servs.clear();
- name = "Linux Virtual Server";
- descr = "Red Hat's LVS implementation: pulse, piranha";
- s = ServiceSet(name, descr);
- servs.push_back("pulse");
- servs.push_back("piranha-gui");
- if (populate_set(s, servs))
- sets[name] = s;
+ map<String, ServiceSet> sets;
+ list<String> servs;
+ String name = "Cluster Base";
+ String descr = "Cluster infrastructure: ccs, cman, fence";
+
+ if (RHEL4 || FC5) {
+ servs.push_back("ccsd");
+ servs.push_back("cman");
+ servs.push_back("fenced");
+ } else if (RHEL5 || FC6) {
+ servs.push_back("cman");
+ servs.push_back("qdiskd");
+ }
+
+ ServiceSet s(name, descr);
+ if (populate_set(s, servs))
+ sets[name] = s;
+
+ if (RHEL4 || FC5) {
+ servs.clear();
+ name = "Cluster Base - Gulm";
+ descr = "Cluster infrastructure: ccs, gulm";
+ s = ServiceSet(name, descr);
+ servs.push_back("ccsd");
+ servs.push_back("lock_gulmd");
+ if (populate_set(s, servs))
+ sets[name] = s;
+ }
+
+ servs.clear();
+ name = "Cluster Service Manager";
+ descr = "Cluster Service Manager: rgmanager";
+ s = ServiceSet(name, descr);
+ servs.push_back("rgmanager");
+ if (populate_set(s, servs))
+ sets[name] = s;
+
+ servs.clear();
+ name = "Clustered Storage";
+ if (RHEL4 || FC5) {
+ descr = "Shared Storage: clvmd, gfs";
+ servs.push_back("clvmd");
+ servs.push_back("gfs");
+ } else if (RHEL5 || FC6) {
+ descr = "Shared Storage: clvmd, gfs, gfs2";
+ servs.push_back("clvmd");
+ servs.push_back("gfs");
+ servs.push_back("gfs2");
+ }
+ s = ServiceSet(name, descr);
+ if (populate_set(s, servs))
+ sets[name] = s;
+
+ servs.clear();
+ name = "Linux Virtual Server";
+ descr = "Red Hat's LVS implementation: pulse, piranha";
+ s = ServiceSet(name, descr);
+ servs.push_back("pulse");
+ servs.push_back("piranha-gui");
+ if (populate_set(s, servs))
+ sets[name] = s;
return sets;
}
bool
-ServiceManager::populate_set(ServiceSet& ss,
- std::list<String> servs)
+ServiceManager::populate_set(ServiceSet& ss, std::list<String> servs)
{
- for (list<String>::iterator n_iter = servs.begin();
- n_iter != servs.end();
- n_iter++) {
- if (_servs.find(*n_iter) == _servs.end())
- return false;
- else
- ss.servs.push_back(_servs[*n_iter]);
- }
- return true;
+ for (list<String>::iterator
+ n_iter = servs.begin() ;
+ n_iter != servs.end() ;
+ n_iter++)
+ {
+ if (_servs.find(*n_iter) == _servs.end())
+ return false;
+ else
+ ss.servs.push_back(_servs[*n_iter]);
+ }
+
+ return true;
}
void
-ServiceManager::enable(const std::list<String>& services,
- const std::list<String>& sets)
-{
- // check
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- if (_servs.find(*iter) == _servs.end())
- throw String("no such service: ") + *iter;
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- if (_sets.find(*iter) == _sets.end())
- throw String("no such service set: ") + *iter;
-
- // apply
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- _servs[*iter].enable();
-
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- _sets[*iter].enable();
+ServiceManager::enable( const std::list<String>& services,
+ const std::list<String>& sets)
+{
+ // check
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ if (_servs.find(*iter) == _servs.end())
+ throw String("no such service: ") + *iter;
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ if (_sets.find(*iter) == _sets.end())
+ throw String("no such service set: ") + *iter;
+ }
+
+ // apply
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ _servs[*iter].enable();
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ _sets[*iter].enable();
+ }
}
void
ServiceManager::disable(const std::list<String>& services,
- const std::list<String>& sets)
+ const std::list<String>& sets)
{
- // check
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- if (_servs.find(*iter) == _servs.end())
- throw String("no such service: ") + *iter;
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- if (_sets.find(*iter) == _sets.end())
- throw String("no such service set: ") + *iter;
-
- // apply
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- _servs[*iter].disable();
-
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- _sets[*iter].disable();
-}
-
-void
-ServiceManager::start(const std::list<String>& services,
- const std::list<String>& sets)
-{
- // check
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- if (_servs.find(*iter) == _servs.end())
- throw String("no such service: ") + *iter;
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- if (_sets.find(*iter) == _sets.end())
- throw String("no such service set: ") + *iter;
-
- // apply
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- _servs[*iter].start();
-
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- _sets[*iter].start();
+ // check
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ if (_servs.find(*iter) == _servs.end())
+ throw String("no such service: ") + *iter;
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ if (_sets.find(*iter) == _sets.end())
+ throw String("no such service set: ") + *iter;
+ }
+
+ // apply
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ _servs[*iter].disable();
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ _sets[*iter].disable();
+ }
+}
+
+void
+ServiceManager::start( const std::list<String>& services,
+ const std::list<String>& sets)
+{
+ // check
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ if (_servs.find(*iter) == _servs.end())
+ throw String("no such service: ") + *iter;
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ if (_sets.find(*iter) == _sets.end())
+ throw String("no such service set: ") + *iter;
+ }
+
+ // apply
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ _servs[*iter].start();
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ _sets[*iter].start();
+ }
}
void
ServiceManager::restart(const std::list<String>& services,
- const std::list<String>& sets)
+ const std::list<String>& sets)
{
- // check
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- if (_servs.find(*iter) == _servs.end())
- throw String("no such service: ") + *iter;
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- if (_sets.find(*iter) == _sets.end())
- throw String("no such service set: ") + *iter;
-
- // apply
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- _servs[*iter].restart();
-
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- _sets[*iter].restart();
-}
-
-void
-ServiceManager::stop(const std::list<String>& services,
- const std::list<String>& sets)
-{
- // check
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- if (_servs.find(*iter) == _servs.end())
- throw String("no such service: ") + *iter;
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- if (_sets.find(*iter) == _sets.end())
- throw String("no such service set: ") + *iter;
-
- // apply
- for (list<String>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- _servs[*iter].stop();
-
- for (list<String>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- _sets[*iter].stop();
-}
-
-void
-ServiceManager::lists(std::list<Service>& services,
- std::list<ServiceSet>& sets)
-{
- services.clear();
- sets.clear();
-
- for (map<String, Service>::const_iterator iter = _servs.begin();
- iter != _servs.end();
- iter++)
- services.push_back(iter->second);
-
- for (map<String, ServiceSet>::const_iterator iter = _sets.begin();
- iter != _sets.end();
- iter++)
- sets.push_back(iter->second);
-}
-
-void
-ServiceManager::query(const std::list<String>& serv_names,
- const std::list<String>& set_names,
- std::list<Service>& services,
- std::list<ServiceSet>& sets)
-{
- services.clear();
- sets.clear();
-
- for (list<String>::const_iterator iter = serv_names.begin();
- iter != serv_names.end();
- iter++)
- if (_servs.find(*iter) != _servs.end())
- services.push_back(_servs[*iter]);
-
- for (list<String>::const_iterator iter = set_names.begin();
- iter != set_names.end();
- iter++)
- if (_sets.find(*iter) != _sets.end())
- sets.push_back(_sets[*iter]);
+ // check
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ if (_servs.find(*iter) == _servs.end())
+ throw String("no such service: ") + *iter;
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ if (_sets.find(*iter) == _sets.end())
+ throw String("no such service set: ") + *iter;
+ }
+
+ // apply
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ _servs[*iter].restart();
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ _sets[*iter].restart();
+ }
+}
+
+void
+ServiceManager::stop( const std::list<String>& services,
+ const std::list<String>& sets)
+{
+ // check
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ if (_servs.find(*iter) == _servs.end())
+ throw String("no such service: ") + *iter;
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ if (_sets.find(*iter) == _sets.end())
+ throw String("no such service set: ") + *iter;
+ }
+
+ // apply
+ for (list<String>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ _servs[*iter].stop();
+ }
+
+ for (list<String>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ _sets[*iter].stop();
+ }
+}
+
+void
+ServiceManager::lists( std::list<Service>& services,
+ std::list<ServiceSet>& sets)
+{
+ services.clear();
+ sets.clear();
+
+ for (map<String, Service>::const_iterator
+ iter = _servs.begin() ;
+ iter != _servs.end() ;
+ iter++)
+ {
+ services.push_back(iter->second);
+ }
+
+ for (map<String, ServiceSet>::const_iterator
+ iter = _sets.begin() ;
+ iter != _sets.end() ;
+ iter++)
+ {
+ sets.push_back(iter->second);
+ }
+}
+
+void
+ServiceManager::query( const std::list<String>& serv_names,
+ const std::list<String>& set_names,
+ std::list<Service>& services,
+ std::list<ServiceSet>& sets)
+{
+ services.clear();
+ sets.clear();
+
+ for (list<String>::const_iterator
+ iter = serv_names.begin() ;
+ iter != serv_names.end() ;
+ iter++)
+ {
+ if (_servs.find(*iter) != _servs.end())
+ services.push_back(_servs[*iter]);
+ }
+
+ for (list<String>::const_iterator iter = set_names.begin() ;
+ iter != set_names.end() ;
+ iter++)
+ {
+ if (_sets.find(*iter) != _sets.end())
+ sets.push_back(_sets[*iter]);
+ }
}
-
-
-
-
-
-
void
set_release()
{
- static bool release_set = false;
- if (!release_set) {
- String release(utils::strip(File::open("/etc/redhat-release")));
- if (release.find("Nahant") != release.npos)
- RHEL4 = true;
- else if (release.find("Bordeaux") != release.npos)
- FC5 = true;
- else if (release.find("Fedora Core") != release.npos &&
- release.find("6") != release.npos)
- // TODO: detect FC6
- FC6 = true;
- else if (release.find("Tikanga") != release.npos)
- RHEL5 = true;
+ static bool release_set = false;
+
+ if (!release_set) {
+ String release(utils::strip(File::open("/etc/redhat-release")));
+
+ if (release.find("Nahant") != release.npos)
+ RHEL4 = true;
+ else if (release.find("Bordeaux") != release.npos)
+ FC5 = true;
+ else if (release.find("Zod") != release.npos)
+ FC6 = true;
+ else if (release.find("Moonshine") != release.npos)
+ FC6 = true;
+ else if (release.find("Tikanga") != release.npos)
+ RHEL5 = true;
+ else {
+ /* Fallback to RHEL5 if we don't match on any release name. */
+ RHEL5 = true;
+ }
- release_set = true;
- }
+ release_set = true;
+ }
}
--- conga/ricci/modules/service/ServiceManager.h 2007/09/11 02:45:28 1.5
+++ conga/ricci/modules/service/ServiceManager.h 2007/09/11 13:53:19 1.6
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2006
+ Copyright Red Hat, Inc. 2006-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -37,104 +37,96 @@
class Service
{
- public:
- Service();
- virtual ~Service();
-
- String name() const;
- bool enabled() const;
- bool running() const;
- String description() const;
-
- void enable();
- void disable();
- void restart();
- void start();
- void stop();
-
- XMLObject xml(bool descriptions) const;
-
- private:
- Service(const String& name, bool enabled);
-
- mutable counting_auto_ptr<String> _name;
- mutable counting_auto_ptr<String> _descr;
- mutable counting_auto_ptr<bool> _enabled;
- mutable counting_auto_ptr<bool> _running;
-
- enum ActionState {
- START,
- STOP,
- RESTART
- };
-
- static void enable_service(const String& name, bool on);
- static bool service_running(const String& name);
- static void run_service(const String& name, ActionState state);
-
- friend class ServiceManager;
+ public:
+ Service();
+ virtual ~Service();
+
+ String name() const;
+ bool enabled() const;
+ bool running() const;
+ String description() const;
+
+ void enable();
+ void disable();
+ void restart();
+ void start();
+ void stop();
+
+ XMLObject xml(bool descriptions) const;
+
+ private:
+ Service(const String& name, bool enabled);
+
+ mutable counting_auto_ptr<String> _name;
+ mutable counting_auto_ptr<String> _descr;
+ mutable counting_auto_ptr<bool> _enabled;
+ mutable counting_auto_ptr<bool> _running;
+
+ enum ActionState {
+ START,
+ STOP,
+ RESTART
+ };
+
+ static void enable_service(const String& name, bool on);
+ static bool service_running(const String& name);
+ static void run_service(const String& name, ActionState state);
+ friend class ServiceManager;
};
class ServiceSet
{
- public:
- ServiceSet();
- ServiceSet(const String& name, const String& description);
- virtual ~ServiceSet();
-
- String name() const;
- bool enabled() const;
- bool running() const;
- String description() const;
-
- void enable();
- void disable();
- void start();
- void restart();
- void stop();
-
- std::list<Service> servs;
-
- XMLObject xml(bool descriptions) const;
-
- private:
- mutable counting_auto_ptr<String> _name;
- mutable counting_auto_ptr<String> _descr;
-
+ public:
+ ServiceSet();
+ ServiceSet(const String& name, const String& description);
+ virtual ~ServiceSet();
+
+ String name() const;
+ bool enabled() const;
+ bool running() const;
+ String description() const;
+
+ void enable();
+ void disable();
+ void start();
+ void restart();
+ void stop();
+
+ std::list<Service> servs;
+ XMLObject xml(bool descriptions) const;
+
+ private:
+ mutable counting_auto_ptr<String> _name;
+ mutable counting_auto_ptr<String> _descr;
};
-
class ServiceManager
{
- public:
- ServiceManager();
- virtual ~ServiceManager();
-
- void enable(const std::list<String>& services, const std::list<String>& sets);
- void disable(const std::list<String>& services, const std::list<String>& sets);
-
- void start(const std::list<String>& services, const std::list<String>& sets);
- void restart(const std::list<String>& services, const std::list<String>& sets);
- void stop(const std::list<String>& services, const std::list<String>& sets);
-
- void lists(std::list<Service>& services,
- std::list<ServiceSet>& sets);
-
- void query(const std::list<String>& serv_names,
- const std::list<String>& set_names,
- std::list<Service>& services,
- std::list<ServiceSet>& sets);
-
- private:
- std::map<String, Service> _servs;
- std::map<String, ServiceSet> _sets;
-
- std::map<String, ServiceSet> generate_sets();
-
- bool populate_set(ServiceSet& ss, std::list<String> servs);
+ public:
+ ServiceManager();
+ virtual ~ServiceManager();
+
+ void enable(const std::list<String>& services, const std::list<String>& sets);
+ void disable(const std::list<String>& services, const std::list<String>& sets);
+
+ void start(const std::list<String>& services, const std::list<String>& sets);
+ void restart(const std::list<String>& services, const std::list<String>& sets);
+ void stop(const std::list<String>& services, const std::list<String>& sets);
+
+ void lists(std::list<Service>& services, std::list<ServiceSet>& sets);
+
+ void query( const std::list<String>& serv_names,
+ const std::list<String>& set_names,
+ std::list<Service>& services,
+ std::list<ServiceSet>& sets);
+
+ private:
+ std::map<String, Service> _servs;
+ std::map<String, ServiceSet> _sets;
+ std::map<String, ServiceSet> generate_sets();
+ bool populate_set(ServiceSet& ss, std::list<String> servs);
};
-
-#endif // ServiceManager_h
+#endif
--- conga/ricci/modules/service/ServiceModule.cpp 2007/09/11 02:45:28 1.5
+++ conga/ricci/modules/service/ServiceModule.cpp 2007/09/11 13:53:19 1.6
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2006
+ Copyright Red Hat, Inc. 2006-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -27,7 +27,6 @@
using namespace std;
-
static VarMap enable(const VarMap& args);
static VarMap disable(const VarMap& args);
static VarMap start(const VarMap& args);
@@ -38,264 +37,285 @@
static ApiFcnMap build_fcn_map();
-
ServiceModule::ServiceModule() :
- Module(build_fcn_map())
+ Module(build_fcn_map())
{}
ServiceModule::~ServiceModule()
{}
-
ApiFcnMap
build_fcn_map()
{
- FcnMap api_1_0;
- api_1_0["enable"] = enable;
- api_1_0["disable"] = disable;
- api_1_0["start"] = start;
- api_1_0["restart"] = restart;
- api_1_0["stop"] = stop;
- api_1_0["list"] = lists;
- api_1_0["query"] = query;
+ FcnMap api_1_0;
- ApiFcnMap api_fcn_map;
- api_fcn_map["1.0"] = api_1_0;
+ api_1_0["enable"] = enable;
+ api_1_0["disable"] = disable;
+ api_1_0["start"] = start;
+ api_1_0["restart"] = restart;
+ api_1_0["stop"] = stop;
+ api_1_0["list"] = lists;
+ api_1_0["query"] = query;
- return api_fcn_map;
-}
+ ApiFcnMap api_fcn_map;
+ api_fcn_map["1.0"] = api_1_0;
+ return api_fcn_map;
+}
VarMap
enable(const VarMap& args)
{
- list<XMLObject> serv_list;
- try {
- VarMap::const_iterator iter = args.find("services");
- if (iter == args.end())
- throw APIerror("missing services variable");
- serv_list = iter->second.get_list_XML();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- list<String> services, sets;
- for (list<XMLObject>::const_iterator iter = serv_list.begin();
- iter != serv_list.end();
- iter++) {
- if (iter->tag() == "service")
- services.push_back(iter->get_attr("name"));
- else if (iter->tag() == "set")
- sets.push_back(iter->get_attr("name"));
- }
+ list<XMLObject> serv_list;
- ServiceManager().enable(services, sets);
+ try {
+ VarMap::const_iterator iter = args.find("services");
+ if (iter == args.end())
+ throw APIerror("missing services variable");
+ serv_list = iter->second.get_list_XML();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ list<String> services, sets;
+ for (list<XMLObject>::const_iterator
+ iter = serv_list.begin() ;
+ iter != serv_list.end() ;
+ iter++)
+ {
+ if (iter->tag() == "service")
+ services.push_back(iter->get_attr("name"));
+ else if (iter->tag() == "set")
+ sets.push_back(iter->get_attr("name"));
+ }
- return VarMap();
+ ServiceManager().enable(services, sets);
+ return VarMap();
}
VarMap
disable(const VarMap& args)
{
- list<XMLObject> serv_list;
- try {
- VarMap::const_iterator iter = args.find("services");
- if (iter == args.end())
- throw APIerror("missing services variable");
- serv_list = iter->second.get_list_XML();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- list<String> services, sets;
- for (list<XMLObject>::const_iterator iter = serv_list.begin();
- iter != serv_list.end();
- iter++) {
- if (iter->tag() == "service")
- services.push_back(iter->get_attr("name"));
- else if (iter->tag() == "set")
- sets.push_back(iter->get_attr("name"));
- }
+ list<XMLObject> serv_list;
- ServiceManager().disable(services, sets);
+ try {
+ VarMap::const_iterator iter = args.find("services");
+ if (iter == args.end())
+ throw APIerror("missing services variable");
+ serv_list = iter->second.get_list_XML();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ list<String> services, sets;
+ for (list<XMLObject>::const_iterator
+ iter = serv_list.begin() ;
+ iter != serv_list.end() ;
+ iter++)
+ {
+ if (iter->tag() == "service")
+ services.push_back(iter->get_attr("name"));
+ else if (iter->tag() == "set")
+ sets.push_back(iter->get_attr("name"));
+ }
- return VarMap();
+ ServiceManager().disable(services, sets);
+ return VarMap();
}
VarMap
start(const VarMap& args)
{
- list<XMLObject> serv_list;
- try {
- VarMap::const_iterator iter = args.find("services");
- if (iter == args.end())
- throw APIerror("missing services variable");
- serv_list = iter->second.get_list_XML();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- list<String> services, sets;
- for (list<XMLObject>::const_iterator iter = serv_list.begin();
- iter != serv_list.end();
- iter++) {
- if (iter->tag() == "service")
- services.push_back(iter->get_attr("name"));
- else if (iter->tag() == "set")
- sets.push_back(iter->get_attr("name"));
- }
+ list<XMLObject> serv_list;
- ServiceManager().start(services, sets);
+ try {
+ VarMap::const_iterator iter = args.find("services");
+ if (iter == args.end())
+ throw APIerror("missing services variable");
+ serv_list = iter->second.get_list_XML();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ list<String> services, sets;
+ for (list<XMLObject>::const_iterator
+ iter = serv_list.begin() ;
+ iter != serv_list.end() ;
+ iter++)
+ {
+ if (iter->tag() == "service")
+ services.push_back(iter->get_attr("name"));
+ else if (iter->tag() == "set")
+ sets.push_back(iter->get_attr("name"));
+ }
- return VarMap();
+ ServiceManager().start(services, sets);
+ return VarMap();
}
VarMap
restart(const VarMap& args)
{
- list<XMLObject> serv_list;
- try {
- VarMap::const_iterator iter = args.find("services");
- if (iter == args.end())
- throw APIerror("missing services variable");
- serv_list = iter->second.get_list_XML();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- list<String> services, sets;
- for (list<XMLObject>::const_iterator iter = serv_list.begin();
- iter != serv_list.end();
- iter++) {
- if (iter->tag() == "service")
- services.push_back(iter->get_attr("name"));
- else if (iter->tag() == "set")
- sets.push_back(iter->get_attr("name"));
- }
+ list<XMLObject> serv_list;
- ServiceManager().restart(services, sets);
+ try {
+ VarMap::const_iterator iter = args.find("services");
+ if (iter == args.end())
+ throw APIerror("missing services variable");
+ serv_list = iter->second.get_list_XML();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ list<String> services, sets;
+ for (list<XMLObject>::const_iterator
+ iter = serv_list.begin() ;
+ iter != serv_list.end() ;
+ iter++)
+ {
+ if (iter->tag() == "service")
+ services.push_back(iter->get_attr("name"));
+ else if (iter->tag() == "set")
+ sets.push_back(iter->get_attr("name"));
+ }
- return VarMap();
+ ServiceManager().restart(services, sets);
+ return VarMap();
}
VarMap
stop(const VarMap& args)
{
- list<XMLObject> serv_list;
- try {
- VarMap::const_iterator iter = args.find("services");
- if (iter == args.end())
- throw APIerror("missing services variable");
- serv_list = iter->second.get_list_XML();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- list<String> services, sets;
- for (list<XMLObject>::const_iterator iter = serv_list.begin();
- iter != serv_list.end();
- iter++) {
- if (iter->tag() == "service")
- services.push_back(iter->get_attr("name"));
- else if (iter->tag() == "set")
- sets.push_back(iter->get_attr("name"));
- }
+ list<XMLObject> serv_list;
- ServiceManager().stop(services, sets);
+ try {
+ VarMap::const_iterator iter = args.find("services");
+ if (iter == args.end())
+ throw APIerror("missing services variable");
+ serv_list = iter->second.get_list_XML();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ list<String> services, sets;
+ for (list<XMLObject>::const_iterator
+ iter = serv_list.begin() ;
+ iter != serv_list.end() ;
+ iter++)
+ {
+ if (iter->tag() == "service")
+ services.push_back(iter->get_attr("name"));
+ else if (iter->tag() == "set")
+ sets.push_back(iter->get_attr("name"));
+ }
- return VarMap();
+ ServiceManager().stop(services, sets);
+ return VarMap();
}
VarMap
lists(const VarMap& args)
{
- bool descr;
- try {
- descr = false;
- VarMap::const_iterator iter = args.find("description");
- if (iter != args.end())
- descr = iter->second.get_bool();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- // command
-
- list<XMLObject> xml_list;
-
- list<Service> services;
- list<ServiceSet> sets;
- ServiceManager().lists(services, sets);
- for (list<Service>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- xml_list.push_back(iter->xml(descr));
- for (list<ServiceSet>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- xml_list.push_back(iter->xml(descr));
-
- // response
- Variable var("services", xml_list);
-
- VarMap ret;
- ret.insert(pair<String, Variable>(var.name(), var));
- return ret;
+ bool descr;
+
+ try {
+ descr = false;
+ VarMap::const_iterator iter = args.find("description");
+
+ if (iter != args.end())
+ descr = iter->second.get_bool();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ // command
+ list<XMLObject> xml_list;
+
+ list<Service> services;
+ list<ServiceSet> sets;
+ ServiceManager().lists(services, sets);
+
+ for (list<Service>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ xml_list.push_back(iter->xml(descr));
+ }
+
+ for (list<ServiceSet>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ xml_list.push_back(iter->xml(descr));
+ }
+
+ // response
+ Variable var("services", xml_list);
+ VarMap ret;
+ ret.insert(pair<String, Variable>(var.name(), var));
+ return ret;
}
VarMap
query(const VarMap& args)
{
- list<XMLObject> search_list;
- bool descr;
- try {
- VarMap::const_iterator iter = args.find("search");
- if (iter == args.end())
- throw APIerror("missing search variable");
- search_list = iter->second.get_list_XML();
-
- descr = false;
- iter = args.find("description");
- if (iter != args.end())
- descr = iter->second.get_bool();
- } catch ( String e ) {
- throw APIerror(e);
- }
-
- // command
-
- list<String> serv_names, set_names;
- for (list<XMLObject>::const_iterator iter = search_list.begin();
- iter != search_list.end();
- iter++) {
- if (iter->tag() == "service")
- serv_names.push_back(iter->get_attr("name"));
- else if (iter->tag() == "set")
- set_names.push_back(iter->get_attr("name"));
- }
-
- list<Service> services;
- list<ServiceSet> sets;
- ServiceManager().query(serv_names,
- set_names,
- services,
- sets);
-
- // response
-
- list<XMLObject> result_list;
- for (list<Service>::const_iterator iter = services.begin();
- iter != services.end();
- iter++)
- result_list.push_back(iter->xml(descr));
- for (list<ServiceSet>::const_iterator iter = sets.begin();
- iter != sets.end();
- iter++)
- result_list.push_back(iter->xml(descr));
-
- Variable var("result", result_list);
-
- VarMap ret;
- ret.insert(pair<String, Variable>(var.name(), var));
- return ret;
+ list<XMLObject> search_list;
+ bool descr;
+
+ try {
+ VarMap::const_iterator iter = args.find("search");
+ if (iter == args.end())
+ throw APIerror("missing search variable");
+ search_list = iter->second.get_list_XML();
+
+ descr = false;
+ iter = args.find("description");
+ if (iter != args.end())
+ descr = iter->second.get_bool();
+ } catch ( String e ) {
+ throw APIerror(e);
+ }
+
+ // command
+ list<String> serv_names, set_names;
+ for (list<XMLObject>::const_iterator
+ iter = search_list.begin() ;
+ iter != search_list.end() ;
+ iter++)
+ {
+ if (iter->tag() == "service")
+ serv_names.push_back(iter->get_attr("name"));
+ else if (iter->tag() == "set")
+ set_names.push_back(iter->get_attr("name"));
+ }
+
+ list<Service> services;
+ list<ServiceSet> sets;
+ ServiceManager().query(serv_names, set_names, services, sets);
+
+ // response
+ list<XMLObject> result_list;
+ for (list<Service>::const_iterator
+ iter = services.begin() ;
+ iter != services.end() ;
+ iter++)
+ {
+ result_list.push_back(iter->xml(descr));
+ }
+
+ for (list<ServiceSet>::const_iterator
+ iter = sets.begin() ;
+ iter != sets.end() ;
+ iter++)
+ {
+ result_list.push_back(iter->xml(descr));
+ }
+
+ Variable var("result", result_list);
+
+ VarMap ret;
+ ret.insert(pair<String, Variable>(var.name(), var));
+ return ret;
}
--- conga/ricci/modules/service/ServiceModule.h 2007/09/11 02:45:28 1.2
+++ conga/ricci/modules/service/ServiceModule.h 2007/09/11 13:53:19 1.3
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2006
+ Copyright Red Hat, Inc. 2006-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
--- conga/ricci/modules/service/main.cpp 2007/09/11 02:45:28 1.5
+++ conga/ricci/modules/service/main.cpp 2007/09/11 13:53:19 1.6
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -20,22 +20,20 @@
* Author: Stanko Kupcevic <kupcevic at redhat.com>
*/
-
#include "ServiceModule.h"
#include <iostream>
+
using namespace std;
int
-main(int argc, char** argv)
+main(int argc, char **argv)
{
- try {
- ServiceModule m;
- return stdin_out_module_driver(m,
- argc,
- argv);
- } catch (String e) {
- cerr << e << endl;
- return 1;
- }
+ try {
+ ServiceModule m;
+ return stdin_out_module_driver(m, argc, argv);
+ } catch (String e) {
+ cerr << e << endl;
+ return 1;
+ }
}
More information about the Cluster-devel
mailing list