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:
		
				
					committed by
					
						
						Clark Boylan
					
				
			
			
				
	
			
			
			
						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=
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user