Skip to content

Commit

Permalink
Fixes #50 - Clean all Qpid queues to zero
Browse files Browse the repository at this point in the history
  • Loading branch information
kgaikwad committed Jun 15, 2017
1 parent 88d4628 commit a64f022
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 0 deletions.
14 changes: 14 additions & 0 deletions definitions/checks/qpid_queues_not_clear.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Checks::QpidQueuesNotClear < ForemanMaintain::Check
metadata do
for_feature :qpid
description 'check for qpid queues'
tags :pre_upgrade
end

def run
qpid_queues_count = feature(:qpid).count
assert(qpid_queues_count == 0,
"There are #{qpid_queues_count} persistent qpid queue(s) present in the system",
:next_steps => Procedures::QpidQueuesClear.new)
end
end
28 changes: 28 additions & 0 deletions definitions/features/katello_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
class Features::KatelloService < ForemanMaintain::Feature
metadata do
label :katello_service
end

def make_stop(spinner, args = '')
originally_running_services = running_services
spinner.update 'Stopping katello running services..'
execute!("katello-service stop #{args}")
yield
ensure
spinner.update 'Starting the katello services..'
execute("katello-service start --only #{originally_running_services.join(',')}")
end

def make_start(spinner, args = '')
spinner.update 'Starting the katello services..'
execute!("katello-service start #{args}")
end

private

def running_services
katello_service_names = execute("katello-service list|awk '{print $1}'").split(/\n/)
running_service_names = execute("systemctl --all |grep running|awk '{print $1}'").split(/\n/)
(katello_service_names & running_service_names).map { |s| s.gsub('.service', '') }
end
end
47 changes: 47 additions & 0 deletions definitions/features/qpid.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class Features::Qpid < ForemanMaintain::Feature
metadata do
label :qpid

confine do
execute?('rpm -qa |grep qpid-tools') & File.exist?('/etc/pki/katello/qpid_client_striped.crt')
end
end

def clear_all
queues_cleared = []
available_qpid_queues.each do |qname|
clear(qname)
queues_cleared << qname
end
queues_cleared
rescue => e
logger.error e.message
return queues_cleared
end

def count
available_qpid_queues.length
end

private

def available_qpid_queues
output = qpid_config("list queue --show-property=name \
--show-property=autoDelete | awk '$2 ~ /False/{ print $1 }'")
output ? output.split(' ') : []
rescue => e
logger.error e.message
logger.error e.backtrace.join('\n')
end

def clear(queue_name)
qpid_config("del queue #{queue_name} --force")
end

def qpid_config(sub_cmd)
cmd = 'qpid-config --ssl-certificate=/etc/pki/katello/qpid_client_striped.crt\
-b amqps://localhost:5671 '
cmd += sub_cmd
execute(cmd)
end
end
17 changes: 17 additions & 0 deletions definitions/procedures/qpid_queues_clear.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class Procedures::QpidQueuesClear < ForemanMaintain::Procedure
metadata do
for_feature :qpid
description 'clear qpid queues'
end

def run
with_spinner('clear qpid queues') do |spinner|
feature(:katello_service).make_stop(spinner, '--exclude qpidd') do
spinner.update 'Clearing qpid queues..'
total_queues_cleared = feature(:qpid).clear_all
spinner.update "#{total_queues_cleared.length} queues cleared.\
These queues will be recreated using installer."
end
end
end
end
23 changes: 23 additions & 0 deletions test/definitions/checks/qpid_queues_not_clear_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require 'test_helper'

describe Checks::QpidQueuesNotClear do
include DefinitionsTestHelper

subject do
Checks::QpidQueuesNotClear.new
end

it 'runs on empty qpid queue' do
assume_feature_present(:qpid, :count => 0)
result = run_check(subject)
assert result.success?
end

it 'fails when qpid queues are present' do
assume_feature_present(:qpid, :count => 2)
result = run_check(subject)
assert result.fail?
assert_match 'There are 2 persistent qpid queue(s) present in the system', result.output
assert_equal [Procedures::QpidQueuesClear], subject.next_steps.map(&:class)
end
end

0 comments on commit a64f022

Please sign in to comment.