[Cluster-devel] conga/luci homebase/form-macros homebase/valid ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Mon Oct 16 20:46:47 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2006-10-16 20:46:46
Modified files:
luci/homebase : form-macros validate_sys_remove.js
luci/site/luci/Extensions: conga_constants.py
homebase_adapters.py
Log message:
add a reauth form at the top of the manage systems page
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.43&r2=1.44
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_remove.js.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&r1=1.18&r2=1.19
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.33&r2=1.34
--- conga/luci/homebase/form-macros 2006/10/16 15:35:27 1.43
+++ conga/luci/homebase/form-macros 2006/10/16 20:46:46 1.44
@@ -1,7 +1,7 @@
<html>
<tal:comment tal:replace="nothing">
- $Id: form-macros,v 1.43 2006/10/16 15:35:27 rmccabe Exp $
+ $Id: form-macros,v 1.44 2006/10/16 20:46:46 rmccabe Exp $
</tal:comment>
<head>
@@ -298,19 +298,91 @@
global num_systems python:-1"
/>
+ <h2 class="homebase">Manage Systems and Clusters</h2>
+
+ <h3>Authenticate to Storage or Cluster Systems</h3>
+
+ <form name="authform" method="post" action="">
+ <input type="hidden" name="pagetype" value="8" />
+ <table id="systemsTable" class="systemsTable" border="0" cellspacing="0">
+ <thead class="systemsTable">
+ <tr class="systemsTable">
+ <th class="systemsTable">System Hostname</th>
+ <th class="systemsTable">Root Password</th>
+ </tr>
+ </thead>
+
+ <tfoot class="systemsTable">
+ <tr class="systemsTable"><td colspan="2" class="systemsTable">
+ <div id="allSameDiv" class="invisible">
+ <input type="checkbox" class="allSameCheckBox" name="allSameCheckBox" id="allSameCheckBox" onClick="allPasswdsSame(this.form);"/><span>Check if storage system passwords are identical.</span>
+ </div>
+ </td></tr>
+
+ <tr class="systemsTable"><td class="systemsTable" colspan="2">
+ <div class="systemsTableEnd">
+ <input type="button" value="Add another entry" onClick="addSystem(this.form);" />
+ </div>
+ </td></tr>
+ </tfoot>
+
+ <tbody class="systemsTable">
+ <tr class="systemsTable">
+ <td class="systemsTable">
+ <input class="hbInputSys" type="text"
+ id="__SYSTEM0:Addr" name="__SYSTEM0:Addr" />
+ </td>
+ <td class="systemsTable">
+ <input type="password" autocomplete="off"
+ id="__SYSTEM0:Passwd" name="__SYSTEM0:Passwd"
+ class="hbInputPass"
+ onChange="pwd0Change(this.form);" />
+ </td>
+ </tr>
+
+ <tal:block tal:define="global numsys python: 0" />
+
+ <tal:block tal:repeat="s python:systems[2]">
+ <tal:block tal:define="global numsys python: numsys + 1" />
+ <tr class="systemsTable">
+ <td class="systemsTable">
+ <input class="hbInputSys" type="text"
+ tal:attributes="
+ id python: '__SYSTEM' + str(numsys) + ':Addr';
+ name python: '__SYSTEM' + str(numsys) + ':Addr'" />
+ </td>
+
+ <td class="systemsTable">
+ <input type="password" autocomplete="off"
+ onChange="pwd0Change(this.form);"
+ class="hbInputPass"
+ tal:attributes="
+ id python: '__SYSTEM' + str(numsys) + ':Password';
+ name python: '__SYSTEM' + str(numsys) + ':Password'" />
+ </td>
+ </tr>
+ </tal:block>
+ </tbody>
+ </table>
+
+ <input type="hidden" name="numStorage" value="1" />
+
+ <div class="hbSubmit" id="hbSubmit">
+ <input type="button" name="Submit" value="Submit"
+ onClick="validateAuth(this.form)" />
+ </div>
+ </form>
+
<form name="adminform" method="post" action=""
tal:condition="python:(systems[0] and len(systems[0]) > 0) or (systems[1] and len(systems[1]) > 0)">
<span tal:omit-tag="" tal:define="global blankForm python:0" />
- <h2 class="homebase" tal:condition="python:systems">
- Manage Systems and Clusters
- </h2>
<input type="hidden" name="pagetype"
tal:attributes="value request/form/pagetype | request/pagetype | nothing" />
- Check storage systems and clusters to remove from the Luci management interface.
+ <h3>Check storage systems and clusters to remove from the Luci management interface.</h3>
<h3 class="homebase" tal:condition="python: systems[0] and len(systems[0]) > 0">
Clusters
--- conga/luci/homebase/validate_sys_remove.js 2006/06/30 18:06:10 1.1
+++ conga/luci/homebase/validate_sys_remove.js 2006/10/16 20:46:46 1.2
@@ -43,3 +43,24 @@
form.submit();
return (0);
}
+
+function validateAuth(form) {
+ var errors = new Array();
+
+ if (!form)
+ return (-1);
+
+ var added_storage = validate_systems(form, errors);
+
+ if (error_dialog(errors))
+ return (-1);
+
+ if (!added_storage || added_storage.length < 1)
+ errors.push('You have not specified any hosts.');
+
+ if (error_dialog(errors))
+ return (-1);
+
+ form.submit();
+ return (0);
+}
--- conga/luci/site/luci/Extensions/conga_constants.py 2006/10/16 19:17:13 1.18
+++ conga/luci/site/luci/Extensions/conga_constants.py 2006/10/16 20:46:46 1.19
@@ -98,13 +98,14 @@
# Homebase-specific constants
-HOMEBASE_ADD_USER="1"
-HOMEBASE_ADD_SYSTEM="2"
-HOMEBASE_PERMS="3"
-HOMEBASE_DEL_USER="4"
-HOMEBASE_DEL_SYSTEM="5"
-HOMEBASE_ADD_CLUSTER="6"
-HOMEBASE_ADD_CLUSTER_INITIAL="7"
+HOMEBASE_ADD_USER = "1"
+HOMEBASE_ADD_SYSTEM = "2"
+HOMEBASE_PERMS = "3"
+HOMEBASE_DEL_USER = "4"
+HOMEBASE_DEL_SYSTEM = "5"
+HOMEBASE_ADD_CLUSTER = "6"
+HOMEBASE_ADD_CLUSTER_INITIAL = "7"
+HOMEBASE_AUTH = "8"
# Cluster node exception attribute flags
CLUSTER_NODE_NEED_AUTH = 0x01
--- conga/luci/site/luci/Extensions/homebase_adapters.py 2006/10/16 15:18:32 1.33
+++ conga/luci/site/luci/Extensions/homebase_adapters.py 2006/10/16 20:46:46 1.34
@@ -569,6 +569,61 @@
return (returnCode, {'errors': errors, 'messages': messages, 'params': {'user': userId }})
+def validateAuthenticate(self, request):
+ errors = list()
+ messages = list()
+
+ try:
+ numStorage = int(request.form['numStorage'])
+ except:
+ return (False, {'errors': [ 'Unknown number of nodes entered']})
+
+ i = 0
+ while i < numStorage:
+ sysData = request.form['__SYSTEM' + str(i)]
+ if not sysData or len(sysData) < 2 or not sysData[0] or not sysData[1]:
+ i += 1
+ continue
+
+ host = str(sysData[0])
+ passwd = str(sysData[1])
+
+ try:
+ rc = RicciCommunicator(sysData[0])
+ except:
+ errors.append('Unable to contact the ricci agent for ' + host)
+ i += 1
+ continue
+
+ if rc.authed():
+ messages.append(host + ' is already authenticated.')
+ else:
+ try:
+ rc.auth(passwd)
+ except:
+ errors.append('Error authenticating to the ricci agent on ' + host)
+ i += 1
+ continue
+
+ if not rc.authed():
+ errors.append('Error authenticating to the ricci agent on ' + host)
+ else:
+ messages.append(host + ' was successfully authenticated.')
+
+ if rc.authed():
+ try:
+ delNodeFlag(self, getStorageNode(self, host), CLUSTER_NODE_NEED_AUTH)
+ except:
+ pass
+
+ try:
+ delNodeFlag(self, getClusterNode(self, host, rc.cluster_info()[0]), CLUSTER_NODE_NEED_AUTH)
+ except:
+ pass
+ i += 1
+
+ return (len(errors) > 0, {'errors': errors, 'messages': messages })
+
formValidators = [
validateAddUser,
validateAddSystem,
@@ -576,7 +631,8 @@
validateDelUser,
validateDelSystem,
validateAddCluster,
- validateAddClusterInitial
+ validateAddClusterInitial,
+ validateAuthenticate
]
def userAuthenticated(self):
@@ -1265,19 +1321,28 @@
def getSystems(self):
storage = getStorage(self)
clusters = getClusters(self)
- storageList = None
- ret = [{}, None]
- zeroindex = lambda i: i[0]
+ storageList = list()
+ ret = [{}, [], {}]
- if storage and len(storage) > 0:
- storageList = map(zeroindex, storage)
+ need_auth_hash = {}
+ for i in storage:
+ storageList.append(i[0])
+ if testNodeFlag(i[1], CLUSTER_NODE_NEED_AUTH) != False:
+ need_auth_hash[i[0]] = i[1]
+ chash = {}
for i in clusters:
- cSystems = map(zeroindex, getClusterSystems(self, i[0]))
- ret[0][i[0]] = cSystems
-
- if storageList:
- ret[1] = storageList
+ csystems = getClusterSystems(self, i[0])
+ cslist = list()
+ for c in csystems:
+ if testNodeFlag(c[1], CLUSTER_NODE_NEED_AUTH) != False:
+ need_auth_hash[c[0]] = c[1]
+ cslist.append(c[0])
+ chash[i[0]] = cslist
+
+ ret[0] = chash
+ ret[1] = storageList
+ ret[2] = need_auth_hash
return ret
def getClusterNode(self, nodename, clustername):
@@ -1294,6 +1359,14 @@
except:
return None
+def testNodeFlag(node, flag_mask):
+ try:
+ flags = node.getProperty('flags')
+ return flags & flag_mask != 0
+ except:
+ pass
+ return False
+
def setNodeFlag(self, node, flag_mask):
try:
flags = node.getProperty('flags')
More information about the Cluster-devel
mailing list