From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga ./conga.spec.in.in luci/cluster/form-mac ...
Date: 27 Aug 2007 18:38:03 -0000 [thread overview]
Message-ID: <20070827183803.25967.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe at sourceware.org 2007-08-27 18:38:00
Modified files:
. : conga.spec.in.in
luci/cluster : form-macros validate_config_multicast.js
luci/site/luci/Extensions: LuciClusterInfo.py
cluster_adapters.py
luci/site/luci/Extensions/ClusterModel: ModelBuilder.py
luci/site/luci/var: Data.fs
Log message:
- Fix 253994: Cannot specify multicast address for a cluster
- Update the luci Zope DB
- Update the changelog
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.58&r2=1.45.2.59
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.30&r2=1.90.2.31
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.38&r2=1.120.2.39
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.4&r2=1.1.4.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.24&r2=1.15.2.25
--- conga/conga.spec.in.in 2007/08/23 04:57:49 1.45.2.58
+++ conga/conga.spec.in.in 2007/08/27 18:36:43 1.45.2.59
@@ -311,9 +311,11 @@
### changelog ###
%changelog
* Wed Aug 22 2007 Ryan McCabe <rmccabe@redhat.com> 0.10.0-6
-- Fixed bz253783 (ricci is vulnerable to a connect DoS attack)
+- Fixed bz253783
- Fixed bz253914 (conga doesn't allow you to reuse nfs export and nfs client resources)
-- Resolves: bz253783, bz253914
+- Fixed bz254038 (Impossible to set many valid quorum disk configurations via conga)
+- Fixed bz253994 (Cannot specify multicast address for a cluster)
+- Resolves: bz253783, bz253914, bz254038, bz253994
* Mon Aug 20 2007 Ryan McCabe <rmccabe@redhat.com> 0.10.0-5
- Fixed bz249291 (delete node task fails to do all items listed in the help document)
--- conga/luci/cluster/form-macros 2007/08/09 20:26:11 1.90.2.30
+++ conga/luci/cluster/form-macros 2007/08/27 18:36:45 1.90.2.31
@@ -1082,7 +1082,7 @@
<tr class="systemsTable">
<td class="systemsTable">
<input type="radio" name="mcast" value="False"
- onClick="disable_mcast('mcast_address');"
+ onClick="disable_mcast('mcast_address', 'mcast_interface');"
tal:attributes="checked python: clusterinfo['is_mcast'] != 'True'"
/>
<tal:block tal:condition="python:os_version == 'rhel4'">
@@ -1097,7 +1097,7 @@
<tr class="systemsTable">
<td class="systemsTable">
<input type="radio" name="mcast" value="True"
- onClick="enable_mcast('mcast_address');"
+ onClick="enable_mcast('mcast_address', 'mcast_interface');"
tal:attributes="checked python: clusterinfo['is_mcast'] == 'True'"
/>
@@ -1115,11 +1115,23 @@
Multicast address
</td>
<td class="systemsTable">
- <input type="text" name="mcast_address" id="mcast_address"
+ <input type="text"
+ name="mcast_address" id="mcast_address"
tal:attributes="
- disabled python: clusterinfo['is_mcast'] != 'True' and '1' or '0';
- value python: clusterinfo['is_mcast'] == 'True' and clusterinfo['mcast_addr'] or '';"
- />
+ disabled not:clusterinfo/mcast_addr;
+ value clusterinfo/mcast_addr |nothing" />
+ </td>
+ </tr>
+ <tr class="systemsTable">
+ <td class="systemsTable">
+ Multicast network interface <span tal:condition="python:os_version != 'rhel4'">(optional)</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text"
+ name="mcast_interface" id="mcast_interface"
+ tal:attributes="
+ disabled not:clusterinfo/mcast_addr;
+ value clusterinfo/mcast_interface |nothing" />
</td>
</tr>
</tbody>
--- conga/luci/cluster/validate_config_multicast.js 2007/08/08 21:18:46 1.3.2.1
+++ conga/luci/cluster/validate_config_multicast.js 2007/08/27 18:36:45 1.3.2.2
@@ -8,22 +8,36 @@
*/
var prev_mcast_str = '';
+var prev_mcast_if = '';
-function disable_mcast(addrId) {
- addrObj = document.getElementById(addrId);
- if (!addrObj || addrObj.disabled)
- return;
- addrObj.disabled = true;
- prev_mcast_str = addrObj.value;
- addrObj.value = '';
+function disable_mcast(addrId, ifId) {
+ var addrObj = document.getElementById(addrId);
+ if (addrObj) {
+ prev_mcast_str = addrObj.value;
+ addrObj.disabled = true;
+ addrObj.value = '';
+ }
+
+ var ifObj = document.getElementById(ifId);
+ if (ifObj) {
+ prev_mcast_if = ifObj.value;
+ ifObj.disabled = true;
+ ifObj.value = '';
+ }
}
-function enable_mcast(addrId) {
- addrObj = document.getElementById(addrId);
- if (!addrObj || !addrObj.disabled)
- return;
- addrObj.disabled = false;
- addrObj.value = prev_mcast_str;
+function enable_mcast(addrId, ifId) {
+ var addrObj = document.getElementById(addrId);
+ if (addrObj) {
+ addrObj.disabled = false;
+ addrObj.value = prev_mcast_str;
+ }
+
+ var ifObj = document.getElementById(ifId);
+ if (ifObj) {
+ ifObj.disabled = false;
+ ifObj.value = prev_mcast_if;
+ }
}
function validate_form(form) {
@@ -52,6 +66,7 @@
clr_form_err(form.mcast[0]);
clr_form_err(form.mcast[1]);
clr_form_err(form.mcast_address);
+ clr_form_err(form.mcast_interface);
}
if (mcast == 1) {
@@ -66,6 +81,15 @@
}
clr_form_err(form.mcast_address);
}
+
+ if (form.cluster_version && form.cluster_version.value == 'rhel4') {
+ if (!form.mcast_interface || str_is_blank(form.mcast_interface.value)) {
+ set_form_err(form.mcast_interface);
+ errors.push('No multicast interface was given.');
+ } else {
+ clr_form_err(form.mcast_interface);
+ }
+ }
}
if (error_dialog(errors))
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py 2007/08/08 21:14:38 1.1.4.7
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py 2007/08/27 18:36:45 1.1.4.8
@@ -618,10 +618,12 @@
is_mcast = model.isMulticast()
if is_mcast:
clumap['mcast_addr'] = model.getMcastAddr()
+ clumap['mcast_interface'] = model.getMcastInterface()
clumap['is_mcast'] = 'True'
else:
+ clumap['mcast_addr'] = None
+ clumap['mcast_interface'] = None
clumap['is_mcast'] = 'False'
- clumap['mcast_addr'] = '1.2.3.4'
clumap['gulm'] = False
else:
#-------------
--- conga/luci/site/luci/Extensions/cluster_adapters.py 2007/08/23 19:09:21 1.120.2.38
+++ conga/luci/site/luci/Extensions/cluster_adapters.py 2007/08/27 18:36:45 1.120.2.39
@@ -974,6 +974,14 @@
errors.append('An invalid multicast selection was made')
return (False, {'errors': errors})
+ mcast_interface = None
+ if form.has_key('mcast_interface'):
+ mcast_interface = form['mcast_interface'].strip()
+
+ if mcast_manual is True and form.has_key('cluster_version') and form['cluster_version'].strip() == 'rhel4' and not mcast_interface:
+ errors.append('No multicast interface was specified')
+ return (False, {'errors': errors})
+
if mcast_manual is True:
import socket
try:
@@ -991,13 +999,14 @@
else:
addr_str = None
- if (addr_str is None and mcast_manual is not True) or (mcast_manual is True and addr_str == model.getMcastAddr()):
- errors.append('No multicast configuration changes were made')
- return (False, {'errors': errors})
-
try:
- model.usesMulticast = True
- model.mcast_address = addr_str
+ if not addr_str:
+ if mcast_interface:
+ errors.append('A multicast interface was specified, but no multicast address was given')
+ return (False, {'errors': errors})
+ model.del_cluster_multicast()
+ else:
+ model.set_cluster_multicast(addr_str, mcast_if=mcast_interface)
except Exception, e:
if LUCI_DEBUG_MODE is True:
luci_log.debug('Error updating mcast properties: %r %s' \
--- conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2007/07/30 05:06:47 1.1.4.4
+++ conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2007/08/27 18:36:46 1.1.4.5
@@ -121,6 +121,8 @@
self.filename = filename
self.lock_type = DLM_TYPE
self.mcast_address = mcast_addr
+ self.mcast_interface = None
+ self.mcast_ptr = None
self.cluster_ptr = None
self.GULM_ptr = None
self.CMAN_ptr = None
@@ -269,7 +271,10 @@
if self.usesMulticast is True:
mcast = Multicast()
mcast.addAttribute("addr", self.mcast_address)
+ if self.mcast_interface is not None:
+ mcast.addAttribute("interface", self.mcast_interface)
cman.addChild(mcast)
+ self.mcast_ptr = mcast
fds = FenceDevices()
obj_tree.addChild(fds)
@@ -513,8 +518,9 @@
self.clusternodes_ptr.addChild(clusternode)
if self.usesMulticast is True:
mcast = Multicast()
- mcast.addAttribute("addr", self.mcast_address)
- mcast.addAttribute("interface", "eth0") #eth0 is the default
+ mcast.addAttribute('addr', self.mcast_address)
+ if self.mcast_interface is not None:
+ mcast.addAttribute('interface', self.mcast_interface)
clusternode.addChild(mcast)
self.isModified = True
@@ -676,17 +682,23 @@
children = self.CMAN_ptr.getChildren()
for child in children:
if child.getTagName() == MCAST_STR:
+ self.mcast_ptr = child
addr = child.getAttribute("addr")
if addr is not None:
self.mcast_address = addr
- return
else: #What a mess! a multicast tag, but no addr attribute
self.mcast_address = ""
- return
+ mcastif = child.getAttribute("interface")
+ if mcastif is not None:
+ self.mcast_interface = mcastif
+ return
def getMcastAddr(self):
return self.mcast_address
+ def getMcastInterface(self):
+ return self.mcast_interface
+
def isQuorumd(self):
return self.usesQuorumd
@@ -871,6 +883,8 @@
self.usesMulticast = None
self.mcast_address = None
+ self.mcast_interface = None
+ self.mcast_ptr = None
#reset self.lock_type
self.lock_type = GULM_TYPE
@@ -914,61 +928,84 @@
#set modified
self.isModified = True
- def swap_multicast_state(self, address=None):
- if self.usesMulticast is True:
- #First, eliminate <multicast> tag
- if self.CMAN_ptr is not None:
- children = self.CMAN_ptr.getChildren()
- if len(children) > 0:
- for child in children:
- if child.getTagName() == MCAST_STR:
- self.CMAN_ptr.removeChild(child)
- break
- found_one = True
- while found_one is True:
- found_one = False
- nodes = self.clusternodes_ptr.getChildren()
- for node in nodes:
- node_children = node.getChildren()
- for node_child in node_children:
- if node_child.getTagName() == MCAST_STR:
- node.removeChild(node_child)
- found_one = True
- break
- if found_one is True:
- break
+ def set_nodes_multicast(self, mcast_addr, mcast_if=None):
+ for node in self.getNodes():
+ new_mcast_tag = True
+ mcast = None
+
+ for node_child in node.getChildren():
+ if node_child.getTagName() == MCAST_STR:
+ mcast = node_child
+ new_mcast_tag = False
+ break
- self.usesMulticast = False
- self.mcast_address = None
- self.isModified = True
+ if mcast is None:
+ mcast = Multicast()
+
+ mcast.addAttribute('addr', mcast_addr)
+ if mcast_if:
+ mcast.addAttribute('interface', mcast_if)
+ else:
+ try:
+ mcast.removeAttribute('interface')
+ except:
+ pass
+ if new_mcast_tag is True:
+ node.addChild(mcast)
+
+ def set_cluster_multicast(self, mcast_addr, mcast_if=None):
+ if not self.CMAN_ptr:
+ return False
+ if self.mcast_ptr is None:
+ mcast = Multicast()
+ self.CMAN_ptr.addChild(mcast)
+ self.mcast_ptr = mcast
else:
- if self.CMAN_ptr is not None:
- mcast = Multicast()
- mcast.addAttribute("addr", address)
- self.CMAN_ptr.addChild(mcast)
+ mcast = self.mcast_ptr
- has_one = False
- nodes = self.getNodes()
- for node in nodes:
- has_one = False
- node_children = node.getChildren()
- for node_child in node_children:
- if node_child.getTagName() == MCAST_STR:
- has_one = True
- break
- if has_one is False:
- mcast = Multicast()
- mcast.addAttribute("addr", address)
- mcast.addAttribute("interface", "eth0")
- node.addChild(mcast)
+ mcast.addAttribute('addr', mcast_addr)
+ if mcast_if is not None:
+ mcast.addAttribute('interface', mcast_if)
+ else:
+ try:
+ mcast.removeAttribute('interface')
+ except:
+ pass
+ self.mcast_address = mcast_addr
+ self.mcast_interface = mcast_if
+ self.usesMulticast = True
+ self.set_nodes_multicast(mcast_addr, mcast_if=mcast_if)
+ self.isModified = True
- self.mcast_address = address
- self.usesMulticast = True
- self.isModified = True
+ def del_nodes_multicast(self):
+ for node in self.getNodes():
+ for node_child in node.getChildren():
+ if node_child.getTagName() == MCAST_STR:
+ node.removeChild(node_child)
+ break
+
+ def del_cluster_multicast(self):
+ if self.CMAN_ptr is None:
+ return False
+ for child in self.CMAN_ptr.getChildren():
+ if child.getTagName() == MCAST_STR:
+ self.CMAN_ptr.removeChild(child)
+
+ self.mcast_ptr = None
+ self.usesMulticast = False
+ self.mcast_address = None
+ self.mcast_interface = None
+ self.del_nodes_multicast()
+ self.isModified = True
+ def swap_multicast_state(self, address=None, mcast_if=None):
+ if self.usesMulticast is True:
+ self.del_cluster_multicast()
+ else:
+ self.set_cluster_multicast(address, mcast_if)
def check_fence_daemon(self):
if self.GULM_ptr is None and self.fence_daemon_ptr is None:
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs 2007/08/23 04:57:49 1.15.2.24 and /cvs/cluster/conga/luci/site/luci/var/Data.fs 2007/08/27 18:36:46 1.15.2.25 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed
next reply other threads:[~2007-08-27 18:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-27 18:38 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2009-01-26 17:01 [Cluster-devel] conga ./conga.spec.in.in luci/cluster/form-mac rmccabe
2007-11-06 19:58 rmccabe
2007-09-21 3:24 rmccabe
2007-08-23 18:47 rmccabe
2006-12-12 13:26 kupcevic
2006-12-08 20:47 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=20070827183803.25967.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).