--- 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