[Ovirt-devel] [PATCH] Set up ovirt-agent so it starts as a daemon
Ian Main
imain at redhat.com
Tue Jul 7 20:29:45 UTC 2009
This sets up ovirt-agent to start as a daemon along with dbomatic,
taskomatic etc. While this is not ready for prime time I think it
should be ok as you still require a valid, authenticated, connection
to qpidd to access it.
This update adds the conf/ovirt-agent start/stop script.
Signed-off-by: Ian Main <imain at redhat.com>
---
conf/ovirt-agent | 52 +++++++++++++++++++++++
installer/modules/ovirt/manifests/ovirt.pp | 6 +++
ovirt-server.spec.in | 5 ++
src/ovirt-agent/ovirt-agent.rb | 63 +++++++++++++++++++++-------
4 files changed, 110 insertions(+), 16 deletions(-)
create mode 100755 conf/ovirt-agent
diff --git a/conf/ovirt-agent b/conf/ovirt-agent
new file mode 100755
index 0000000..1067a24
--- /dev/null
+++ b/conf/ovirt-agent
@@ -0,0 +1,52 @@
+#!/bin/bash
+#
+#
+# ovirt-agent startup script for ovirt-agent
+#
+# chkconfig: - 97 03
+# description: ovirt-agent provides the QMF API for ovirt VM manager.
+#
+
+[ -r /etc/sysconfig/ovirt-rails ] && . /etc/sysconfig/ovirt-rails
+
+export RAILS_ENV="${RAILS_ENV:-production}"
+
+DAEMON=/usr/share/ovirt-server/ovirt-agent/ovirt-agent.rb
+
+. /etc/init.d/functions
+
+start() {
+ echo -n "Starting ovirt-agent: "
+ daemon $DAEMON
+ RETVAL=$?
+ echo
+}
+
+stop() {
+ echo -n "Shutting down ovirt-agent: "
+ killproc ovirt-agent.rb
+ RETVAL=$?
+ echo
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ status)
+ status $DAEMON
+ RETVAL=$?
+ ;;
+ *)
+ echo "Usage: ovirt-agent {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+exit $RETVAL
diff --git a/installer/modules/ovirt/manifests/ovirt.pp b/installer/modules/ovirt/manifests/ovirt.pp
index d953ebe..636cd6e 100644
--- a/installer/modules/ovirt/manifests/ovirt.pp
+++ b/installer/modules/ovirt/manifests/ovirt.pp
@@ -172,6 +172,12 @@ class ovirt::setup {
ensure => running
}
+ service {"ovirt-agent" :
+ enable => true,
+ require => [Package[ovirt-server],Single_Exec[db_migrate]],
+ ensure => running
+ }
+
service {"qpidd" :
enable => true,
ensure => running,
diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in
index ad9dd2c..a315381 100644
--- a/ovirt-server.spec.in
+++ b/ovirt-server.spec.in
@@ -103,6 +103,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log
%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-host-browser %{buildroot}%{_initrddir}
%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-db-omatic %{buildroot}%{_initrddir}
+%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-agent %{buildroot}%{_initrddir}
%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-host-collect %{buildroot}%{_initrddir}
%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-mongrel-rails %{buildroot}%{_initrddir}
%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-mongrel-rails.sysconf %{buildroot}%{_sysconfdir}/sysconfig/ovirt-mongrel-rails
@@ -183,6 +184,7 @@ fi
# check this by seeing if each daemon is already installed
%daemon_chkconfig_post -d ovirt-host-browser
%daemon_chkconfig_post -d ovirt-db-omatic
+%daemon_chkconfig_post -d ovirt-agent
%daemon_chkconfig_post -d ovirt-host-collect
%daemon_chkconfig_post -d ovirt-mongrel-rails
%daemon_chkconfig_post -d ovirt-taskomatic
@@ -192,12 +194,14 @@ fi
if [ "$1" = 0 ] ; then
/sbin/service ovirt-host-browser stop > /dev/null 2>&1
/sbin/service ovirt-db-omatic stop > /dev/null 2>&1
+ /sbin/service ovirt-agent stop > /dev/null 2>&1
/sbin/service ovirt-host-collect stop > /dev/null 2>&1
/sbin/service ovirt-mongrel-rails stop > /dev/null 2>&1
/sbin/service ovirt-taskomatic stop > /dev/null 2>&1
/sbin/service ovirt-vnc-proxy stop > /dev/null 2>&1
/sbin/chkconfig --del ovirt-host-browser
/sbin/chkconfig --del ovirt-db-omatic
+ /sbin/chkconfig --del ovirt-agent
/sbin/chkconfig --del ovirt-host-collect
/sbin/chkconfig --del ovirt-mongrel-rails
/sbin/chkconfig --del ovirt-taskomatic
@@ -212,6 +216,7 @@ fi
%{_bindir}/ovirt-vm2node
%{_initrddir}/ovirt-host-browser
%{_initrddir}/ovirt-db-omatic
+%{_initrddir}/ovirt-agent
%{_initrddir}/ovirt-host-collect
%{_initrddir}/ovirt-mongrel-rails
%{_initrddir}/ovirt-taskomatic
diff --git a/src/ovirt-agent/ovirt-agent.rb b/src/ovirt-agent/ovirt-agent.rb
index ae55e3f..62834b0 100755
--- a/src/ovirt-agent/ovirt-agent.rb
+++ b/src/ovirt-agent/ovirt-agent.rb
@@ -23,6 +23,12 @@ require 'ovirt/controllers/task_controller'
include Daemonize
+class Logger
+ def format_message(severity, timestamp, progname, msg)
+ "#{severity} #{timestamp} (#{$$}) #{msg}\n"
+ end
+end
+
# Monkey patch
class Qmf::SchemaObjectClass
attr_reader :id
@@ -80,16 +86,47 @@ class OvirtAgent < Qmf::AgentHandler
include Ovirt::SchemaParser
- def initialize(host)
+ $logfile = '/var/log/ovirt-server/ovirt-agent.log'
- ensure_credentials
+ def initialize()
- # FIXME: Use RAILS_DEFAULT_LOGGER
- @logger = Logger.new(STDERR)
- @logger.level = Logger::DEBUG
+ ensure_credentials
server, port = nil
sleepy = 5
+
+ do_daemon = true
+
+ opts = OptionParser.new do |opts|
+ opts.on("-h", "--help", "Print help message") do
+ puts opts
+ exit
+ end
+ opts.on("-n", "--nodaemon", "Run interactively (useful for debugging)") do |n|
+ do_daemon = false
+ end
+ end
+ begin
+ opts.parse!(ARGV)
+ rescue OptionParser::InvalidOption
+ puts opts
+ exit
+ end
+
+ if do_daemon
+ # This gets around a problem with paths for the database stuff.
+ # Normally daemonize would chdir to / but the paths for the database
+ # stuff are relative so it breaks it.. It's either this or rearrange
+ # things so the db stuff is included after daemonizing.
+ pwd = Dir.pwd
+ daemonize
+ Dir.chdir(pwd)
+ @logger = Logger.new($logfile)
+ else
+ @logger = Logger.new(STDERR)
+ end
+ @logger.level = Logger::DEBUG
+
while true do
server, port = get_srv('qpidd', 'tcp')
break if server
@@ -99,12 +136,12 @@ class OvirtAgent < Qmf::AgentHandler
end
@settings = Qmf::ConnectionSettings.new
- #@settings.server = server
+ @settings.host = server
+ # FIXME: Bug in swig!
#@settings.port = port
- #@settings.mechanism = 'GSSAPI'
+ @settings.mechanism = 'GSSAPI'
- @settings.host = host
- @logger.info "Connect to broker on #{@settings.host}"
+ @logger.info "Connecting to broker on #{@settings.host}.."
@connection = Qmf::Connection.new(@settings)
@agent = Qmf::Agent.new(self)
@@ -243,11 +280,5 @@ class OvirtAgent < Qmf::AgentHandler
end
end
-if ARGV.size == 1
- broker = ARGV[0]
-else
- broker = "localhost"
-end
-ovirt_agent = OvirtAgent.new(broker)
-
+ovirt_agent = OvirtAgent.new
ovirt_agent.mainloop
--
1.6.0.6
More information about the ovirt-devel
mailing list