summaryrefslogtreecommitdiff
path: root/qpid/tools/src/py
diff options
context:
space:
mode:
authorJonathan Robie <jonathan@apache.org>2010-12-21 23:46:42 +0000
committerJonathan Robie <jonathan@apache.org>2010-12-21 23:46:42 +0000
commit4365a8b0b4a55892262896d52676794d13e2e4b3 (patch)
tree14761fe7b9f5f70bfc61358564bccc8826e14762 /qpid/tools/src/py
parent4e887a13cfba1309c0e3105b00691850558cb162 (diff)
downloadqpid-python-4365a8b0b4a55892262896d52676794d13e2e4b3.tar.gz
Allow command line utilities to require a given SASL mechanism.
Useful if the client's most secure mechanism is suspect, e.g. if Kerberos configuration problems may exist. Also useful in a variety of test scenarios. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1051700 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/tools/src/py')
-rwxr-xr-xqpid/tools/src/py/qpid-config136
-rwxr-xr-xqpid/tools/src/py/qpid-printevents7
-rwxr-xr-xqpid/tools/src/py/qpid-queue-stats10
-rwxr-xr-xqpid/tools/src/py/qpid-route12
-rwxr-xr-xqpid/tools/src/py/qpid-stat31
5 files changed, 105 insertions, 91 deletions
diff --git a/qpid/tools/src/py/qpid-config b/qpid/tools/src/py/qpid-config
index a2358a0abd..6e3bafd49d 100755
--- a/qpid/tools/src/py/qpid-config
+++ b/qpid/tools/src/py/qpid-config
@@ -46,6 +46,7 @@ class Config:
self._ive = False
self._eventGeneration = None
self._file = None
+ self._sasl_mechanism = None
config = Config()
@@ -138,26 +139,27 @@ def OptionsAndArguments(argv):
formatter=JHelpFormatter())
group1 = OptionGroup(parser, "General Options")
- group1.add_option("-t", "--timeout", action="store", type="int", default=10, metavar="SECS", help="Maximum time to wait for broker connection (in seconds)")
+ group1.add_option("-t", "--timeout", action="store", type="int", default=10, metavar="<secs>", help="Maximum time to wait for broker connection (in seconds)")
group1.add_option("-b", "--bindings", action="store_true", help="Show bindings in queue or exchange list")
- group1.add_option("-a", "--broker-addr", action="store", type="string", default="localhost:5672", metavar="ADDRESS", help="Maximum time to wait for broker connection (in seconds)")
+ group1.add_option("-a", "--broker-addr", action="store", type="string", default="localhost:5672", metavar="<address>", help="Maximum time to wait for broker connection (in seconds)")
+ group1.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="<mech>", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.")
parser.add_option_group(group1)
group2 = OptionGroup(parser, "Options for Adding Exchanges and Queues")
- group2.add_option("--alternate-exchange", action="store", type="string", metavar="NAME", help="Name of the alternate-exchange for the new queue or exchange. Exchanges route messages to the alternate exchange if they are unable to route them elsewhere. Queues route messages to the alternate exchange if they are rejected by a subscriber or orphaned by queue deletion.")
+ group2.add_option("--alternate-exchange", action="store", type="string", metavar="<aexname>", help="Name of the alternate-exchange for the new queue or exchange. Exchanges route messages to the alternate exchange if they are unable to route them elsewhere. Queues route messages to the alternate exchange if they are rejected by a subscriber or orphaned by queue deletion.")
group2.add_option("--passive", "--dry-run", action="store_true", help="Do not actually add the exchange or queue, ensure that all parameters and permissions are correct and would allow it to be created.")
group2.add_option("--durable", action="store_true", help="The new queue or exchange is durable.")
parser.add_option_group(group2)
group3 = OptionGroup(parser, "Options for Adding Queues")
group3.add_option("--cluster-durable", action="store_true", help="The new queue becomes durable if there is only one functioning cluster node")
- group3.add_option("--file-count", action="store", type="int", default=8, metavar="N", help="Number of files in queue's persistence journal")
- group3.add_option("--file-size", action="store", type="int", default=24, metavar="N", help="File size in pages (64Kib/page)")
- group3.add_option("--max-queue-size", action="store", type="int", metavar="N", help="Number of files in queue's persistence journal")
- group3.add_option("--max-queue-count", action="store", type="int", metavar="N", help="Number of files in queue's persistence journal")
- group3.add_option("--limit-policy", action="store", choices=["none", "reject", "flow-to-disk", "ring", "ring-strict"], metavar="CHOICE", help="Action to take when queue limit is reached")
- group3.add_option("--order", action="store", choices=["fifo", "lvq", "lvq-no-browse"], metavar="CHOICE", help="Queue ordering policy")
- group3.add_option("--generate-queue-events", action="store", type="int", metavar="N", help="If set to 1, every enqueue will generate an event that can be processed by registered listeners (e.g. for replication). If set to 2, events will be generated for enqueues and dequeues.")
+ group3.add_option("--file-count", action="store", type="int", default=8, metavar="<n>", help="Number of files in queue's persistence journal")
+ group3.add_option("--file-size", action="store", type="int", default=24, metavar="<n>", help="File size in pages (64Kib/page)")
+ group3.add_option("--max-queue-size", action="store", type="int", metavar="<n>", help="Number of files in queue's persistence journal")
+ group3.add_option("--max-queue-count", action="store", type="int", metavar="<n>", help="Number of files in queue's persistence journal")
+ group3.add_option("--limit-policy", action="store", choices=["none", "reject", "flow-to-disk", "ring", "ring-strict"], metavar="<policy>", help="Action to take when queue limit is reached")
+ group3.add_option("--order", action="store", choices=["fifo", "lvq", "lvq-no-browse"], metavar="<ordering>", help="Queue ordering policy")
+ group3.add_option("--generate-queue-events", action="store", type="int", metavar="<n>", help="If set to 1, every enqueue will generate an event that can be processed by registered listeners (e.g. for replication). If set to 2, events will be generated for enqueues and dequeues.")
# no option for declaring an exclusive queue - which can only be used by the session that creates it.
parser.add_option_group(group3)
@@ -173,7 +175,7 @@ def OptionsAndArguments(argv):
parser.add_option_group(group5)
group6 = OptionGroup(parser, "Options for Declaring Bindings")
- group6.add_option("-f", "--file", action="store", type="string", metavar="FILE.xq", help="For XML Exchange bindings - specifies the name of a file containing an XQuery.")
+ group6.add_option("-f", "--file", action="store", type="string", metavar="<file.xq>", help="For XML Exchange bindings - specifies the name of a file containing an XQuery.")
parser.add_option_group(group6)
opts, encArgs = parser.parse_args(args=argv)
@@ -227,7 +229,8 @@ def OptionsAndArguments(argv):
config._if_empty = False
if opts.force_if_not_used:
config._if_unused = False
-
+ if opts.sasl_mechanism:
+ config._sasl_mechanism = opts.sasl_mechanism
return args
@@ -272,15 +275,16 @@ def snarf_header_args(args):
return [False]
class BrokerManager:
- def __init__ (self):
+ def __init__(self):
self.brokerName = None
self.qmf = None
self.broker = None
+ self.mechanism = None
- def SetBroker (self, brokerUrl):
+ def SetBroker(self, brokerUrl, mechanism):
self.url = brokerUrl
self.qmf = Session()
- self.broker = self.qmf.addBroker(brokerUrl, config._connTimeout)
+ self.broker = self.qmf.addBroker(brokerUrl, config._connTimeout, mechanism)
agents = self.qmf.getAgents()
for a in agents:
if a.getAgentBank() == '0':
@@ -290,7 +294,7 @@ class BrokerManager:
if self.broker:
self.qmf.delBroker(self.broker)
- def Overview (self):
+ def Overview(self):
exchanges = self.qmf.getObjects(_class="exchange", _agent=self.brokerAgent)
queues = self.qmf.getObjects(_class="queue", _agent=self.brokerAgent)
print "Total Exchanges: %d" % len (exchanges)
@@ -312,7 +316,7 @@ class BrokerManager:
print " durable: %d" % durable
print " non-durable: %d" % (len (queues) - durable)
- def ExchangeList (self, filter):
+ def ExchangeList(self, filter):
exchanges = self.qmf.getObjects(_class="exchange", _agent=self.brokerAgent)
caption1 = "Type "
caption2 = "Exchange Name"
@@ -327,7 +331,7 @@ class BrokerManager:
print line
for ex in exchanges:
- if self.match (ex.name, filter):
+ if self.match(ex.name, filter):
print "%-10s%-*s " % (ex.type, maxNameLen, ex.name),
args = ex.arguments
if ex.durable: print "--durable",
@@ -337,29 +341,29 @@ class BrokerManager:
print "--alternate-exchange=%s" % ex._altExchange_.name,
print
- def ExchangeListRecurse (self, filter):
+ def ExchangeListRecurse(self, filter):
exchanges = self.qmf.getObjects(_class="exchange", _agent=self.brokerAgent)
bindings = self.qmf.getObjects(_class="binding", _agent=self.brokerAgent)
queues = self.qmf.getObjects(_class="queue", _agent=self.brokerAgent)
for ex in exchanges:
- if self.match (ex.name, filter):
+ if self.match(ex.name, filter):
print "Exchange '%s' (%s)" % (ex.name, ex.type)
for bind in bindings:
if bind.exchangeRef == ex.getObjectId():
qname = "<unknown>"
- queue = self.findById (queues, bind.queueRef)
+ queue = self.findById(queues, bind.queueRef)
if queue != None:
qname = queue.name
print " bind [%s] => %s" % (bind.bindingKey, qname)
- def QueueList (self, filter):
+ def QueueList(self, filter):
queues = self.qmf.getObjects(_class="queue", _agent=self.brokerAgent)
caption = "Queue Name"
maxNameLen = len(caption)
for q in queues:
- if self.match (q.name, filter):
+ if self.match(q.name, filter):
if len(q.name) > maxNameLen: maxNameLen = len(q.name)
print "%-*s Attributes" % (maxNameLen, caption)
line = ""
@@ -368,7 +372,7 @@ class BrokerManager:
print line
for q in queues:
- if self.match (q.name, filter):
+ if self.match(q.name, filter):
print "%-*s " % (maxNameLen, q.name),
args = q.arguments
if q.durable: print "--durable",
@@ -387,25 +391,25 @@ class BrokerManager:
print "--alternate-exchange=%s" % q._altExchange_.name,
print
- def QueueListRecurse (self, filter):
+ def QueueListRecurse(self, filter):
exchanges = self.qmf.getObjects(_class="exchange", _agent=self.brokerAgent)
bindings = self.qmf.getObjects(_class="binding", _agent=self.brokerAgent)
queues = self.qmf.getObjects(_class="queue", _agent=self.brokerAgent)
for queue in queues:
- if self.match (queue.name, filter):
+ if self.match(queue.name, filter):
print "Queue '%s'" % queue.name
for bind in bindings:
if bind.queueRef == queue.getObjectId():
ename = "<unknown>"
- ex = self.findById (exchanges, bind.exchangeRef)
+ ex = self.findById(exchanges, bind.exchangeRef)
if ex != None:
ename = ex.name
if ename == "":
ename = "''"
print " bind [%s] => %s" % (bind.bindingKey, ename)
- def AddExchange (self, args):
- if len (args) < 2:
+ def AddExchange(self, args):
+ if len(args) < 2:
Usage()
etype = args[0]
ename = args[1]
@@ -415,18 +419,18 @@ class BrokerManager:
if config._ive:
declArgs[IVE] = 1
if config._altern_ex != None:
- self.broker.getAmqpSession().exchange_declare (exchange=ename, type=etype, alternate_exchange=config._altern_ex, passive=config._passive, durable=config._durable, arguments=declArgs)
+ self.broker.getAmqpSession().exchange_declare(exchange=ename, type=etype, alternate_exchange=config._altern_ex, passive=config._passive, durable=config._durable, arguments=declArgs)
else:
- self.broker.getAmqpSession().exchange_declare (exchange=ename, type=etype, passive=config._passive, durable=config._durable, arguments=declArgs)
+ self.broker.getAmqpSession().exchange_declare(exchange=ename, type=etype, passive=config._passive, durable=config._durable, arguments=declArgs)
- def DelExchange (self, args):
- if len (args) < 1:
+ def DelExchange(self, args):
+ if len(args) < 1:
Usage()
ename = args[0]
- self.broker.getAmqpSession().exchange_delete (exchange=ename)
+ self.broker.getAmqpSession().exchange_delete(exchange=ename)
- def AddQueue (self, args):
- if len (args) < 1:
+ def AddQueue(self, args):
+ if len(args) < 1:
Usage()
qname = args[0]
declArgs = {}
@@ -463,24 +467,24 @@ class BrokerManager:
declArgs[QUEUE_EVENT_GENERATION] = config._eventGeneration
if config._altern_ex != None:
- self.broker.getAmqpSession().queue_declare (queue=qname, alternate_exchange=config._altern_ex, passive=config._passive, durable=config._durable, arguments=declArgs)
+ self.broker.getAmqpSession().queue_declare(queue=qname, alternate_exchange=config._altern_ex, passive=config._passive, durable=config._durable, arguments=declArgs)
else:
- self.broker.getAmqpSession().queue_declare (queue=qname, passive=config._passive, durable=config._durable, arguments=declArgs)
+ self.broker.getAmqpSession().queue_declare(queue=qname, passive=config._passive, durable=config._durable, arguments=declArgs)
- def DelQueue (self, args):
- if len (args) < 1:
+ def DelQueue(self, args):
+ if len(args) < 1:
Usage()
qname = args[0]
- self.broker.getAmqpSession().queue_delete (queue=qname, if_empty=config._if_empty, if_unused=config._if_unused)
+ self.broker.getAmqpSession().queue_delete(queue=qname, if_empty=config._if_empty, if_unused=config._if_unused)
- def Bind (self, args):
- if len (args) < 2:
+ def Bind(self, args):
+ if len(args) < 2:
Usage()
ename = args[0]
qname = args[1]
key = ""
- if len (args) > 2:
+ if len(args) > 2:
key = args[2]
# query the exchange to determine its type.
@@ -507,35 +511,35 @@ class BrokerManager:
if not ok:
sys.exit(1)
- self.broker.getAmqpSession().exchange_bind (queue=qname,
+ self.broker.getAmqpSession().exchange_bind(queue=qname,
exchange=ename,
binding_key=key,
arguments=_args)
- def Unbind (self, args):
- if len (args) < 2:
+ def Unbind(self, args):
+ if len(args) < 2:
Usage()
ename = args[0]
qname = args[1]
key = ""
- if len (args) > 2:
+ if len(args) > 2:
key = args[2]
- self.broker.getAmqpSession().exchange_unbind (queue=qname, exchange=ename, binding_key=key)
+ self.broker.getAmqpSession().exchange_unbind(queue=qname, exchange=ename, binding_key=key)
- def findBId (self, items, id):
+ def findBId(self, items, id):
for item in items:
if item.getObjectId() == id:
return item
return None
- def match (self, name, filter):
+ def match(self, name, filter):
if filter == "":
return True
- if name.find (filter) == -1:
+ if name.find(filter) == -1:
return False
return True
-def YN (bool):
+def YN(bool):
if bool:
return 'Y'
return 'N'
@@ -543,12 +547,12 @@ def YN (bool):
def main(argv=None):
args = OptionsAndArguments(argv)
- bm = BrokerManager ()
+ bm = BrokerManager()
try:
- bm.SetBroker(config._host)
+ bm.SetBroker(config._host, config._sasl_mechanism)
if len(args) == 0:
- bm.Overview ()
+ bm.Overview()
else:
cmd = args[0]
modifier = ""
@@ -556,32 +560,32 @@ def main(argv=None):
modifier = args[1]
if cmd == "exchanges":
if config._recursive:
- bm.ExchangeListRecurse (modifier)
+ bm.ExchangeListRecurse(modifier)
else:
- bm.ExchangeList (modifier)
+ bm.ExchangeList(modifier)
elif cmd == "queues":
if config._recursive:
- bm.QueueListRecurse (modifier)
+ bm.QueueListRecurse(modifier)
else:
- bm.QueueList (modifier)
+ bm.QueueList(modifier)
elif cmd == "add":
if modifier == "exchange":
- bm.AddExchange (args[2:])
+ bm.AddExchange(args[2:])
elif modifier == "queue":
- bm.AddQueue (args[2:])
+ bm.AddQueue(args[2:])
else:
Usage()
elif cmd == "del":
if modifier == "exchange":
- bm.DelExchange (args[2:])
+ bm.DelExchange(args[2:])
elif modifier == "queue":
- bm.DelQueue (args[2:])
+ bm.DelQueue(args[2:])
else:
Usage()
elif cmd == "bind":
- bm.Bind (args[1:])
+ bm.Bind(args[1:])
elif cmd == "unbind":
- bm.Unbind (args[1:])
+ bm.Unbind(args[1:])
else:
Usage()
except KeyboardInterrupt:
diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/tools/src/py/qpid-printevents
index 5da74ca9ef..8c9649c4aa 100755
--- a/qpid/tools/src/py/qpid-printevents
+++ b/qpid/tools/src/py/qpid-printevents
@@ -27,6 +27,7 @@ import socket
from time import time, strftime, gmtime, sleep
from qmf.console import Console, Session
+
class EventConsole(Console):
def event(self, broker, event):
print event
@@ -75,17 +76,19 @@ $ %prog guest/guest@broker-host:10000
def main(argv=None):
p = optparse.OptionParser(usage=_usage, description=_description, formatter=JHelpFormatter())
+ p.add_option("--heartbeats", action="store_true", default=False, help="Use heartbeats.")
+ p.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="<mech>", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.")
options, arguments = p.parse_args(args=argv)
if len(arguments) == 0:
arguments.append("localhost")
console = EventConsole()
- session = Session(console, rcvObjects=False, rcvHeartbeats=False, manageConnections=True)
+ session = Session(console, rcvObjects=False, rcvHeartbeats=options.heartbeats, manageConnections=True)
brokers = []
try:
for host in arguments:
- brokers.append(session.addBroker(host))
+ brokers.append(session.addBroker(host, None, options.sasl_mechanism))
try:
while (True):
sleep(10)
diff --git a/qpid/tools/src/py/qpid-queue-stats b/qpid/tools/src/py/qpid-queue-stats
index 6c737a080e..808ea50e6b 100755
--- a/qpid/tools/src/py/qpid-queue-stats
+++ b/qpid/tools/src/py/qpid-queue-stats
@@ -32,13 +32,13 @@ from qpid.connection import Connection, ConnectionFailed
from time import sleep
class BrokerManager(Console):
- def __init__(self, host):
+ def __init__(self, host, mechanism):
self.url = host
self.objects = {}
self.filter = None
self.session = Session(self, rcvEvents=False, rcvHeartbeats=False,
userBindings=True, manageConnections=True)
- self.broker = self.session.addBroker(self.url)
+ self.broker = self.session.addBroker(self.url, None, mechanism)
self.firstError = True
def setFilter(self,filter):
@@ -121,13 +121,11 @@ class BrokerManager(Console):
print
self.session.delBroker(self.broker)
-##
-## Main Program
-##
def main(argv=None):
p = optparse.OptionParser()
p.add_option('--broker-address','-a', default='localhost' , help='broker-addr is in the form: [username/password@] hostname | ip-address [:<port>] \n ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost')
p.add_option('--filter','-f' ,default=None ,help='a list of comma separated queue names (regex are accepted) to show')
+ p.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="<mech>", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.")
options, arguments = p.parse_args(args=argv)
@@ -137,7 +135,7 @@ def main(argv=None):
for s in options.filter.split(","):
filter.append(re.compile(s))
- bm = BrokerManager(host)
+ bm = BrokerManager(host, options.sasl_mechanism)
bm.setFilter(filter)
bm.Display()
diff --git a/qpid/tools/src/py/qpid-route b/qpid/tools/src/py/qpid-route
index 3674ed7913..0e9d405643 100755
--- a/qpid/tools/src/py/qpid-route
+++ b/qpid/tools/src/py/qpid-route
@@ -36,6 +36,7 @@ class Config:
self._transport = "tcp"
self._ack = 0
self._connTimeout = 10
+ self._sasl_mechanism = None
config = Config()
@@ -86,7 +87,7 @@ def OptionsAndArguments(argv):
description=description,
formatter=JHelpFormatter())
- parser.add_option("--timeout", action="store", type="int", default=10, metavar="SECS", help="Maximum time to wait for broker connection (in seconds)")
+ parser.add_option("--timeout", action="store", type="int", default=10, metavar="<secs>", help="Maximum time to wait for broker connection (in seconds)")
parser.add_option("-v", "--verbose", action="store_true", help="Verbose output")
parser.add_option("-q", "--quiet", action="store_true", help="Quiet output, don't print duplicate warnings")
parser.add_option("-d", "--durable", action="store_true", help="Added configuration shall be durable")
@@ -94,9 +95,11 @@ def OptionsAndArguments(argv):
parser.add_option("-e", "--del-empty-link", action="store_true", help="Delete link after deleting last route on the link")
parser.add_option("-s", "--src-local", action="store_true", help="Make connection to source broker (push route)")
- parser.add_option("--ack", action="store", type="int", metavar="N", help="Acknowledge transfers over the bridge in batches of N")
+ parser.add_option("--ack", action="store", type="int", metavar="<n>", help="Acknowledge transfers over the bridge in batches of N")
parser.add_option("-t", "--transport", action="store", type="string", default="tcp", metavar="<transport>", help="Transport to use for links, defaults to tcp")
+ parser.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="<mech>", help="SASL mechanism for authentication. Used when the client connects to the destination broker (not for authentication between the source and destination brokers - that is specified using the [mechanisms] argument to 'add route'). SASL automatically picks the most secure available mechanism - use this option to override.")
+
opts, encArgs = parser.parse_args(args=argv)
try:
@@ -131,6 +134,9 @@ def OptionsAndArguments(argv):
if opts.ack:
config._ack = opts.ack
+ if opts.sasl_mechanism:
+ config._sasl_mechanism = opts.sasl_mechanism
+
return args
@@ -140,7 +146,7 @@ class RouteManager:
self.local = BrokerURL(localBroker)
self.remote = None
self.qmf = Session()
- self.broker = self.qmf.addBroker(localBroker, config._connTimeout)
+ self.broker = self.qmf.addBroker(localBroker, config._connTimeout, config._sasl_mechanism)
self.broker._waitForStable()
self.agent = self.broker.getBrokerAgent()
diff --git a/qpid/tools/src/py/qpid-stat b/qpid/tools/src/py/qpid-stat
index 150c918f6d..2a781ad0ef 100755
--- a/qpid/tools/src/py/qpid-stat
+++ b/qpid/tools/src/py/qpid-stat
@@ -38,6 +38,7 @@ class Config:
self._increasing = False
self._sortcol = None
self._cluster_detail = False
+ self._sasl_mechanism = None
config = Config()
@@ -47,11 +48,11 @@ def OptionsAndArguments(argv):
global config
parser = OptionParser(usage="usage: %prog [options] BROKER",
- description="Example: $ qpid-stat -q broker-host:10000")
+ description="Example: $ qpid-stat -q broker-host:10000")
group1 = OptionGroup(parser, "General Options")
- group1.add_option("-t", "--timeout", action="store", type="int", default=10, metavar="SECS", help="Maximum time to wait for broker connection (in seconds)")
-
+ group1.add_option("-t", "--timeout", action="store", type="int", default=10, metavar="<secs>", help="Maximum time to wait for broker connection (in seconds)")
+ group1.add_option("--sasl-mechanism", action="store", choices=["EXTERNAL","ANONYMOUS","PLAIN","CRAM-MD5","DIGEST-MD5","GSSAPI"], metavar="<mech>", help="SASL mechanism for authentication. SASL automatically picks the most secure available mechanism - use this option to override.")
parser.add_option_group(group1)
group2 = OptionGroup(parser, "Display Options")
@@ -62,17 +63,17 @@ def OptionsAndArguments(argv):
group2.add_option("-e", "--exchanges", help="Show Exchanges",
action="store_const", const="e", dest="show")
group2.add_option("-q", "--queues", help="Show Queues",
- action="store_const", const="q", dest="show")
+ action="store_const", const="q", dest="show")
group2.add_option("-u", "--subscriptions", help="Show Subscriptions",
- action="store_const", const="u", dest="show")
- group2.add_option("-S", "--sort-by", metavar="COLNAME",
- help="Sort by column name")
+ action="store_const", const="u", dest="show")
+ group2.add_option("-S", "--sort-by", metavar="<colname>",
+ help="Sort by column name")
group2.add_option("-I", "--increasing", action="store_true", default=False,
- help="Sort by increasing value (default = decreasing)")
- group2.add_option("-L", "--limit", default=50, metavar="NUM",
- help="Limit output to NUM rows")
+ help="Sort by increasing value (default = decreasing)")
+ group2.add_option("-L", "--limit", default=50, metavar="<n>",
+ help="Limit output to n rows")
group2.add_option("-C", "--cluster", action="store_true", default=False,
- help="Display per-broker cluster detail.")
+ help="Display per-broker cluster detail.")
parser.add_option_group(group2)
opts, args = parser.parse_args(args=argv)
@@ -86,6 +87,7 @@ def OptionsAndArguments(argv):
config._increasing = opts.increasing
config._limit = opts.limit
config._cluster_detail = opts.cluster
+ config._sasl_mechanism = opts.sasl_mechanism
if args:
config._host = args[0]
@@ -178,10 +180,11 @@ class BrokerManager(Console):
self.brokers = []
self.cluster = None
- def SetBroker(self, brokerUrl):
+ def SetBroker(self, brokerUrl, mechanism):
self.url = brokerUrl
self.qmf = Session()
- self.broker = self.qmf.addBroker(brokerUrl, config._connTimeout)
+ self.mechanism = mechanism
+ self.broker = self.qmf.addBroker(brokerUrl, config._connTimeout, mechanism)
agents = self.qmf.getAgents()
for a in agents:
if a.getAgentBank() == '0':
@@ -502,7 +505,7 @@ def main(argv=None):
bm = BrokerManager()
try:
- bm.SetBroker(config._host)
+ bm.SetBroker(config._host, config._sasl_mechanism)
bm.display()
bm.Disconnect()
return 0