[Cluster-devel] conga/luci/site/luci/Extensions cluster_adapte ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Fri Oct 13 22:56:29 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-10-13 22:56:28
Modified files:
luci/site/luci/Extensions: cluster_adapters.py
Log message:
detect changes in cluster membership and deal with them accordingly, part 1
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.109&r2=1.110
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2006/10/13 21:25:14 1.109
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2006/10/13 22:56:28 1.110
@@ -2926,12 +2926,9 @@
def resolveClusterChanges(self, clusterName, modelb):
try:
- mb_nodes = dict.fromkeys(modelb.getNodes())
+ mb_nodes = modelb.getNodes()
if not mb_nodes or not len(mb_nodes):
raise
- mb_map = {}
- for i in iter(mb_nodes):
- mb_map[i] = i
except:
return 'Unable to find cluster nodes for ' + clusterName
@@ -2943,16 +2940,48 @@
return 'Unable to find an entry for ' + clusterName + ' in the Luci database.'
try:
- db_nodes = cluster_node.objectItems('Folder')
+ db_nodes = map(lambda x: x[0], cluster_node.objectItems('Folder'))
if not db_nodes or not len(db_nodes):
raise
- db_map = {}
- for i in iter(db_nodes):
- db_map[i[0]] = i[0]
except:
# Should we just create them all? Can this even happen?
return 'Unable to find database entries for any nodes in ' + clusterName
+ same_host = lambda x, y: x == y or x[:len(y) + 1] == y + '.' or y[:len(x) + 1] == x + '.'
+
+ # this is a really great algorithm.
+ missing_list = list()
+ new_list = list()
+ for i in mb_nodes:
+ for j in db_nodes:
+ f = 0
+ if same_host(i, j):
+ f = 1
+ break
+ if not f:
+ new_list.append(i)
+
+ for i in db_nodes:
+ for j in mb_nodes:
+ f = 0
+ if same_host(i, j):
+ f = 1
+ break
+ if not f:
+ missing_list.append(i)
+
+ messages = list()
+ for i in missing_list:
+ cluster_node.delObjects([i])
+ messages.append('Node \"' + i + '\" is no longer in a member of cluster \"' + clusterName + '.\". It has been deleted from the management interface for this cluster.')
+
+ for i in new_list:
+ cluster_node.manage_addFolder(i, '__luci__:csystem:' + clusterName)
+ cluster_node.manage_addProperty('exceptions', 'auth', 'string')
+ messages.append('A new node, \"' + i + ',\" is now a member of cluster \"' + clusterName + '.\". It has added to the management interface for this cluster, but you must authenticate to it in order for it to be fully functional.')
+
+ return messages
+
def addResource(self, request, ragent):
if not request.form:
return (False, {'errors': ['No form was submitted.']})
More information about the Cluster-devel
mailing list