Colocate a builder-worker with the service
This is an intermediate step before builders are completely broken out into their own hosts and nodes. As part of this work we split up the logging configs for the two daemons which allows them to be colocated and write to different log files on the same host. Co-Authored-By: Clark Boylan <clark.boylan@gmail.com> Change-Id: I990e96dde352fb7d01cc4b89d0f4f02de166b943
This commit is contained in:
parent
ec77bbc38b
commit
bb12dbb646
162
files/nodepool-builder.init
Executable file
162
files/nodepool-builder.init
Executable file
@ -0,0 +1,162 @@
|
||||
#! /bin/sh
|
||||
### BEGIN INIT INFO
|
||||
# Provides: nodepool-builder
|
||||
# Required-Start: $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs $syslog
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Nodepool-builder
|
||||
# Description: Trunk gating system
|
||||
### END INIT INFO
|
||||
|
||||
# Do NOT "set -e"
|
||||
|
||||
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
||||
DESC="Nodepool Builder Worker"
|
||||
NAME=nodepool-builder
|
||||
DAEMON=/usr/local/bin/nodepool-builder
|
||||
PIDFILE=/var/run/$NAME/$NAME.pid
|
||||
SCRIPTNAME=/etc/init.d/$NAME
|
||||
USER=nodepool
|
||||
|
||||
# Exit if the package is not installed
|
||||
[ -x "$DAEMON" ] || exit 0
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||
|
||||
# Load the VERBOSE setting and other rcS variables
|
||||
. /lib/init/vars.sh
|
||||
|
||||
# Define LSB log_* functions.
|
||||
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
#
|
||||
# Function that starts the daemon/service
|
||||
#
|
||||
do_start()
|
||||
{
|
||||
# Return
|
||||
# 0 if daemon has been started
|
||||
# 1 if daemon was already running
|
||||
# 2 if daemon could not be started
|
||||
|
||||
mkdir -p /var/run/$NAME
|
||||
chown $USER /var/run/$NAME
|
||||
ulimit -n 8192
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE -c $USER --exec $DAEMON --test > /dev/null \
|
||||
|| return 1
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE -c $USER --exec $DAEMON -- \
|
||||
$DAEMON_ARGS \
|
||||
|| return 2
|
||||
# Add code here, if necessary, that waits for the process to be ready
|
||||
# to handle requests from services started subsequently which depend
|
||||
# on this one. As a last resort, sleep for some time.
|
||||
}
|
||||
|
||||
#
|
||||
# Function that stops the daemon/service
|
||||
#
|
||||
do_stop()
|
||||
{
|
||||
# Return
|
||||
# 0 if daemon has been stopped
|
||||
# 1 if daemon was already stopped
|
||||
# 2 if daemon could not be stopped
|
||||
# other if a failure occurred
|
||||
start-stop-daemon --stop --signal 9 --pidfile $PIDFILE
|
||||
RETVAL="$?"
|
||||
[ "$RETVAL" = 2 ] && return 2
|
||||
rm -f /var/run/$NAME/*
|
||||
return "$RETVAL"
|
||||
}
|
||||
|
||||
#
|
||||
# Function that stops the daemon/service
|
||||
#
|
||||
do_graceful_stop()
|
||||
{
|
||||
PID=`cat $PIDFILE`
|
||||
kill -INT $PID
|
||||
# Old nodepoold used USR1
|
||||
# New nodepoold ignores it while INT is being handled
|
||||
kill -USR1 $PID
|
||||
|
||||
# wait until really stopped
|
||||
if [ -n "${PID:-}" ]; then
|
||||
i=0
|
||||
while kill -0 "${PID:-}" 2> /dev/null; do
|
||||
if [ $i -eq '0' ]; then
|
||||
echo -n " ... waiting "
|
||||
else
|
||||
echo -n "."
|
||||
fi
|
||||
i=$(($i+1))
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
|
||||
rm -f /var/run/$NAME/*
|
||||
}
|
||||
|
||||
#
|
||||
# Function that sends a SIGHUP to the daemon/service
|
||||
#
|
||||
do_reload() {
|
||||
#
|
||||
# If the daemon can reload its configuration without
|
||||
# restarting (for example, when it is sent a SIGHUP),
|
||||
# then implement that here.
|
||||
#
|
||||
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
|
||||
return 0
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||
do_start
|
||||
case "$?" in
|
||||
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
stop)
|
||||
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
status)
|
||||
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||
;;
|
||||
reload|force-reload)
|
||||
#
|
||||
# If do_reload() is not implemented then leave this commented out
|
||||
# and leave 'force-reload' as an alias for 'restart'.
|
||||
#
|
||||
log_daemon_msg "Reloading $DESC" "$NAME"
|
||||
do_reload
|
||||
log_end_msg $?
|
||||
;;
|
||||
restart)
|
||||
#
|
||||
# If the "reload" option is implemented then remove the
|
||||
# 'force-reload' alias
|
||||
#
|
||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||
do_graceful_stop
|
||||
do_start
|
||||
;;
|
||||
*)
|
||||
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
||||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
:
|
59
manifests/builder.pp
Normal file
59
manifests/builder.pp
Normal file
@ -0,0 +1,59 @@
|
||||
# Copyright 2015 2015 IBM
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# == Class: nodepool::builder
|
||||
#
|
||||
class nodepool::builder(
|
||||
$statsd_host = undef,
|
||||
$image_log_document_root = '/var/log/nodepool/image',
|
||||
$builder_logging_conf_template = 'nodepool/nodepool-builder.logging.conf.erb',
|
||||
$environment = {},
|
||||
) {
|
||||
|
||||
file { '/etc/init.d/nodepool-builder':
|
||||
ensure => present,
|
||||
mode => '0555',
|
||||
owner => 'root',
|
||||
group => 'root',
|
||||
source => 'puppet:///modules/nodepool/nodepool-builder.init',
|
||||
}
|
||||
|
||||
file { '/etc/default/nodepool-builder':
|
||||
ensure => present,
|
||||
content => template('nodepool/nodepool-builder.default.erb'),
|
||||
mode => '0444',
|
||||
owner => 'root',
|
||||
group => 'root',
|
||||
}
|
||||
|
||||
file { '/etc/nodepool/builder-logging.conf':
|
||||
ensure => present,
|
||||
mode => '0444',
|
||||
owner => 'root',
|
||||
group => 'root',
|
||||
content => template($builder_logging_conf_template),
|
||||
}
|
||||
|
||||
service { 'nodepool-builder':
|
||||
name => 'nodepool-builder',
|
||||
enable => true,
|
||||
hasrestart => true,
|
||||
require => [
|
||||
File['/etc/init.d/nodepool-builder'],
|
||||
File['/etc/default/nodepool-builder'],
|
||||
File['/etc/nodepool/builder-logging.conf'],
|
||||
],
|
||||
}
|
||||
|
||||
}
|
@ -33,6 +33,7 @@ class nodepool (
|
||||
$scripts_dir = undef,
|
||||
$elements_dir = undef,
|
||||
$logging_conf_template = 'nodepool/nodepool.logging.conf.erb',
|
||||
$builder_logging_conf_template = 'nodepool/nodepool-builder.logging.conf.erb',
|
||||
$jenkins_masters = [],
|
||||
) {
|
||||
|
||||
@ -316,4 +317,10 @@ class nodepool (
|
||||
mode => '0440',
|
||||
}
|
||||
|
||||
class { '::nodepool::builder':
|
||||
statsd_host => $statsd_host,
|
||||
environment => $environment,
|
||||
builder_logging_conf_template => $builder_logging_conf_template,
|
||||
}
|
||||
|
||||
}
|
||||
|
8
templates/nodepool-builder.default.erb
Normal file
8
templates/nodepool-builder.default.erb
Normal file
@ -0,0 +1,8 @@
|
||||
<% if @statsd_host != nil && @statsd_host != "" -%>
|
||||
export STATSD_HOST=<%= @statsd_host %>
|
||||
export STATSD_PORT=8125
|
||||
<% end -%>
|
||||
<% @environment.keys.sort.each do |key| -%>
|
||||
export <%= key %>='<%= @environment[key] %>'
|
||||
<% end -%>
|
||||
DAEMON_ARGS="-c /etc/nodepool/nodepool.yaml -l /etc/nodepool/builder-logging.conf"
|
56
templates/nodepool-builder.logging.conf.erb
Normal file
56
templates/nodepool-builder.logging.conf.erb
Normal file
@ -0,0 +1,56 @@
|
||||
[loggers]
|
||||
keys=root,nodepool,requests,image
|
||||
|
||||
[handlers]
|
||||
keys=console,debug,normal,image
|
||||
|
||||
[formatters]
|
||||
keys=simple
|
||||
|
||||
[logger_root]
|
||||
level=WARNING
|
||||
handlers=console
|
||||
|
||||
[logger_requests]
|
||||
level=WARNING
|
||||
handlers=debug,normal
|
||||
qualname=requests
|
||||
|
||||
[logger_nodepool]
|
||||
level=DEBUG
|
||||
handlers=debug,normal
|
||||
qualname=nodepool
|
||||
|
||||
[logger_image]
|
||||
level=INFO
|
||||
handlers=image
|
||||
qualname=nodepool.image.build
|
||||
propagate=0
|
||||
|
||||
[handler_console]
|
||||
level=WARNING
|
||||
class=StreamHandler
|
||||
formatter=simple
|
||||
args=(sys.stdout,)
|
||||
|
||||
[handler_debug]
|
||||
level=DEBUG
|
||||
class=logging.handlers.TimedRotatingFileHandler
|
||||
formatter=simple
|
||||
args=('/var/log/nodepool/builder-debug.log', 'H', 8, 30,)
|
||||
|
||||
[handler_normal]
|
||||
level=INFO
|
||||
class=logging.handlers.TimedRotatingFileHandler
|
||||
formatter=simple
|
||||
args=('/var/log/nodepool/nodepool-builder.log', 'H', 8, 30,)
|
||||
|
||||
[handler_image]
|
||||
level=INFO
|
||||
class=logging.handlers.TimedRotatingFileHandler
|
||||
formatter=simple
|
||||
args=('<%= @image_log_document_root %>/image.log', 'H', 8, 30,)
|
||||
|
||||
[formatter_simple]
|
||||
format=%(asctime)s %(levelname)s %(name)s: %(message)s
|
||||
datefmt=
|
@ -5,4 +5,4 @@ export STATSD_PORT=8125
|
||||
<% @environment.keys.sort.each do |key| -%>
|
||||
export <%= key %>='<%= @environment[key] %>'
|
||||
<% end -%>
|
||||
DAEMON_ARGS="-c /etc/nodepool/nodepool.yaml -l /etc/nodepool/logging.conf"
|
||||
DAEMON_ARGS="--no-builder -c /etc/nodepool/nodepool.yaml -l /etc/nodepool/logging.conf"
|
||||
|
@ -1,8 +1,8 @@
|
||||
[loggers]
|
||||
keys=root,nodepool,requests,image
|
||||
keys=root,nodepool,requests
|
||||
|
||||
[handlers]
|
||||
keys=console,debug,normal,image
|
||||
keys=console,debug,normal
|
||||
|
||||
[formatters]
|
||||
keys=simple
|
||||
@ -21,12 +21,6 @@ level=DEBUG
|
||||
handlers=debug,normal
|
||||
qualname=nodepool
|
||||
|
||||
[logger_image]
|
||||
level=INFO
|
||||
handlers=image
|
||||
qualname=nodepool.image.build
|
||||
propagate=0
|
||||
|
||||
[handler_console]
|
||||
level=WARNING
|
||||
class=StreamHandler
|
||||
@ -45,12 +39,6 @@ class=logging.handlers.TimedRotatingFileHandler
|
||||
formatter=simple
|
||||
args=('/var/log/nodepool/nodepool.log', 'H', 8, 30,)
|
||||
|
||||
[handler_image]
|
||||
level=INFO
|
||||
class=logging.handlers.TimedRotatingFileHandler
|
||||
formatter=simple
|
||||
args=('<%= @image_log_document_root %>/image.log', 'H', 8, 30,)
|
||||
|
||||
[formatter_simple]
|
||||
format=%(asctime)s %(levelname)s %(name)s: %(message)s
|
||||
datefmt=
|
||||
|
Loading…
x
Reference in New Issue
Block a user