I think you missed removing the following 2 lines from aeolus-conductor.spec.in:
-Requires: rubygem(deltacloud-image-builder-agent) -Requires: rubygem(imagebuilder-console)
Other than that, ACK. If those two requires aren't removed, we'll have colliding qpid requirements.
Mike
On 03/15/2011 05:22 PM, Mohammed Morsi wrote:
aeolus-conductor.spec.in | 6 - conf/conductor-image_builder_service | 78 -------- src/image_builder_service/image_builder_service | 234 ----------------------- 3 files changed, 0 insertions(+), 318 deletions(-) delete mode 100755 conf/conductor-image_builder_service delete mode 100755 src/image_builder_service/image_builder_service
diff --git a/aeolus-conductor.spec.in b/aeolus-conductor.spec.in index 6e44e8b..4b77b37 100644 --- a/aeolus-conductor.spec.in +++ b/aeolus-conductor.spec.in @@ -126,7 +126,6 @@ mv %{buildroot}/%{app_root}/doc %{buildroot}/%{app_root}/test %{buildroot}/%{doc %{__cp} conf/aeolus-conductor %{buildroot}%{_initrddir} %{__cp} conf/conductor-dbomatic %{buildroot}%{_initrddir} %{__cp} conf/conductor-condor_refreshd %{buildroot}%{_initrddir} -%{__cp} conf/conductor-image_builder_service %{buildroot}%{_initrddir} %{__cp} conf/conductor-delayed_job %{buildroot}%{_initrddir} %{__cp} conf/aeolus-conductor-httpd.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/aeolus-conductor.conf %{__cp} conf/aeolus-conductor.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/aeolus-conductor @@ -157,7 +156,6 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/rails.log touch %{buildroot}%{_localstatedir}/log/%{name}/dbomatic.log touch %{buildroot}%{_localstatedir}/run/%{name}/event_log_position touch %{buildroot}%{_localstatedir}/log/%{name}/condor_refreshd.log -touch %{buildroot}%{_localstatedir}/log/%{name}/image_builder_service.log
[ -e %{buildroot}%{app_root}/log ] || %{__mkdir} -p %{buildroot}%{app_root}/log touch %{buildroot}%{app_root}/log/delayed_job.log @@ -193,7 +191,6 @@ getent passwd aeolus>/dev/null || \ /sbin/chkconfig --add aeolus-conductor /sbin/chkconfig --add conductor-dbomatic /sbin/chkconfig --add conductor-condor_refreshd -/sbin/chkconfig --add conductor-image_builder_service /sbin/chkconfig --add conductor-delayed_job
%preun daemons @@ -204,8 +201,6 @@ if [ $1 = 0 ]; then /sbin/chkconfig --del conductor-dbomatic /sbin/service conductor-condor_refreshd stop> /dev/null 2>&1 /sbin/chkconfig --del conductor-condor_refreshd -/sbin/service conductor-image_builder_service stop> /dev/null 2>&1 -/sbin/chkconfig --del conductor-image_builder_service /sbin/service conductor-delayed_job stop> /dev/null 2>&1 /sbin/chkconfig --del conductor-delayed_job fi @@ -227,7 +222,6 @@ fi %{_initrddir}/aeolus-conductor %{_initrddir}/conductor-dbomatic %{_initrddir}/conductor-condor_refreshd -%{_initrddir}/conductor-image_builder_service %{_initrddir}/conductor-delayed_job %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %config(noreplace) %{_sysconfdir}/sysconfig/aeolus-conductor diff --git a/conf/conductor-image_builder_service b/conf/conductor-image_builder_service deleted file mode 100755 index 947b0ac..0000000 --- a/conf/conductor-image_builder_service +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -# -# -# conductor-image_builder_service startup script for conductor-image_builder_service -# -# chkconfig: - 93 07 -# description: conductor-image_builder_service builds cloud images -# from the Aeolus Conductor db
-[ -r /etc/sysconfig/conductor-rails ]&& . /etc/sysconfig/conductor-rails
-[ -r /etc/sysconfig/aeolus-conductor ]&& . /etc/sysconfig/aeolus-conductor
-CONDUCTOR_DIR="${CONDUCTOR_DIR:-/usr/share/aeolus-conductor}" -BUILDER_LOG="${BUILDER_LOG:-/var/log/aeolus-conductor/image_builder_service.log}" -BUILDER_PID="${BUILDER_PID:-/var/run/aeolus-conductor/image_builder_service.pid}" -BUILDER_LOCKFILE="${BUILDER_LOCKFILE:-/var/lock/subsys/conductor-image_builder_service}" -AEOLUS_USER="${AEOLUS_USER:-aeolus}"
-BUILDER_PATH=$CONDUCTOR_DIR/image_builder_service -BUILDER_PROG=image_builder_service
-. /etc/init.d/functions
-start() {
- echo -n "Starting conductor-image_builder_service: "
- daemon --user=$AEOLUS_USER $BUILDER_PATH/$BUILDER_PROG
- RETVAL=$?
- if [ $RETVAL -eq 0 ]&& touch $BUILDER_LOCKFILE ; then
echo_success
echo
- else
echo_failure
echo
- fi
-}
-stop() {
- echo -n "Shutting down conductor-image_builder_service: "
- killproc -p $BUILDER_PID $BUILDER_PROG
- RETVAL=$?
- if [ $RETVAL -eq 0 ]&& rm -f $BUILDER_LOCKFILE ; then
echo_success
echo
- else
echo_failure
echo
- fi
-}
-case "$1" in
- start)
start
;;
- stop)
stop
;;
- restart)
stop
start
;;
- reload)
;;
- force-reload)
restart
;;
- status)
status -p $BUILDER_PID $BUILDER_PROG
RETVAL=$?
;;
- *)
echo "Usage: conductor-image_builder_service {start|stop|restart|status}"
exit 1
- ;;
-esac
-exit $RETVAL diff --git a/src/image_builder_service/image_builder_service b/src/image_builder_service/image_builder_service deleted file mode 100755 index 19ea709..0000000 --- a/src/image_builder_service/image_builder_service +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/env ruby -# -# Copyright (C) 2010 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -# MA 02110-1301, USA. A copy of the GNU General Public License is -# also available at http://www.gnu.org/copyleft/gpl.html.
-$:<< File.join(File.dirname(__FILE__), "../dutils") -require 'dutils' -require "image_builder_console" -require 'logger' -require 'optparse'
-help = false -daemon = true -builder_pid_dir = "/var/run/aeolus-conductor" -builder_log_dir = "/var/log/aeolus-conductor" -timeout = 8
-optparse = OptionParser.new do |opts|
- opts.banner =<<BANNER
-Usage: -image_builder_service [options]
-Options: -BANNER
- opts.on( '-f', '--pid-file PATH', "Use PATH to the image_builder_service pid directory (defaults to #{builder_pid_dir})") do |newpath|
- builder_pid_dir = newpath
- end
- opts.on( '-h', '--help', '') { help = true }
- opts.on( '-l', '--log PATH', "Use PATH to the image_builder_service log directory (defaults to #{builder_log_dir}). Use '-' for stdout") do |newpath|
- builder_log_dir = newpath
- end
- opts.on( '-n', '--nodaemon', 'Do not daemonize (useful in combination with -l for debugging)') { daemon = false }
- opts.on( '-t', '--timeout SEC', 'Sleep for SEC between each poll for a new job (default is #{timeout})') do |newtime|
- timeout = newtime
- end
-end
-begin
- optparse.parse!
-rescue OptionParser::InvalidOption => e
- puts "Invalid option #{e.args}"
- puts
- puts optparse
- exit(1)
-end
-if help
- puts optparse
- exit(0)
-end
-# setup the logger -if builder_log_dir == '-'
- BUILDER_LOG_FILE = STDOUT
-else
- BUILDER_LOG_FILE = "#{builder_log_dir}/image_builder_service.log"
-end -logger = Logger.new(BUILDER_LOG_FILE) -logger.level = Logger::DEBUG
-# daemonize -if daemon
- # note that this requires 'active_support', which we get for free from dutils
- Process.daemon
-end
-#TODO: Make this whole thing less fragile -class ImageBuilderService
- def initialize(logger, timeout)
- @log = logger
- @timeout = timeout.to_i
- @console ||= ImageBuilderConsole.new(:logger=>@log)
- @activebuilds ||= []
- @log.info "Image Builder Service initialized..."
- poll
- end
- def check_for_queued
- queue = Image.find(:all, :conditions => {:status => Image::STATE_QUEUED})
- cur_builds = Image.find(:all, :conditions => {:status => Image::ACTIVE_STATES})
- if queue.size> 0 || cur_builds.size> 0
@log.debug "========================================"
@log.debug "Queued Builds: " + queue.size.to_s
@log.debug "All Incomplete Builds: " + cur_builds.size.to_s
@log.debug "========================================"
- end
- find_orphaned(cur_builds) if cur_builds.size> queue.size
- queue.each {|t|
build(t)
- }
- end
- def build(image)
- #targets.each do |t|
@log.debug "========================================"
@log.debug "target: " + image.provider_type.codename + ", status: " + image.status
@log.debug "========================================"
# FIXME: this should be contained elsewhere (probably Image model) so we
# can keep logic out of here. Also, this currently only handles one
# account, we will need to be able to specify at some point.
creds = nil
image.provider_type.providers.each do |p|
unless p.provider_accounts.empty?
creds = p.provider_accounts.first.build_credentials
break
end
end
#TODO: switch this back to uri once ActiveBuild retrieves it properly
ab = @console.build_image(image.template.xml.to_xml, image.provider_type.codename, image.uuid, creds)
if ab
update_build_list(ab, image)
image.build_id = ab.object_id.to_s
image.save!
@log.debug "========================================"
@log.debug "Build id saved as: " + image.build_id
@log.debug "========================================"
end
- #end
- end
- def check_build_num
- @activebuilds.size
- end
- def find_orphaned(cur_builds)
- cur_builds.delete_if do |b|
break if @activebuilds.size == 0
@activebuilds.each do |ab|
b.build_id.eql?(ab[:build_id])
end
- end
- if cur_builds.size> 0
@log.debug "========================================"
@log.debug "There appear to be " + cur_builds.size.to_s + " untracked builds."
@log.debug "Attempting to get status updates...."
@log.debug "========================================"
found = []
cur_builds.each do |t|
found<< {:ab => @console.find_build(t.build_id),
:target => t }
end
@log.debug "========================================"
@log.debug "Retrieved " + found.size.to_s + " builds to update."
@log.debug "========================================"
found.each do |f|
update_build_list(f[:ab], f[:target])
end
- end
- end
- def update_agg(obj,new_status)
- @log.debug "========================================"
- @log.debug "Getting ar object to update using " + obj[:build].target.inspect + " and " + obj[:ar_id].inspect + " ..."
- @log.debug "========================================"
- image = Image.find(:first, :conditions => { :provider_type_id => ProviderType.find_by_codename(obj[:build].target.to_s).id,
:template_id => obj[:ar_id].to_i })
- @log.debug "========================================"
- @log.debug "Updating with status: " + new_status
- @log.debug "========================================"
- image.status = new_status
- image.save!
- if new_status == 'complete'
ri = image.provider_images.first
ri.provider_image_key = obj[:build].finished_image
ri.status = ProviderImage::STATE_COMPLETE
ri.save!
# FIXME: Might be cleaner to do this in an active record observer instead.
@log.debug "========================================"
@log.debug "calling condor classad sync."
@log.debug "========================================"
kick_condor
- end
- @log.debug "========================================"
- @log.debug "database updated!"
- @log.debug "========================================"
- end
- private
- def poll()
- loop do
check_for_queued
@activebuilds.delete_if do |ab|
cur_status = @console.check_status(ab[:build])
update_agg(ab, cur_status) unless cur_status.eql?(ab[:status])
@log.debug "========================================"
@log.debug "Status for target #{ab[:build].target}: #{cur_status}"
@log.debug "Builds in array: " + check_build_num.to_s
@log.debug "========================================"
Image::INACTIVE_STATES.include?(cur_status)
end
sleep @timeout
end
- end
- def update_build_list(ab, target)
- @activebuilds<<
{ :ar_id => target.template.id,
:build => ab,
:status => target.status,
:build_id => ab.object_id.to_s
}
- end
-end
-begin
- BUILDER_PID_FILE = "#{builder_pid_dir}/image_builder_service.pid"
- FileUtils.mkdir_p File.dirname(BUILDER_PID_FILE)
- open(BUILDER_PID_FILE, "w") {|f| f.write(Process.pid) }
- File.chmod(0644, BUILDER_PID_FILE)
- ImageBuilderService.new(logger, timeout)
-rescue => e
- logger.error "#{e.backtrace.shift}: #{e.message}"
- e.backtrace.each do |step|
- logger.error "\tfrom #{step}"
- end
-end