[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] Cluster Project branch, master, updated. cluster-2.99.05-56-ge88a7d8



This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Cluster Project".

http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=e88a7d8044de44be39369f99d65bdb818e478c97

The branch, master has been updated
       via  e88a7d8044de44be39369f99d65bdb818e478c97 (commit)
      from  6fb8dc9d73db3a5e48589ee274f1c34ee4bc76c5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e88a7d8044de44be39369f99d65bdb818e478c97
Author: Christine Caulfield <ccaulfie redhat com>
Date:   Wed Jul 9 15:18:09 2008 +0100

    [CONFIG] Add ldap loader
    
    Add a new tool to load an existing cluster config into LDAP. This
    is as incomplete as the schema at the moment, but it will allow
    you to add nodes and some very basic fencing devices.
    
    It uses libconfdb so it can migrate either a running system
    or a cluster.conf file.
    
    Signed-off-by: Christine Caulfield <ccaulfie redhat com>

-----------------------------------------------------------------------

Summary of changes:
 config/plugins/ldap/99cluster.ldif       |    2 +-
 config/tools/{ccs_test => ldap}/Makefile |    8 +-
 config/tools/ldap/loadldap.c             |  206 ++++++++++++++++++++++++++++++
 3 files changed, 211 insertions(+), 5 deletions(-)
 copy config/tools/{ccs_test => ldap}/Makefile (81%)
 create mode 100644 config/tools/ldap/loadldap.c

