celery init.d script instead upstart

This commit is contained in:
Nikolay Markov 2012-07-17 14:51:58 +04:00
parent 6873fcffcd
commit 5819a3bcea
5 changed files with 74 additions and 44 deletions

View File

@ -24,26 +24,22 @@ define :celery_instance, :virtualenv => false do
celery_options += " -B" if params[:beat]
celery_options += ' ' + params[:extra_options] if params[:extra_options]
template "/etc/init/#{name}.conf" do
source "celery-upstart.conf.erb"
cookbook "celery"
owner "root"
group "root"
mode 0644
variables({
:params => params,
:celery_options => celery_options
})
notifies :restart, "service[#{name}]"
service "nailgun-jobserver" do
supports :restart => true, :start => true, :stop => true, :reload => true
action :nothing
end
service name do
provider Chef::Provider::Service::Upstart
enabled true
running true
supports :restart => true, :reload => true, :status => true
action [:enable, :start]
template "/etc/init.d/#{name}" do
source "celery-init.d.conf.erb"
cookbook "celery"
owner "root"
group "root"
mode 0755
variables({
:params => params,
:celery_options => celery_options
})
notifies :enable, "service[#{name}]"
notifies :start, "service[#{name}]"
end
end

View File

@ -0,0 +1,46 @@
start() {
echo "Starting nailgun-jobserver..."
exec start-stop-daemon --start --pidfile <%= @params[:pid_file] %> --chuid <%= @params[:user] %> --exec <%= @params[:command] %> \
-- <%= @params[:command_args] %> start <%= @params[:workers] || 1 %> <%= @celery_options %>
}
stop() {
echo "Stopping nailgun-jobserver..."
exec start-stop-daemon --stop --pidfile <%= @params[:pid_file] %> --chuid <%= @params[:user] %> --exec <%= @params[:command] %> --signa$
}
status() {
celery_pid=`pgrep -u <%= @params[:user] %> -f <%= @params[:command] %>`
if [[ -z $celery_pid ]] ; then
echo "nailgun-jobserver: not running."
else
echo "nailgun-jobserver: running."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/nailgun-jobserver {start|stop|reload|force-reload|restart|status}"
exit 1
esac
exit 0

View File

@ -1,18 +0,0 @@
# This file is auto generated by chef
# Do no edit in place
description "Celery job server"
author "Maxim Kulkin <mkulkin@mirantis.com>"
start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 20 seconds
kill timeout 20
script
exec su -c "cd <%= @params[:cwd] %>; <%= @params[:command] || 'celeryd-multi' %> start <%= @params[:workers] || 1 %> <%= @celery_options %>" <%= @params[:user] %>
end script
pre-stop script
exec su -c "cd <%= @params[:cwd] %>; <%= @params[:command] || 'celeryd-multi' %> stop <%= @params[:workers] || 1 %> <%= @params[:workers] %> <%= @celery_options %>" <%= @params[:user] %>
end script
respawn

View File

@ -127,11 +127,14 @@ end
redis_instance 'nailgun'
celery_instance 'nailgun-jobserver' do
command "#{node[:nailgun][:python]} manage.py celeryd_multi start Worker -E"
command "#{node[:nailgun][:python]}"
command_args "#{node[:nailgun][:root]}/manage.py celeryd_multi start Worker -E"
cwd node.nailgun.root
events true
user node.nailgun.user
virtualenv node.nailgun.venv
pid_file "/opt/nailgun/celery.pid"
log_file "/var/log/nailgun/celery.log"
end
web_app 'nailgun' do

View File

@ -42,6 +42,7 @@ class TestNode(TestCase):
logging.info("Starting slave node")
slave.start()
logging.info("Nailgun IP: %s" % admin_ip)
self._load_sample_admin(
host=admin_ip,
user="ubuntu",
@ -66,11 +67,13 @@ class TestNode(TestCase):
))
except ValueError:
logging.info("No clusters found - creating test cluster...")
cluster = json.loads(self.client.post(
cluster = self.client.post(
"http://%s:8000/api/clusters" % admin_ip,
data='{ "name": "MyOwnPrivateCluster", "release": 2 }',
data='{ "name": "MyOwnPrivateCluster", "release": 1 }',
log=True
))
)
print cluster
cluster = json.loads(cluster)
resp = json.loads(self.client.put(
"http://%s:8000/api/clusters/1" % admin_ip,
@ -85,7 +88,7 @@ class TestNode(TestCase):
resp = json.loads(self.client.put(
"http://%s:8000/api/nodes/%s" % (admin_ip, slave_id),
data='{ "new_roles": [2, 3], "redeployment_needed": true }'
data='{ "new_roles": [1, 2], "redeployment_needed": true }'
))
if len(resp["new_roles"]) == 0:
raise ValueError("Failed to assign roles to node")
@ -122,9 +125,9 @@ class TestNode(TestCase):
raise Exception("Recipes failed to execute!")
# check recipes execution order
ret = self.remote.exec_cmd("cat /tmp/chef_success")
if not ret['stdout'].split("\r\n") == ['monitor', 'default', 'compute']:
if [out.strip() for out in ret['stdout']] != ['monitor', 'default', 'compute']:
raise Exception("Recipes executed in a wrong order: %s!" \
% str(ret['stdout'].split("\r\n")))
% str(ret['stdout']))
"""
# check passwords
self.remote.exec_cmd("tar -C %s -xvf /root/nodes.tar.gz" % SAMPLE_REMOTE_PATH)