[Cluster-devel] conga/ricci/modules/storage StorageModule.cpp
rmccabe at sourceware.org
rmccabe at sourceware.org
Mon Sep 24 18:05:57 UTC 2007
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-09-24 18:05:57
Modified files:
ricci/modules/storage: StorageModule.cpp
Log message:
Fix 242943: Changes to clustered volumes should be made on all cluster nodes, pass 1
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9
--- conga/ricci/modules/storage/StorageModule.cpp 2007/09/11 02:45:28 1.8
+++ conga/ricci/modules/storage/StorageModule.cpp 2007/09/24 18:05:55 1.9
@@ -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
@@ -26,6 +26,7 @@
#include "BDFactory.h"
#include "LVM.h"
#include "FSController.h"
+#include "MountHandler.h"
using namespace std;
@@ -49,6 +50,10 @@
static VarMap modify_bd(const VarMap& args);
static VarMap remove_bd(const VarMap& args);
static VarMap get_fs_group_members(const VarMap& args);
+static VarMap mount_fs(const VarMap& args);
+static VarMap umount_fs(const VarMap& args);
+static VarMap fstab_add(const VarMap& args);
+static VarMap fstab_del(const VarMap& args);
static VarMap enable_clustered_lvm(const VarMap& args);
static VarMap disable_clustered_lvm(const VarMap& args);
@@ -86,11 +91,14 @@
api_1_0["modify_bd"] = modify_bd;
api_1_0["remove_bd"] = remove_bd;
- api_1_0["get_fs_group_members"] = get_fs_group_members;
-
- api_1_0["enable_clustered_lvm"] = enable_clustered_lvm;
- api_1_0["disable_clustered_lvm"] = disable_clustered_lvm;
+ api_1_0["get_fs_group_members"] = get_fs_group_members;
+ api_1_0["enable_clustered_lvm"] = enable_clustered_lvm;
+ api_1_0["disable_clustered_lvm"] = disable_clustered_lvm;
+ api_1_0["mount_fs"] = mount_fs;
+ api_1_0["umount_fs"] = umount_fs;
+ api_1_0["fstab_add"] = fstab_add;
+ api_1_0["fstab_del"] = fstab_del;
ApiFcnMap api_fcn_map;
api_fcn_map["1.0"] = api_1_0;
@@ -451,6 +459,137 @@
return ret;
}
+VarMap
+mount_fs(const VarMap& args)
+{
+ String device, mountpoint, fstype;
+
+ try {
+ VarMap::const_iterator iter = args.find("device");
+ if (iter == args.end())
+ throw APIerror("missing device variable");
+ device = iter->second.get_string();
+
+ iter = args.find("mountpoint");
+ if (iter == args.end())
+ throw APIerror("missing mountpoint variable");
+ mountpoint = iter->second.get_string();
+
+ iter = args.find("fstype");
+ if (iter == args.end())
+ throw APIerror("missing fstyle variable");
+ fstype = iter->second.get_string();
+
+ MountHandler mh;
+ if (!mh.mount(device, mountpoint, fstype)) {
+ throw APIerror("mounting " + device + " at "
+ + mountpoint + " failed");
+ }
+ } catch (String e) {
+ throw APIerror(e);
+ }
+
+ VarMap ret;
+ return ret;
+}
+
+VarMap
+umount_fs(const VarMap& args)
+{
+ String device(""), mountpoint("");
+
+ try {
+ VarMap::const_iterator iter = args.find("device");
+ if (iter != args.end())
+ device = iter->second.get_string();
+
+ iter = args.find("mountpoint");
+ if (iter != args.end())
+ mountpoint = iter->second.get_string();
+
+ if (!device.size() && !mountpoint.size())
+ throw APIerror("no device or mount point variable");
+
+ MountHandler mh;
+ if (mountpoint.size() > 0) {
+ if (mh.umount((device.size() > 0 ? device : ""), mountpoint)) {
+ VarMap ret;
+ return ret;
+ }
+ }
+
+ if (device.size() > 0) {
+ if (mh.umount(device, device)) {
+ VarMap ret;
+ return ret;
+ }
+ }
+ } catch (String e) {
+ throw APIerror(e);
+ }
+
+ throw APIerror("unable to unmount "
+ + (mountpoint.size() ? mountpoint : device));
+}
+
+VarMap
+fstab_add(const VarMap& args)
+{
+ String device, mountpoint, fstype;
+
+ try {
+ VarMap::const_iterator iter = args.find("device");
+ if (iter == args.end())
+ throw APIerror("missing device variable");
+ device = iter->second.get_string();
+
+ iter = args.find("mountpoint");
+ if (iter == args.end())
+ throw APIerror("missing mountpoint variable");
+ mountpoint = iter->second.get_string();
+
+ iter = args.find("fstype");
+ if (iter == args.end())
+ throw APIerror("missing fstyle variable");
+ fstype = iter->second.get_string();
+
+ MountHandler mh;
+ if (!mh.fstab_add(device, mountpoint, fstype)) {
+ throw APIerror("adding " + device + " at "
+ + mountpoint + " to fstab failed");
+ }
+ } catch (String e) {
+ throw APIerror(e);
+ }
+
+ VarMap ret;
+ return ret;
+}
+
+VarMap
+fstab_del(const VarMap& args)
+{
+ String device, mountpoint;
+
+ try {
+ VarMap::const_iterator iter = args.find("device");
+ if (iter == args.end())
+ throw APIerror("missing device variable");
+ device = iter->second.get_string();
+
+ iter = args.find("mountpoint");
+ if (iter == args.end())
+ throw APIerror("missing mountpoint variable");
+ mountpoint = iter->second.get_string();
+ MountHandler mh;
+ mh.fstab_remove(device, mountpoint);
+ } catch (String e) {
+ throw APIerror(e);
+ }
+
+ VarMap ret;
+ return ret;
+}
list<XMLObject>
_mapper_ids(const String& mapper_type)
More information about the Cluster-devel
mailing list