diff --git a/config/plugins/ldap/99cluster.ldif b/config/plugins/ldap/99cluster.ldif
index bd2d843..7b53a12 100644
--- a/config/plugins/ldap/99cluster.ldif
+++ b/config/plugins/ldap/99cluster.ldif
@@ -129,7 +129,7 @@ objectClasses: (
      1.3.6.1.4.1.2312.8.1.2.6 NAME 'rhcsFenceagent' SUP top STRUCTURAL
      DESC 'A Fence device'
      MUST ( name )
-     MAY ( rhcsPort )
+     MAY ( rhcsPort $ rhcsIpaddr )
    )
 objectClasses: ( 
      1.3.6.1.4.1.2312.8.1.2.7 NAME 'rhcsFencemethod' SUP top STRUCTURAL
diff --git a/config/tools/ccs_test/Makefile b/config/tools/ldap/Makefile
similarity index 81%
copy from config/tools/ccs_test/Makefile
copy to config/tools/ldap/Makefile
index f0ebddc..dae9849 100644
--- a/config/tools/ccs_test/Makefile
+++ b/config/tools/ldap/Makefile
@@ -1,4 +1,4 @@
-TARGET= ccs_test
+TARGET= loadldap
 
 SBINDIRT=$(TARGET)
 
@@ -10,13 +10,13 @@ include $(OBJDIR)/make/clean.mk
 include $(OBJDIR)/make/install.mk
 include $(OBJDIR)/make/uninstall.mk
 
-OBJS=	ccs_test.o
+OBJS=	loadldap.o
 
 CFLAGS += -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
-CFLAGS += -I${ccsincdir}
+CFLAGS += -I${openaisincdir}
 CFLAGS += -I${incdir}
 
-LDFLAGS += -L${ccslibdir} -lccs
+LDFLAGS += -L${openaislibdir} -lconfdb
 
 
 ${TARGET}: ${OBJS}
diff --git a/config/tools/ldap/loadldap.c b/config/tools/ldap/loadldap.c
new file mode 100644
index 0000000..b25a3d6
--- /dev/null
+++ b/config/tools/ldap/loadldap.c
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 2008 Red Hat Inc
+ *
+ * All rights reserved.
+ *
+ * Author: Christine Caulfield <ccaulfie redhat com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/un.h>
+
+#include <openais/saAis.h>
+#include <openais/service/confdb.h>
+
+confdb_callbacks_t callbacks = {
+	.confdb_change_notify_fn = NULL,
+};
+
+/* This structure maps object parent names to object classes */
+struct objectclasses
+{
+	char *name;
+	char *class;
+} objectclasses[] =
+{
+	{ "cluster", "rhcsCluster" },
+	{ "cman", "rhcsCman" },
+	{ "totem", "rhcsTotem" },
+	{ "clusternode", "rhcsNode" },
+	{ "device", "rhcsFenceagent" },
+	{ "fencedevice", "rhcsFencedevice" },
+	{ "method", "rhcsFencemethod" },
+};
+/* TODO: Add more here as the schema gets filled in */
+
+
+static char *ldap_attr_name(char *attrname)
+{
+	static char newname[1024];
+	int i;
+
+	if (strcmp(attrname, "name") == 0)
+		return attrname;
+
+	sprintf(newname, "rhcs");
+	for (i=0; i<strlen(attrname)+1; i++) {
+		if (i == 0)
+			newname[4+i] = attrname[i] & 0x5F;
+		else
+			if (attrname[i] == '_')
+				newname[4+i] = '-';
+			else
+				newname[4+i] = attrname[i];
+	}
+	return newname;
+}
+
+
+/* Recursively dump the object tree */
+static void print_config_tree(confdb_handle_t handle, unsigned int parent_object_handle, char *dn, char *fulldn)
+{
+	unsigned int object_handle;
+	char object_name[1024];
+	int object_name_len;
+	char key_name[1024];
+	int key_name_len;
+	char key_value[1024];
+	int key_value_len;
+	char cumulative_dn[4096];
+	int res;
+	int i;
+	int keycount=0;
+
+	printf("\ndn: %s\n", fulldn);
+
+	/* Show the keys */
+	res = confdb_key_iter_start(handle, parent_object_handle);
+	if (res != SA_AIS_OK) {
+		printf( "error resetting key iterator for object %d: %d\n", parent_object_handle, res);
+		return;
+	}
+
+	while ( (res = confdb_key_iter(handle, parent_object_handle, key_name, &key_name_len,
+				       key_value, &key_value_len)) == SA_AIS_OK) {
+		key_name[key_name_len] = '\0';
+		key_value[key_value_len] = '\0';
+
+		printf("%s: %s\n", ldap_attr_name(key_name), key_value);
+		keycount++;
+	}
+	if (strncmp(fulldn, "cn=", 3) == 0) {
+		printf("cn: %s\n", dn);
+	}
+
+
+	/* Determine objectclass... */
+	if (keycount == 0) {
+		printf("objectclass: nsContainer\n");
+	}
+	else {
+		for (i = 0; i < sizeof(objectclasses)/sizeof(struct objectclasses); i++) {
+			if (strcmp(objectclasses[i].name, dn) == 0)
+				printf("objectclass: %s\n", objectclasses[i].class);
+		}
+	}
+
+	/* Show sub-objects */
+	res = confdb_object_iter_start(handle, parent_object_handle);
+	if (res != SA_AIS_OK) {
+		printf( "error resetting object iterator for object %d: %d\n", parent_object_handle, res);
+		return;
+	}
+
+	while ( (res = confdb_object_iter(handle, parent_object_handle, &object_handle, object_name, &object_name_len)) == SA_AIS_OK)	{
+		unsigned int parent;
+
+		res = confdb_object_parent_get(handle, object_handle, &parent);
+		if (res != SA_AIS_OK) {
+			printf( "error getting parent for object %d: %d\n", object_handle, res);
+			return;
+		}
+
+		object_name[object_name_len] = '\0';
+
+		/* Check for "name", and create dummy parent object */
+		res = confdb_key_get(handle, object_handle, "name", strlen("name"), key_value, &key_value_len);
+		if (res == SA_AIS_OK) {
+			sprintf(cumulative_dn, "cn=%s,%s", object_name, fulldn);
+			printf("\n");
+			printf("dn: %s\n", cumulative_dn);
+			printf("cn: %s\n", object_name);
+			printf("objectclass: %s\n", "nsContainer");
+
+			sprintf(cumulative_dn, "name=%s,cn=%s,%s", key_value, object_name, fulldn);
+		}
+		else {
+			sprintf(cumulative_dn, "cn=%s,%s", object_name, fulldn);
+		}
+
+		/* Down we go ... */
+		print_config_tree(handle, object_handle, object_name, cumulative_dn);
+	}
+}
+
+
+int main(int argc, char *argv[])
+{
+	confdb_handle_t handle;
+	int result;
+	unsigned int cluster_handle;
+	char *clusterroot = "cluster";
+	char basedn[1024];
+
+	if (argc == 1) {
+		fprintf(stderr, "usage: \n");
+		fprintf(stderr, "    %s <dn> [<objdb root>]\n", argv[0]);
+		fprintf(stderr, "\n");
+		fprintf(stderr, " eg: \n");
+		fprintf(stderr, "     %s dc=mycompany,dc=com\n", argv[0]);
+		fprintf(stderr, "     %s dc=mycompany,dc=com rhcluster\n", argv[0]);
+		fprintf(stderr, "\n");
+		fprintf(stderr, "objdb root defaults to 'cn=cluster'\n");
+		fprintf(stderr, "\n");
+		return 0;
+	}
+
+	if (argc > 2) {
+		clusterroot = argv[2];
+	}
+
+	result = confdb_initialize (&handle, &callbacks);
+	if (result != SA_AIS_OK) {
+		printf ("Could not initialize Cluster Configuration Database API instance error %d\n", result);
+		exit (1);
+	}
+
+	/* Find the starting object ... this should be a param */
+
+	result = confdb_object_find_start(handle, OBJECT_PARENT_HANDLE);
+	if (result != SA_AIS_OK) {
+		printf ("Could not start object_find %d\n", result);
+		exit (1);
+	}
+
+	result = confdb_object_find(handle, OBJECT_PARENT_HANDLE, "cluster", strlen("cluster"), &cluster_handle);
+	if (result != SA_AIS_OK) {
+		printf ("Could not object_find \"cluster\": %d\n", result);
+		exit (1);
+	}
+
+	sprintf(basedn, "cn=%s,%s", clusterroot, argv[1]);
+
+	/* Print the configuration */
+	print_config_tree(handle, cluster_handle, clusterroot, basedn);
+
+
+	result = confdb_finalize (handle);
+	return (0);
+}


hooks/post-receive
--
Cluster Project


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]