[Cluster-devel] conga ./conga.spec.in.in luci/site/luci/Extens ...

rmccabe at sourceware.org rmccabe at sourceware.org
Mon Jun 25 19:10:56 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2007-06-25 19:10:55

Modified files:
	.              : conga.spec.in.in 
	luci/site/luci/Extensions/ClusterModel: ModelBuilder.py 
	ricci/modules/storage: FSController.cpp FSController.h Makefile 
	                       StorageModule.cpp 
Added files:
	ricci/test_suite/storage: get_fs_group_members.xml 

Log message:
	Add a call to retrieve the list of nodes with a gfs volume mounted

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.40&r2=1.45.2.41
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7&r2=1.7.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12&r2=1.12.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/get_fs_group_members.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1

--- conga/conga.spec.in.in	2007/06/25 16:17:27	1.45.2.40
+++ conga/conga.spec.in.in	2007/06/25 19:10:53	1.45.2.41
@@ -38,7 +38,7 @@
 
 BuildRequires: python-devel >= 2.4.1
 BuildRequires: glibc-devel gcc-c++ libxml2-devel sed
-#BuildRequires: pam-devel
+BuildRequires: cman-devel
 BuildRequires: cyrus-sasl-devel >= 2.1
 BuildRequires: openssl-devel dbus-devel pkgconfig file
 
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/06/18 18:39:33	1.1.4.1
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py	2007/06/25 19:10:55	1.1.4.2
@@ -507,6 +507,9 @@
   def getNodeNames(self):
     return map(lambda x: x.getName(), self.clusternodes_ptr.getChildren())
 
+  def getNodeNameById(self, node_id):
+    return filter(lambda x: x.getAttribute('nodeid') == node_id, self.clusternodes_ptr.getChildren())[0].getName()
+
   def addNode(self, clusternode):
     self.clusternodes_ptr.addChild(clusternode)
     if self.usesMulticast is True:
--- conga/ricci/modules/storage/FSController.cpp	2006/09/26 03:20:47	1.7
+++ conga/ricci/modules/storage/FSController.cpp	2007/06/25 19:10:55	1.7.2.1
@@ -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,7 +20,6 @@
  * Author: Stanko Kupcevic <kupcevic at redhat.com>
  */
 
-
 #include "FSController.h"
 #include "ExtendedFS.h"
 #include "SwapFS.h"
@@ -28,10 +27,32 @@
 #include "GFS2.h"
 #include "UnsupportedFS.h"
 #include "utils.h"
-
+#include <errno.h>
+#include <libgroup.h>
 
 using namespace std;
 
+std::list<String>
+FSController::get_fs_group_ids(const String& name)
+{
+	list<String> members;
+	group_data_t fsgroup;
+
+	if (group_get_group(2, name.c_str(), &fsgroup) != 0)
+		throw String("error retrieving group members for " + name + ": " + strerror(errno));
+
+	if (!fsgroup.member)
+		throw String("the local node does not have " + name + " mounted");
+
+	for (int i = 0 ; i < fsgroup.member_count ; i++) {
+		char buf[8];
+		int ret = snprintf(buf, sizeof(buf), "%d", fsgroup.members[i]);
+		if (ret < 1 || (size_t) ret >= sizeof(buf))
+			throw String("invalid node id");
+    	members.push_back(String(buf));
+	}
+	return members;
+}
 
 counting_auto_ptr<Content> 
 FSController::get_fs(const String& path)
--- conga/ricci/modules/storage/FSController.h	2006/08/10 22:53:09	1.2
+++ conga/ricci/modules/storage/FSController.h	2007/06/25 19:10:55	1.2.2.1
@@ -33,7 +33,8 @@
 class FSController
 {
  public:
-  
+  std::list<String> get_fs_group_ids(const String& name);
+ 
   counting_auto_ptr<Content> get_fs(const String& path);
   
   std::list<counting_auto_ptr<ContentTemplate> > get_available_fss();
--- conga/ricci/modules/storage/Makefile	2006/09/26 03:17:41	1.12
+++ conga/ricci/modules/storage/Makefile	2007/06/25 19:10:55	1.12.2.1
@@ -56,7 +56,7 @@
 
 INCLUDE    += 
 CXXFLAGS   += 
-LDFLAGS    += -lmagic
+LDFLAGS    += -lgroup -lmagic
 
 all: ${TARGET}
 
--- conga/ricci/modules/storage/StorageModule.cpp	2006/12/12 13:26:24	1.5.2.1
+++ conga/ricci/modules/storage/StorageModule.cpp	2007/06/25 19:10:55	1.5.2.2
@@ -25,6 +25,7 @@
 #include "MapperFactory.h"
 #include "BDFactory.h"
 #include "LVM.h"
+#include "FSController.h"
 
 
 using namespace std;
@@ -47,6 +48,7 @@
 static VarMap get_bd(const VarMap& args);
 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 enable_clustered_lvm(const VarMap& args);
 static VarMap disable_clustered_lvm(const VarMap& args);
@@ -83,6 +85,8 @@
   api_1_0["get_bd"]                             = get_bd;
   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;
@@ -416,8 +420,36 @@
   return ret;
 }
 
+VarMap 
+get_fs_group_members(const VarMap& args)
+{
+  String fsname;
+  try {
+    VarMap::const_iterator iter = args.find("fsname");
+    if (iter == args.end())
+      throw APIerror("missing fsname variable");
+    fsname = iter->second.get_string();
+    if (fsname == "")
+		throw APIerror("missing fsname value");
+  } catch ( String e ) {
+    throw APIerror(e);
+  }
 
+  list<XMLObject> ids_list;
+  list<String> group_ids = FSController().get_fs_group_ids(fsname);
+
+  for (list<String>::iterator iter = group_ids.begin() ; iter != group_ids.end() ; iter++)
+  {
+	XMLObject id_xml("group_member");
+	id_xml.set_attr("nodeid", String(*iter));
+	ids_list.push_back(id_xml);
+  }
 
+  Variable var("group_member_list", ids_list);
+  VarMap ret;
+  ret.insert(pair<String, Variable>(var.name(), var));
+  return ret;
+}
 
 
 list<XMLObject> 




More information about the Cluster-devel mailing list