From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga luci/cluster/form-macros luci/cluster/in ...
Date: 27 Jul 2007 16:49:10 -0000 [thread overview]
Message-ID: <20070727164910.28065.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-07-27 16:43:47
Modified files:
luci/cluster : form-macros index_html validate_fence.js
luci/homebase : validate_cluster_add.js
luci/site/luci/Extensions: FenceHandler.py LuciClusterActions.py
LuciClusterInfo.py LuciDB.py
LuciZope.py PropsObject.py
RicciQueries.py StorageReport.py
cluster_adapters.py
conga_constants.py
ricci/common : XML.cpp
ricci/test_suite/cluster: generate_xvm_key.xml
Log message:
Fixes from the RHEL5 branch
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.204&r2=1.205
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&r1=1.36&r2=1.37
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add.js.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.20&r2=1.21
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/StorageReport.py.diff?cvsroot=cluster&r1=1.24&r2=1.25
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.262&r2=1.263
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&r1=1.41&r2=1.42
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/XML.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/generate_xvm_key.xml.diff?cvsroot=cluster&r1=1.1&r2=1.2
--- conga/luci/cluster/index_html 2007/07/12 02:42:42 1.36
+++ conga/luci/cluster/index_html 2007/07/27 16:43:47 1.37
@@ -44,7 +44,7 @@
<tal:block tal:condition="firsttime">
<tal:block tal:define="global busywaiting python:True" />
<meta http-equiv="refresh"
- tal:attributes="content isBusy/refreshurl | python:'3%surl=/luci/cluster' % chr(0x3b)" />
+ tal:attributes="content isBusy/refreshurl | python:'5%surl=/luci/cluster' % chr(0x3b)" />
</tal:block>
<tal:block tal:define="global busy isBusy/busy | nothing" />
@@ -52,7 +52,7 @@
<tal:block tal:condition="busy">
<tal:block tal:define="global busywaiting python:True" />
<meta http-equiv="refresh"
- tal:attributes="content isBusy/refreshurl | python:'3%surl=/luci/cluster' % chr(0x3b)" />
+ tal:attributes="content isBusy/refreshurl | python:'5%surl=/luci/cluster' % chr(0x3b)" />
</tal:block>
</tal:block>
</metal:headslot>
--- conga/luci/cluster/validate_fence.js 2007/07/23 18:53:08 1.10
+++ conga/luci/cluster/validate_fence.js 2007/07/27 16:43:47 1.11
@@ -51,12 +51,22 @@
}
function validate_field_passwd(form, form_elem) {
+ var errors = [];
if (form_elem.disabled) {
clr_form_err(form_elem);
return (null);
}
- var errors = validate_field_str(form, form_elem);
+ if (!form_elem || !form_elem.value) {
+ if (!form_elem) {
+ errors.push('No value was given for this field.');
+ } else {
+ set_form_err(form_elem);
+ errors.push(form_elem.name + ' values must not be empty.');
+ }
+ return (errors);
+ }
+
if (errors && errors.length > 0 && form.passwd_script && !str_is_blank(form.passwd_script.value))
{
clr_form_err(form_elem);
--- conga/luci/homebase/validate_cluster_add.js 2007/07/11 22:47:07 1.10
+++ conga/luci/homebase/validate_cluster_add.js 2007/07/27 16:43:47 1.11
@@ -43,9 +43,13 @@
if (!view_certs || !view_certs.checked) {
var confirm_str = '';
if (form.addnode) {
- confirm_str = 'Add ' + (added_storage.length > 1 ? 'these nodes' : 'this node') + ' to the \"' + clustername + '\" cluster?';
+ confirm_str = 'Add ' + (added_storage.length > 1 ? 'these nodes' : 'this node') + ' to the \"' + clustername + '\" cluster?\nEach node added will be rebooted during this process.';
} else {
- confirm_str = 'Add the cluster \"' + clustername + '\" to the Luci management interface?';
+ if (form.cluster_create) {
+ confirm_str = 'All nodes added to this cluster will be rebooted as part of this process.\n\nCreate cluster \"' + clustername + '\"?';
+ } else {
+ confirm_str = 'Add the cluster \"' + clustername + '\" to the Luci management interface?';
+ }
}
if (confirm(confirm_str)) {
--- conga/luci/site/luci/Extensions/FenceHandler.py 2007/07/12 15:44:43 1.20
+++ conga/luci/site/luci/Extensions/FenceHandler.py 2007/07/27 16:43:47 1.21
@@ -772,7 +772,12 @@
try:
pwd = form['passwd'].strip()
if not pwd:
- raise Exception, 'blank'
+ if form['passwd']:
+ # allow passwords consisting of nothing but whitespace
+ fencedev.addAttribute('passwd', form['passwd'])
+ else:
+ raise Exception, 'blank'
+
fencedev.addAttribute('passwd', pwd)
has_passwd = True
except Exception, e:
@@ -1152,6 +1157,11 @@
fenceinst = Device()
fenceinst.addAttribute('name', parent_name)
+ if form.has_key('option'):
+ option = form['option'].strip()
+ if option:
+ fenceinst.addAttribute('option', option)
+
try:
ret = FI_VALIDATE[fence_agent](form, fenceinst)
if len(ret) > 0:
--- conga/luci/site/luci/Extensions/LuciClusterActions.py 2007/06/25 16:11:30 1.3
+++ conga/luci/site/luci/Extensions/LuciClusterActions.py 2007/07/27 16:43:47 1.4
@@ -245,7 +245,11 @@
return None
return True
-def NodeLeaveCluster(self, rc, clustername, nodename_resolved):
+def NodeLeaveCluster( self,
+ rc,
+ clustername,
+ nodename_resolved,
+ stop_cluster=False):
reported_cluname = None
try:
cluster_info = rc.cluster_info()
@@ -266,7 +270,7 @@
% nodename_resolved)
return None
- batch_number, result = rq.nodeLeaveCluster(rc)
+ batch_number, result = rq.nodeLeaveCluster(rc, cluster_shutdown=stop_cluster)
if batch_number is None or result is None:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('NLC2: %s: batch_number or result is None' \
@@ -367,7 +371,7 @@
# First, delete cluster.conf from node to be deleted.
# next, have node leave cluster.
- batch_number, result = rq.nodeLeaveCluster(rc, purge=False)
+ batch_number, result = rq.nodeLeaveCluster(rc, purge=True)
if batch_number is None or result is None:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('ND5: batch_number and/or result is None')
@@ -505,7 +509,8 @@
luci_log.debug_verbose('CStop1: [1] nodeDelete failed')
errors += 1
else:
- ret = NodeLeaveCluster(self, rc, clustername, nodename_resolved)
+ ret = NodeLeaveCluster(self, rc, clustername,
+ nodename_resolved, stop_cluster=True)
if ret is None:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('CStop2: [0] nodeLeave %s' \
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py 2007/07/12 22:35:40 1.7
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py 2007/07/27 16:43:47 1.8
@@ -817,22 +817,19 @@
found = False
for item in status:
if (item['type'] == 'node') and (item['name'] == nodename):
+ if item['online'] == 'false':
+ nodestate = NODE_UNKNOWN
+ elif item['clustered'] == 'true':
+ nodestate = NODE_ACTIVE
+ else:
+ nodestate = NODE_INACTIVE
found = True
break
if found is False:
- item = {}
if LUCI_DEBUG_MODE is True:
- luci_log.debug_verbose('getNodeInfo1: Unable to resolve node name in cluster status')
- return item
-
- # Now determine state of node...
- if item['online'] == 'false':
+ luci_log.debug_verbose('getNodeInfo1: Unable to find node "%s" in cluster status' % nodename)
nodestate = NODE_UNKNOWN
- elif item['clustered'] == 'true':
- nodestate = NODE_ACTIVE
- else:
- nodestate = NODE_INACTIVE
infohash['nodestate'] = nodestate
infohash['nodename'] = nodename
@@ -899,12 +896,10 @@
infohash['fdoms'] = fdom_dict_list
- # return infohash
infohash['d_states'] = None
-
nodename_resolved = resolve_nodename(self, clustername, nodename)
+
if nodestate == NODE_ACTIVE or nodestate == NODE_INACTIVE:
- # call service module on node and find out which daemons are running
try:
rc = RicciCommunicator(nodename_resolved)
if not rc:
@@ -916,6 +911,7 @@
% (nodename_resolved, str(e)))
if rc is not None:
+ # call service module on node and find out which daemons are running
dlist = list()
dlist.append('ccsd')
if not gulm_cluster:
--- conga/luci/site/luci/Extensions/LuciDB.py 2007/07/12 22:35:40 1.5
+++ conga/luci/site/luci/Extensions/LuciDB.py 2007/07/27 16:43:47 1.6
@@ -825,6 +825,7 @@
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('GRA8: cluster name is none for %s' \
% ricci_hostname)
+ raise Exception, '%s not in a cluster' % ricci_hostname
cur_alias = str(clu_info[1]).strip().lower()
if not cur_alias:
@@ -931,7 +932,7 @@
luci_log.debug_verbose('GCF0: cluster %s [%s] folder missing: %r %s -- returning empty map' % (cluname, path, e, str(e)))
return None
-def getClusterStatusDB(self, clustername, errmsg=None):
+def getClusterStatusDB(self, clustername):
results = list()
vals = {}
@@ -942,8 +943,6 @@
vals['quorate'] = '[unknown]'
vals['votes'] = '[unknown]'
vals['minQuorum'] = '[unknown]'
- if errmsg:
- vals['errmsg'] = errmsg
results.append(vals)
nodelist = getClusterDBNodes(self, clustername)
--- conga/luci/site/luci/Extensions/LuciZope.py 2007/06/25 16:03:38 1.2
+++ conga/luci/site/luci/Extensions/LuciZope.py 2007/07/27 16:43:47 1.3
@@ -128,11 +128,11 @@
ret = {}
for i in varlist:
pval = None
- if req.has_key(i):
+ if req and req.has_key(i):
pval = req[i].strip()
if not pval:
pval = None
- if pval is None:
+ if req and pval is None:
if req.form and req.form.has_key(i):
pval = req.form[i].strip()
if not pval:
--- conga/luci/site/luci/Extensions/PropsObject.py 2007/07/12 22:35:40 1.6
+++ conga/luci/site/luci/Extensions/PropsObject.py 2007/07/27 16:43:47 1.7
@@ -7,6 +7,7 @@
from Variable import parse_variable
from ricci_defines import PROPS_TAG
+import xml
import xml.dom
class PropsObject:
@@ -26,7 +27,7 @@
return self.__vars
def export_xml(self, doc, parent_node):
- props = doc.createElement(PROPS_TAG)
+ props = doc.createElement(str(PROPS_TAG))
parent_node.appendChild(props)
for var in self.__vars:
props.appendChild(self.__vars[var].export_xml(doc))
@@ -36,7 +37,7 @@
props = None
for node in parent_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
- if node.nodeName == PROPS_TAG:
+ if node.nodeName == str(PROPS_TAG):
props = node
if props is None:
return self
@@ -47,3 +48,4 @@
except:
continue
return self
+
--- conga/luci/site/luci/Extensions/RicciQueries.py 2007/07/12 22:35:40 1.4
+++ conga/luci/site/luci/Extensions/RicciQueries.py 2007/07/27 16:43:47 1.5
@@ -701,17 +701,19 @@
try:
ret = rc.process_batch(batch)
+ if not ret:
+ raise Exception, 'no XML response'
except Exception, e:
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('GCC1: process_batch error for %s: %r %s' \
% (system_info, e, str(e)))
return None
- if not ret:
- return None
-
var_nodes = ret.getElementsByTagName('var')
for i in var_nodes:
if i.getAttribute('name') == 'cluster.conf':
return i.childNodes[0]
+
+ if LUCI_DEBUG_MODE is True:
+ luci_log.debug_verbose('GCC2: no conf node found')
return None
--- conga/luci/site/luci/Extensions/StorageReport.py 2007/06/25 16:03:38 1.24
+++ conga/luci/site/luci/Extensions/StorageReport.py 2007/07/27 16:43:47 1.25
@@ -2000,7 +2000,7 @@
'id' : '%s_origin' % bd['path'],
'type' : 'snapshot-origin'})
for snap in bd['snapshots']:
- high_list[d['id']].append('%s_snapshot', snap['path'])
+ high_list[d['id']].append('%s_snapshot' % snap['path'])
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2007/07/23 18:53:08 1.262
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2007/07/27 16:43:47 1.263
@@ -1749,7 +1749,7 @@
ret = propagateClusterConfAsync(self, model, None, FENCEDEV_NODE_CONFIG,
'Updating fence configuration for node "%s"' % fvar['nodename'])
- if ret[1] is not True:
+ if ret[0] is not True:
return ret
request.RESPONSE.redirect('%s?pagetype=%s&clustername=%s&nodename=%s&busyfirst=true' % (baseurl, NODE, clustername, nodename))
@@ -2123,10 +2123,18 @@
% (baseurl, SERVICES, clustername))
def process_cluster_conf_editor(self, req):
- clustername = req['clustername']
+ if req.has_key('clustername'):
+ clustername = req['clustername'].strip() or None
+ else:
+ clustername = None
+
+ if clustername is None:
+ return { 'msg': 'No cluster name was given', 'cluster_conf': '' }
+
msg_list = list(('\n'))
- cc = ''
- if 'new_cluster_conf' in req:
+
+ cc = None
+ if req.has_key('new_cluster_conf'):
cc = req['new_cluster_conf']
msg_list.append('Checking if valid XML - ')
cc_xml = None
@@ -2147,12 +2155,10 @@
msg_list.append('Fix the error and try again:\n')
else:
msg_list.append('PASSED\n')
-
- msg_list.append('Incrementing the cluster version number - ')
model.setModified(True)
msg_list.append('DONE\n')
-
msg_list.append('Propagating the new cluster.conf')
+
rc = getRicciAgent(self, clustername)
if not rc:
if LUCI_DEBUG_MODE is True:
--- conga/luci/site/luci/Extensions/conga_constants.py 2007/06/25 16:11:30 1.41
+++ conga/luci/site/luci/Extensions/conga_constants.py 2007/07/27 16:43:47 1.42
@@ -134,7 +134,7 @@
'A problem occurred when starting this node: %s'
]
-REDIRECT_SEC = 3
+REDIRECT_SEC = 5
# cluster/node create error status messages
PRE_INSTALL = 'The install state is not yet complete.'
--- conga/ricci/common/XML.cpp 2007/06/25 16:03:42 1.9
+++ conga/ricci/common/XML.cpp 2007/07/27 16:43:47 1.10
@@ -119,15 +119,15 @@
xml += " " + name + "=\"" + value + "\"";
}
if (children().empty())
- xml += "/>";
+ xml += "/>\n";
else {
- xml += ">";
+ xml += ">\n";
for (list<XMLObject>::const_iterator iter = children().begin();
iter != children().end();
iter++) {
- iter->generate_xml(xml, indent);
+ iter->generate_xml(xml, indent + "\t");
}
- xml += indent + "</" + _tag + ">";
+ xml += indent + "</" + _tag + ">\n";
}
}
--- conga/ricci/test_suite/cluster/generate_xvm_key.xml 2007/07/23 18:47:51 1.1
+++ conga/ricci/test_suite/cluster/generate_xvm_key.xml 2007/07/27 16:43:47 1.2
@@ -4,7 +4,9 @@
<module name="cluster">
<request sequence="1254" API_version="1.0">
-<function_call name="generate_xvm_key" />
+<function_call name="generate_xvm_key">
+ <var mutable="false" name="size" type="int" value="4096" />
+</function_call>
</request>
</module>
next reply other threads:[~2007-07-27 16:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-27 16:49 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-06-25 16:11 [Cluster-devel] conga luci/cluster/form-macros luci/cluster/in rmccabe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070727164910.28065.qmail@sourceware.org \
--to=rmccabe@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).