|
|
|
Jmq
Action : was.jmq (Category : was, Name : jmq, By : kikonf)
Complete Name : was.jmq.by.kikonf Version : 5.0 License : Modified BSD License Purpose of the was category : Easy to customize. This category use in background the wsadmin command in jython mode (through AdminConfig, AdminControl and AdminTask), to drive WebSphere Application Server ® configuration. You can use it to manage the whole WebSphere ® architecture. Purpose of this jmq plugin : Creates one or more Queue Connection Factory(ies), Queue(s) and Activation Spec(s) The following shows the main Source Code File for the Action : was.jmq Toggle lines ## Copyright (c) 2008, Patrick Germain Placidoux ## All rights reserved. ## ## This file is part of Kikonf Public Software. ## ## Kikonf Public Software is released under the modified BSD License, ## which should accompany it or any part of it in the file "COPYING". ## If you do not have this file you can access the license ## through the WWW at http://www.kikonf.org/license/bsd/license.txt. ## ## Home: http://www.kikonf.org ## Contact: kikonf@gmx.com from actions.was.tools import * class Jmq(wasAction): PROVIDER='WebSphere MQ JMS Provider' def init(self): self.__jpvd=None def extract(self, scope_attrs=None, prefix=None, **keywords): self_funct='extract' scope_id, scope_attrs, scope=self.getScope(scope_attrs=scope_attrs, indent=self.getIndent()) version=self.getCAttr('software_was_version') self.verbose(scope_attrs, prefix=prefix) indent=self.getIndent() + 3*' ' jmq_node=self.newTop() #-- because in extract mode, each call returns a new blank top node. jmq_node.setAttrs(prefix=prefix) mkNodeScope(jmq_node, scope_attrs, isUnique=True) #-- creates a scope node. all_acs = {} #-- Preparing activation Spec dict if version[:3]>='7.0': all_ok_acs = [] verbose('WMQActivationSpecs listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) acs=split( AdminConfig.listWMQActivationSpecs(scope_id) ) for activation_specs in acs: activation_specs=getShowAsDict(activation_specs) if prefix!=None and not activation_specs['name'].startswith(prefix):continue verbose('WMQActivationSpec:' + activation_specs['name'] + ' listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) all_acs[AdminConfig.showAttribute(ac, 'destinationJndiName')]=activation_specs verbose('MQQueueConnectionFactory listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) qcfs = getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/JMSProvider:' + Jmq.PROVIDER + '/MQQueueConnectionFactory:/') )) # Tag: qcfs qcfs_node=jmq_node.newNode('qcfs') for qcfname in qcfs.keys(): if prefix!=None and not qcfname.startswith(prefix):continue qcfactories=getShowAsDict(AdminConfig.show(qcfs[qcfname])) verbose('MQQueueConnectionFactory:' + qcfname + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) _name=qcfname if prefix!=None:_name=qcfname.split(prefix + '_')[1] attrs={ 'name':_name, 'jndi_name':qcfactories['jndiName'], 'channel':qcfactories['channel'], 'queue_manager': qcfactories['queueManager'], 'host':qcfactories['host'], 'port':qcfactories['port'], 'xa':qcfactories['XAEnabled'], 'transport_type':qcfactories['transportType'], 'pollint':qcfactories['pollingInterval'], } if qcfactories.has_key('description') and qcfactories['description']!=None:attrs['desc']=qcfactories['description'][1:-1] else:attrs['desc']=None if attrs['desc']==DESIGN_NOTICE:attrs['desc']=None if qcfactories.has_key('CCSID'):attrs['ccsid']=qcfactories['CCSID'] qcf_node=qcfs_node.newNode('qcf', **attrs) connection_pool_node=qcf_node.newNode('connection_pool') # Tag: qcfs/qcf/connectionPool indent=self.getIndent() + 3*' ' getConnectionPoolAttrs(qcfactories['connectionPool'], connection_pool_node, level=self.getVerbose(), indent=indent, logFile=self.getLogFile()) verbose('JMSProvider listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) qs=getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/JMSProvider:' + Jmq.PROVIDER + '/MQQueue:/') )) # Tag: Queues queues_node=jmq_node.newNode('queues') for qname in qs.keys(): if prefix!=None and not qname.startswith(prefix):continue queues=getShowAsDict(AdminConfig.show(qs[qname])) verbose('MQQueue:' + qname + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) _name=qname if prefix!=None:_name=qname.split(prefix + '_')[1] attrs={ 'name':_name, 'queue':queues['baseQueueName'], 'jndi_name':queues['jndiName'], 'target':queues['targetClient'], 'expiry':queues['specifiedExpiry'], } if queues.has_key('description') and queues['description']!=None:attrs['desc']=queues['description'][1:-1] else:attrs['desc']=None if attrs['desc']==DESIGN_NOTICE:attrs['desc']=None if queues.has_key('serverConnectionChannelName'):attrs['channel']=queues['serverConnectionChannelName'] if queues.has_key('queueManagerHost'):attrs['host']=queues['queueManagerHost'] if queues.has_key('queueManagerPort'):attrs['port']=queues['queueManagerPort'] if queues.has_key('CCSID'):attrs['ccsid']=queues['CCSID'] if queues.has_key('baseQueueManagerName'):attrs['queue_manager']=queues['baseQueueManagerName'] ## print 'attrs:::', attrs queue_node=queues_node.newNode('queue', **attrs) indent=self.getIndent() + 3*' ' jndi_name=attrs['jndi_name'] # Associated Activation Specs if jndi_name in all_acs.keys(): activation_specs=getShowAsDict(all_acs[jndi_name]) all_ok_acs.append(activation_specs['name']) self.extCheckActMatchingQ(activation_specs, qs) _name=activation_specs['name'] if prefix!=None:_name=activation_specs['name'].split(prefix + '_')[1] attrs={ # Tag: Queues/Queue/Activation Spec 'name':_name, 'jndi_name':activation_specs['jndiName'], } if activation_specs.has_key('description') and activation_specs['description']!=None:attrs['desc']=activation_specs['description'][1:-1] else:attrs['desc']=None if attrs['desc']==DESIGN_NOTICE:attrs['desc']=None if activation_specs.has_key('qmgrSvrconnChannel'):attrs['channel']=activation_specs['qmgrSvrconnChannel'] if activation_specs.has_key('qmgrName'):attrs['queue_manager']=activation_specs['qmgrName'] if activation_specs.has_key('qmgrHostname'):attrs['host']=activation_specs['qmgrHostname'] if activation_specs.has_key('qmgrPortNumber'):attrs['port']=activation_specs['qmgrPortNumber'] if activation_specs.has_key('CCSID'):attrs['ccsid']=activation_specs['CCSID'] if activation_specs.has_key('maxPoolSize'):attrs['max_pool']=activation_specs['maxPoolSize'] queue_node.newNode('activation_spec', **attrs) if version[:3]>='7.0':self.extListActNotMatchingQ(all_acs, all_ok_acs) def remove(self, no_name, no_name_no_prefix): jmq_node=self.getTop() jmq_attrs = jmq_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=jmq_node, indent=self.getIndent()) self.verbose(scope_attrs, prefix=jmq_attrs.prefix) indent=self.getIndent() + 3*' ' # Removing all Qcfs/Queues/Acs starting by prefix if jmq_attrs.prefix!=None: #-- no_name/no_name_no_prefix prefix=jmq_attrs.prefix if no_name_no_prefix:prefix=None self.rmvQcf(prefix=prefix, indent=indent) self.rmvQueue(prefix=prefix, indent=indent) else: # Removing Qcfs pvd=self.getProvider(indent=indent) if jmq_node.hasNode('qcfs'): qcf_nodes=jmq_node.getNode('qcfs')[0].getNodes() for qcf_node in qcf_nodes: qcf_attrs = qcf_node.getAttrs() #-- no_name/no_name_no_prefix name=qcf_attrs.name if no_name or no_name_no_prefix:name=None self.rmvQcf(name=name, indent=indent) # Removing Queues and Acs if jmq_node.hasNode('queues'): queue_nodes=jmq_node.getNode('queues')[0].getNodes() for queue_node in queue_nodes: queue_attrs = queue_node.getAttrs() #-- no_name/no_name_no_prefix name=queue_attrs.name if no_name or no_name_no_prefix:name=None self.rmvQueue(name=name, indent=indent) def inject(self): self_funct='inject' jmq_node = self.getTop() jmq_attrs = jmq_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=jmq_node, indent=self.getIndent()) self.verbose(scope_attrs, prefix=jmq_attrs.prefix) indent=self.getIndent() + 3*' ' #-- Removing all qcfs starting by prefix if jmq_attrs.prefix!=None:self.rmvQcf(prefix=jmq_attrs.prefix, indent=self.getIndent()) #-- Retreiving the WebSphere MQ JMS Provider pvd=self.getProvider(indent=indent) if jmq_node.hasNode('qcfs'): verbose('MQQueueConnectionFactory listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) mqtpmpl=split( AdminConfig.listTemplates("MQQueueConnectionFactory") )[0] for qcf_node in jmq_node.getNode('qcfs')[0].getNodes(): qcf_attrs = qcf_node.getAttrs() if jmq_attrs.prefix!=None:name=jmq_attrs.prefix + '_' + qcf_attrs.name else: name=qcf_attrs.name #-- Removing all Qcf with name self.rmvQcf(name=name, indent=indent) cmdvalues=[] cmdvalues.append(['name', name]) if qcf_attrs.desc!=None:cmdvalues.append(['description', qcf_attrs.desc]) else:cmdvalues.append(['description', DESIGN_NOTICE]) cmdvalues.append(['jndiName', qcf_attrs.jndi_name]) cmdvalues.append(['XAEnabled', qcf_attrs.xa]) cmdvalues.append(['transportType', qcf_attrs.transport_type]) cmdvalues.append(['pollingInterval', qcf_attrs.pollint]) cmdvalues.append(['queueManager', qcf_attrs.queue_manager]) cmdvalues.append(['host', qcf_attrs.host]) cmdvalues.append(['port', qcf_attrs.port]) cmdvalues.append(['channel', qcf_attrs.channel]) cmdvalues.append(['CCSID', qcf_attrs.ccsid]) if qcf_node.hasNode('connection_pool'): conpool_node=qcf_node.getNode('connection_pool')[0] cmdvalues.append(['connectionPool', getConnectionPoolCfgs(conpool_node, level=self.getVerbose(), indent=indent, logFile=self.getLogFile())]) if len(cmdvalues)!=0: verbose('MQQueueConnectionFactory listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.createUsingTemplate('MQQueueConnectionFactory', pvd, cmdvalues, mqtpmpl) verbose('MQQueueConnectionFactory:' + name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) self.injQueue(jmq_node.getNode('queues')[0].getNodes(), prefix=jmq_attrs.prefix, indent=indent) def rmvQcf(self, name=None, prefix=None, indent=None): verbose('JMSProvider listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) qcfs=getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/JMSProvider:' + Jmq.PROVIDER + '/MQQueueConnectionFactory:/') )) for qcfname in qcfs.keys(): if prefix!=None and qcfname.startswith(prefix) \ or prefix==None and name!=None and qcfname==name \ or prefix==None and name==None: verbose('MQQueueConnectionFactory:' + qcfname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(qcfs[qcfname]) verbose('MQQueueConnectionFactory:' + qcfname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def injQueue(self, nodes, prefix=None, indent=None): self_funct='injQueue' # Removing all queues starting by prefix if prefix!=None:self.rmvQueue(prefix=prefix, indent=indent) verbose('MQQueue listing template.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) qtmpl=split( AdminConfig.listTemplates('MQQueue') )[0] for queue_node in nodes: cmdvalues=[] queue_attrs = queue_node.getAttrs() if prefix!=None:name=prefix + '_' + queue_attrs.name else: name=queue_attrs.name # Removing all queues with name self.rmvQueue(name=name, indent=indent) cmdvalues.append(['name', name]) if queue_attrs.desc!=None:cmdvalues.append(['description', queue_attrs.desc]) else:cmdvalues.append(['description', DESIGN_NOTICE]) cmdvalues.append(['jndiName', queue_attrs.jndi_name]) cmdvalues.append(['baseQueueName', queue_attrs.queue]) cmdvalues.append(['specifiedExpiry', queue_attrs.expiry]) cmdvalues.append(['targetClient', queue_attrs.target]) cmdvalues.append(['serverConnectionChannelName', queue_attrs.channel]) if queue_attrs.queue_manager!=None:cmdvalues.append(['baseQueueManagerName', queue_attrs.queue_manager]) if queue_attrs.host!=None:cmdvalues.append(['queueManagerHost', queue_attrs.host]) if queue_attrs.port!=None:cmdvalues.append(['queueManagerPort', queue_attrs.port]) if queue_attrs.ccsid!=None:cmdvalues.append(['CCSID', queue_attrs.ccsid]) verbose('MQQueue:' + name + ' creating using template.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.createUsingTemplate('MQQueue', self.getProvider(indent=indent), cmdvalues, qtmpl) verbose('MQQueue:' + name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) if queue_node.hasNode('activation_spec'): version=self.getCAttr('software_was_version') if version[:3]<'7.0':raise xception.kikonfActionSystemException(self, self_funct, 'Because using AdminTask.createWMQActivationSpec Activation spec is not allowed for this WAS version:' + version + '. Version must be >=7.0.' ) self.injActivationSpec(queue_node.getNode('activation_spec')[0], queue_attrs, prefix, indent=indent) def rmvQueue(self, name=None, prefix=None, indent=None): scope_id, scope_attrs, scope=self.getScope() verbose('MQQueue listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) queues=getStartByNameAsDict(split( AdminConfig.list("MQQueue", scope_id) )) for qname in queues.keys(): if prefix!=None and qname.startswith(prefix) \ or prefix==None and name!=None and qname==name \ or prefix==None and name==None: self.rmvActivationSpec(jndiName=AdminConfig.showAttribute(queues[qname], 'jndiName')) verbose('MQQueue:' + qname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(queues[qname]) verbose('MQQueue:' + qname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def injActivationSpec(self, node, queue_attrs, prefix=None, indent=None): scope_id, scope_attrs, scope=self.getScope() cmdvalues=[] activation_spec_attrs = node.getAttrs() if prefix!=None:name=prefix + '_' + activation_spec_attrs.name else:name=activation_spec_attrs.name cmdvalues.append(['name', activation_spec_attrs.name]) if activation_spec_attrs.desc!=None:cmdvalues.append(['description', activation_spec_attrs.desc]) else:cmdvalues.append('description', DESIGN_NOTICE) cmdvalues.append(['jndiName', activation_spec_attrs.jndi_name]) cmdvalues.append(['destinationJndiName', queue_attrs.jndi_name]) cmdvalues.append(['destinationType', queue_attrs.target]) # cmdvalues.append(['wmqTransportType', transport_type]) cmdvalues.append(['maxPoolSize', activation_spec_attrs.max_pool]) cmdvalues.append(['qmgrSvrconnChannel', activation_spec_attrs.channel]) cmdvalues.append(['qmgrName', activation_spec_attrs.queue_manager]) cmdvalues.append(['qmgrHostname', activation_spec_attrs.host]) cmdvalues.append(['qmgrPortNumber', activation_spec_attrs.port]) cmdvalues.append(['CCSID', queue_attrs.ccsid]) verbose('WMQActivationSpec creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminTask.createWMQActivationSpec(scope_id, cmdvalues) verbose('WMQActivationSpec:' + activation_spec_attrs.name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def rmvActivationSpec(self, jndiName=None, prefix=None, indent=None): version=self.getCAttr('software_was_version') if version[:3]<'7.0':return scope_id, scope_attrs, scope=self.getScope() verbose('WMQActivationSpecs creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) l=split( AdminConfig.listWMQActivationSpecs(scope_id) ) for ac in l: acname=AdminConfig.showAttribute(ac, 'name') if prefix==None and jndiName!=None and jndiName==AdminConfig.showAttribute(ac, 'jndiName') \ or prefix!=None and jndiName==None and acname.startswith(prefix) \ or prefix==None and jndiName==None: verbose('WMQActivationSpec removing:' + acname + '.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(ac) verbose('WMQActivationSpec:' + acname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def getProvider(self, indent=None): self_funct='getProvider' scope_id, scope_attrs, scope=self.getScope() if self.__jpvd!=None:return self.__jpvd verbose('JMSProvider retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) self.__jpvd=AdminConfig.getid(self.getScopeCP() + '/JMSProvider:' + Jmq.PROVIDER + '/') if self.__jpvd in ('', None):raise xception.kikonfActionSystemException(self, self_funct, ' Unable to find the Provider:"' + Jmq.PROVIDER + '" for scope:' + str(scope_attrs) + '.' ) return self.__jpvd def extCheckActMatchingQ(self, acs, qcfs, all_qs): if acs['ccsid']!=qs['ccsid']: mess_ac = 'Activation Spec name:' + acs['name'] + ' jndiName:' + acs['jndiName'] + '.' mess_q = 'Associated Queue name:' + qs['name'] + ' jndiName:' + qs['jndiName'] + '.' mess='Warning! Activation Spec "ccsid" do not match Queue "ccsid" !' print mess print mess_ac print mess_q def extListActNotMatchingQ(self, all_acs, all_ok_acs): for activation_specs in all_acs: if activation_specs['name'] in all_ok_acs:continue mess_ac = 'Activation Spec name:' + activation_specs['name'] + ' jndiName:' + activation_specs['jndiName'] + '. Declaration skipped !' print 'Activation Spec "destinationJndiName" do not match any existing Queue "jndiName" !' print mess_ac def verbose(self, scope_attrs, name=None, prefix=None, logFile=None): scope=str(scope_attrs).replace("'", '')[1:-1] if prefix==None:verbose('MQQueueConnectionFactories,MQQueues,WMQActivationSpecs at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) else:verbose('MQQueueConnectionFactory,MQQueue,WMQActivationSpecs under prefix:' + prefix + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
Trademarks :
|