From 701acbfdbf07f9faecf73fde765276d935a7c876 Mon Sep 17 00:00:00 2001 From: Paul Belanger Date: Thu, 7 Dec 2017 15:29:41 -0500 Subject: [PATCH] Update merger / scheduler init script for zuulv3 Zuulv3 now suport command socket to stop both merger and schedulers, add logic to install new init scripts for them depending on zuulv2 or zuulv3. Change-Id: Iecc8c03896c145d29e42e6be6194d7db893c8515 Signed-off-by: Paul Belanger --- files/zuul-mergerv3.init | 134 ++++++++++++++++++++++++++++++ files/zuul-schedulerv3.init | 159 ++++++++++++++++++++++++++++++++++++ manifests/init.pp | 8 +- 3 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 files/zuul-mergerv3.init create mode 100644 files/zuul-schedulerv3.init diff --git a/files/zuul-mergerv3.init b/files/zuul-mergerv3.init new file mode 100644 index 0000000..63c8917 --- /dev/null +++ b/files/zuul-mergerv3.init @@ -0,0 +1,134 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: zuul-merger +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Zuul +# Description: Trunk gating system merger +### 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 +DESC="Zuul Merger" +NAME=zuul-merger +DAEMON=/usr/local/bin/zuul-merger +PIDFILE=/var/run/$NAME/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME +USER=zuul + +# 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 + # 3 if pid file already exist + + mkdir -p /var/run/$NAME + chown $USER /var/run/$NAME + ulimit -n 8192 + if [ -f $PIDFILE ]; then + return 3 + fi + 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() +{ + $DAEMON stop + rm -f /var/run/$NAME/* + return 0 +} + +# +# 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 zuul-merger + 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 ;; + 3) echo "Pidfile at $PIDFILE already exists, run service zuul-merger stop to clean up." + 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_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 + +: diff --git a/files/zuul-schedulerv3.init b/files/zuul-schedulerv3.init new file mode 100644 index 0000000..0d72eaa --- /dev/null +++ b/files/zuul-schedulerv3.init @@ -0,0 +1,159 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: zuul-scheduler +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Zuul scheduler +# 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 +DESC="Zuul" +NAME=zuul-scheduler +DAEMON=/usr/local/bin/zuul-scheduler +PIDFILE=/var/run/$NAME/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME +USER=zuul + +# 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 + # 3 if pid file exits already + + mkdir -p /var/run/$NAME + chown $USER /var/run/$NAME + ulimit -n 8192 + if [ -f $PIDFILE ]; then + return 3 + fi + 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() +{ + $DAEMON stop + rm -f /var/run/$NAME/* + return 0 +} + +# +# Function that stops the daemon/service +# +do_graceful_stop() +{ + PID=`cat $PIDFILE` + 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 zuul-scheduler + 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 ;; + 3) echo "Pidfile at $PIDFILE already exists, run service zuul-scheduler stop to clean up." ;; + 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 + +: diff --git a/manifests/init.pp b/manifests/init.pp index fba61fc..e4902b8 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -276,8 +276,12 @@ class zuul ( if $zuulv3 { $zuul_conf_content = template('zuul/zuulv3.conf.erb') + $zuul_merger_source = 'puppet:///modules/zuul/zuul-mergerv3.init' + $zuul_scheduler_source = 'puppet:///modules/zuul/zuul-schedulerv3.init' } else { $zuul_conf_content = template('zuul/zuul.conf.erb') + $zuul_merger_source = 'puppet:///modules/zuul/zuul-merger.init' + $zuul_scheduler_source = 'puppet:///modules/zuul/zuul-scheduler.init' } # TODO: We should put in notify either Service['zuul'] or Exec['zuul-reload'] @@ -507,7 +511,7 @@ class zuul ( owner => 'root', group => 'root', mode => '0555', - source => 'puppet:///modules/zuul/zuul-scheduler.init', + source => $zuul_scheduler_source, notify => Class['zuul::systemd_reload'], } @@ -516,7 +520,7 @@ class zuul ( owner => 'root', group => 'root', mode => '0555', - source => 'puppet:///modules/zuul/zuul-merger.init', + source => $zuul_merger_source, notify => Class['zuul::systemd_reload'], }