Two Spoonfuls of Sugar
I was asked the other day to compare 2 queue managers in different environments (say, for the sake of argument, “test” and “pre-prod”) and to create the queues missing from “pre-prod”, and to delete the ones missing from “test”. I started going through the queue managers to list the missing and extra queues manually, and then I realised that there were many more queues to be updated than expected, so it had to scripted.
This is a classic “compare two lists” exercise, and I thought my new-found Ruby knowledge might come in handy.
Listing the queues for a given queue manager is nothing complicated:
$ echo "display qlocal(*)" | runmqsc queue.manager.test | grep QUEUE > tst.txt $ echo "display qlocal(*)" | runmqsc queue.manager.pre | grep QUEUE > pre.txt
Finding the queues to be created and deleted is basically a subtraction between the 2 sets. And that’s where using Ruby makes things ridiculously easy:
tst = [] pre = [] IO.readlines("tst.txt").each{ |queue| tst << queue.to_s.chomp } IO.readlines("pre.txt").each{ |queue| pre << queue.to_s.chomp } puts "Queues to be created" puts tst-pre puts "" puts "Queues to be deleted" puts pre-tst
And you might wonder: why not do it all in Ruby? Ok. So if you like it full of syntactic sugar, the whole thing could be packed into a single script, and that would give something like:
tst = `echo "display qlocal(*)" | runmqsc queue.manager.test | grep QUEUE`.split(/\n/) pre = `echo "display qlocal(*)" | runmqsc queue.manager.pre | grep QUEUE`.split(/\n/) puts "Queues to be created" (tst-pre).each{ |elt| puts elt.gsub(/\s*QUEUE\(([^\)]+)\)/, 'DEFINE QLOCAL(\1)') } puts "" puts "Queues to be deleted" (pre-tst).each{ |elt| puts elt.gsub(/\s*QUEUE\(([^\)]+)\)/, 'DELETE QLOCAL(\1)') }
Deadly. Don’t forget to brush your teeth.