You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2013/04/11 21:03:08 UTC
svn commit: r1467053 - /qpid/trunk/qpid/tools/src/py/qpid-ha
Author: aconway
Date: Thu Apr 11 19:03:07 2013
New Revision: 1467053
URL: http://svn.apache.org/r1467053
Log:
QPID-4738: Add "qpid-ha status --all" option.
Show status of all cluster members.
Modified:
qpid/trunk/qpid/tools/src/py/qpid-ha
Modified: qpid/trunk/qpid/tools/src/py/qpid-ha
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/py/qpid-ha?rev=1467053&r1=1467052&r2=1467053&view=diff
==============================================================================
--- qpid/trunk/qpid/tools/src/py/qpid-ha (original)
+++ qpid/trunk/qpid/tools/src/py/qpid-ha Thu Apr 11 19:03:07 2013
@@ -19,7 +19,7 @@
# under the License.
#
-import optparse, sys, time, os
+import optparse, sys, time, os, re
from qpid.messaging import Connection
from qpid.messaging import Message as QpidMessage
from qpidtoollibs.broker import BrokerAgent
@@ -38,6 +38,9 @@ class ExitStatus(Exception):
class Command:
commands = {}
+ def add(self, optname, metavar, type, help):
+ self.op.add_option(optname, metavar=metavar, type=type, help=help, action="store")
+
def __init__(self, name, help, arg_names=[]):
Command.commands[name] = self
self.name = name
@@ -50,11 +53,7 @@ class Command:
self.op.add_option("--ssl-key", action="store", type="string", metavar="<key>", help="Client SSL private key (PEM Format)")
self.op.add_option("-b", "--broker", action="store", type="string", default="localhost:5672", metavar="<address>", help="Address of qpidd broker with syntax: [username/password@] hostname | ip-address [:<port>]")
- def execute(self, args):
- opts, args = self.op.parse_args(args)
- if len(args) != len(self.arg_names)+1:
- self.op.print_help()
- raise Exception("Wrong number of arguments")
+ def connect(self, opts):
conn_options = {}
if opts.sasl_mechanism:
conn_options['sasl_mechanisms'] = opts.sasl_mechanism
@@ -65,10 +64,17 @@ class Command:
self.op.error("missing '--ssl-certificate' (required by '--ssl-key')")
conn_options['ssl_keyfile'] = opts.ssl_key
conn_options['client_properties'] = {'qpid.ha-admin' : 1}
-
connection = Connection.establish(opts.broker, **conn_options)
qmf_broker = BrokerAgent(connection)
ha_broker = qmf_broker.getHaBroker()
+ return (connection, qmf_broker, ha_broker)
+
+ def execute(self, args):
+ opts, args = self.op.parse_args(args)
+ if len(args) != len(self.arg_names)+1:
+ self.op.print_help()
+ raise Exception("Wrong number of arguments")
+ connection, qmf_broker, ha_broker = self.connect(opts)
if not ha_broker: raise Exception("HA module is not loaded on broker at %s" % opts.broker)
try: self.do_execute(qmf_broker, ha_broker, opts, args)
finally: connection.close()
@@ -92,11 +98,24 @@ class StatusCmd(Command):
self.op.add_option(
"--is-primary", action="store_true", default=False,
help="Don't print status. Return 0 if the broker is primary, 1 otherwise")
+ self.op.add_option(
+ "--all", action="store_true", default=False,
+ help="Print status for all brokers in the cluster.")
def do_execute(self, qmf_broker, ha_broker, opts, args):
if opts.is_primary:
if not ha_broker.status in ["active", "recovering"]: raise ExitStatus(1)
if opts.expect:
if opts.expect != ha_broker.status: raise ExitStatus(1)
+ if opts.all:
+ opts.all=False
+ brokers = re.sub(r'(^amqp:)|(tcp:)', "", ha_broker.brokersUrl).split(",")
+ for b in brokers:
+ opts.broker = b
+ try:
+ connection, qmf_broker, ha_broker = self.connect(opts)
+ print b, ha_broker.status
+ except Exception,e:
+ print b, e
else:
print ha_broker.status
@@ -112,11 +131,9 @@ ReplicateCmd()
class SetCmd(Command):
def __init__(self):
Command.__init__(self, "set", "Set HA configuration settings")
- def add(optname, metavar, type, help):
- self.op.add_option(optname, metavar=metavar, type=type, help=help, action="store")
- add("--brokers-url", "<url>", "string", "URL with address of each broker in the cluster. Used by brokers to connect to each other.")
- add("--public-url", "<url>", "string", "URL advertised to clients to connect to the cluster. May be a list or a VIP.")
- add("--backups", "<n>", "int", "Expect <n> backups to be running"),
+ self.add("--brokers-url", "<url>", "string", "URL with address of each broker in the cluster. Used by brokers to connect to each other.")
+ self.add("--public-url", "<url>", "string", "URL advertised to clients to connect to the cluster. May be a list or a VIP.")
+ self.add("--backups", "<n>", "int", "Expect <n> backups to be running"),
def do_execute(self, qmf_broker, ha_broker, opts, args):
if (opts.brokers_url): qmf_broker._method("setBrokersUrl", {"url":opts.brokers_url}, HA_BROKER)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org