diff --git a/defaults/main.yaml b/defaults/main.yaml index 6341060..d967a97 100644 --- a/defaults/main.yaml +++ b/defaults/main.yaml @@ -59,14 +59,8 @@ zuul_install_method: git zuul_pip_version: # tasks/service.yaml -zuul_file_zuul_merger_service_dest: /etc/systemd/system/zuul-merger.service zuul_file_zuul_merger_service_group: root -zuul_file_zuul_merger_service_mode: "0644" zuul_file_zuul_merger_service_owner: root -zuul_file_zuul_merger_service_src: ../../files/etc/systemd/system/zuul-merger.service -zuul_file_zuul_server_service_dest: /etc/systemd/system/zuul-server.service zuul_file_zuul_server_service_group: root -zuul_file_zuul_server_service_mode: "0644" zuul_file_zuul_server_service_owner: root -zuul_file_zuul_server_service_src: ../../files/etc/systemd/system/zuul-server.service diff --git a/files/etc/init.d/zuul-merger b/files/etc/init.d/zuul-merger new file mode 100644 index 0000000..1312e07 --- /dev/null +++ b/files/etc/init.d/zuul-merger @@ -0,0 +1,140 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: zuul +# 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:/usr/local/bin +DESC="Zuul Merger" +NAME=zuul-merger +DAEMON=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 + 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() +{ + # 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 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 $DAEMON + 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/etc/init.d/zuul-server b/files/etc/init.d/zuul-server new file mode 100644 index 0000000..9a64967 --- /dev/null +++ b/files/etc/init.d/zuul-server @@ -0,0 +1,162 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: zuul +# 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 +### END INIT INFO + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin +DESC="Zuul" +NAME=zuul +DAEMON=zuul-server +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 + 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() +{ + # 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 -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 $DAEMON + 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 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|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/tasks/service.yaml b/tasks/service.yaml index 8af75b3..926a1e4 100644 --- a/tasks/service.yaml +++ b/tasks/service.yaml @@ -12,5 +12,63 @@ # License for the specific language governing permissions and limitations # under the License. --- +- name: Define zuul_file_zuul_merger_service_dest. + set_fact: + zuul_file_zuul_merger_service_dest: "{{ __zuul_file_zuul_merger_service_dest }}" + when: zuul_file_zuul_merger_service_dest is not defined + +- name: Define zuul_file_zuul_merger_service_mode. + set_fact: + zuul_file_zuul_merger_service_mode: "{{ __zuul_file_zuul_merger_service_mode }}" + when: zuul_file_zuul_merger_service_mode is not defined + +- name: Define zuul_file_zuul_merger_service_src. + set_fact: + zuul_file_zuul_merger_service_src: "{{ __zuul_file_zuul_merger_service_src }}" + when: zuul_file_zuul_merger_service_src is not defined + +- name: Define zuul_file_zuul_server_service_dest. + set_fact: + zuul_file_zuul_server_service_dest: "{{ __zuul_file_zuul_server_service_dest }}" + when: zuul_file_zuul_server_service_dest is not defined + +- name: Define zuul_file_zuul_server_service_mode. + set_fact: + zuul_file_zuul_server_service_mode: "{{ __zuul_file_zuul_server_service_mode }}" + when: zuul_file_zuul_server_service_mode is not defined + +- name: Define zuul_file_zuul_server_service_src. + set_fact: + zuul_file_zuul_server_service_src: "{{ __zuul_file_zuul_server_service_src }}" + when: zuul_file_zuul_server_service_src is not defined + +- name: Copy zuul-merger service into place. + copy: + dest: "{{ zuul_file_zuul_merger_service_dest }}" + group: "{{ zuul_file_zuul_merger_service_group }}" + mode: "{{ zuul_file_zuul_merger_service_mode }}" + owner: "{{ zuul_file_zuul_merger_service_owner }}" + src: "{{ zuul_file_zuul_merger_service_src }}" + +- name: Copy zuul-server service into place. + copy: + dest: "{{ zuul_file_zuul_server_service_dest }}" + group: "{{ zuul_file_zuul_server_service_group }}" + mode: "{{ zuul_file_zuul_server_service_mode }}" + owner: "{{ zuul_file_zuul_server_service_owner }}" + src: "{{ zuul_file_zuul_server_service_src }}" + - include: service/redhat.yaml when: ansible_os_family == 'RedHat' + +- name: Enable zuul-merger service. + service: + enabled: yes + name: zuul-merger + state: started + +- name: Enable zuul-server service. + service: + enabled: yes + name: zuul-server + state: started diff --git a/tasks/service/redhat.yaml b/tasks/service/redhat.yaml index 06ed918..989e7c7 100644 --- a/tasks/service/redhat.yaml +++ b/tasks/service/redhat.yaml @@ -12,35 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. --- -- name: Copy systemd file into place for zuul-merger. - copy: - dest: "{{ zuul_file_zuul_merger_service_dest }}" - group: "{{ zuul_file_zuul_merger_service_group }}" - mode: "{{ zuul_file_zuul_merger_service_mode }}" - owner: "{{ zuul_file_zuul_merger_service_owner }}" - src: "{{ zuul_file_zuul_merger_service_src }}" - -- name: Copy systemd file into place for zuul-server. - copy: - dest: "{{ zuul_file_zuul_server_service_dest }}" - group: "{{ zuul_file_zuul_server_service_group }}" - mode: "{{ zuul_file_zuul_server_service_mode }}" - owner: "{{ zuul_file_zuul_server_service_owner }}" - src: "{{ zuul_file_zuul_server_service_src }}" - - name: Copy sysconfig file into place. copy: dest: /etc/sysconfig/zuul src: ../../files/zuul.sysconfig - -- name: Enable zuul-merger service. - service: - enabled: yes - name: zuul-merger - state: started - -- name: Enable zuul-server service. - service: - enabled: yes - name: zuul-server - state: started diff --git a/tests/test.yaml b/tests/test.yaml index a362cee..1bfd7aa 100644 --- a/tests/test.yaml +++ b/tests/test.yaml @@ -85,30 +85,66 @@ register: result failed_when: result.stdout != "0" + - name: Register /etc/init.d/zuul-merger + stat: + path: /etc/init.d/zuul-merger + register: debian_zuul_merger_service_stat + when: ansible_os_family == 'Debian' + + - name: Assert debian_zuul_merger_service_stat tests. + assert: + that: + - debian_zuul_merger_service_stat.stat.exists + - debian_zuul_merger_service_stat.stat.isreg + - debian_zuul_merger_service_stat.stat.pw_name == 'root' + - debian_zuul_merger_service_stat.stat.gr_name == 'root' + - debian_zuul_merger_service_stat.stat.mode == '0755' + when: ansible_os_family == 'Debian' + + - name: Register /etc/init.d/zuul-server + stat: + path: /etc/init.d/zuul-server + register: debian_zuul_server_service_stat + when: ansible_os_family == 'Debian' + + - name: Assert debian_zuul_server_service_stat tests. + assert: + that: + - debian_zuul_server_service_stat.stat.exists + - debian_zuul_server_service_stat.stat.isreg + - debian_zuul_server_service_stat.stat.pw_name == 'root' + - debian_zuul_server_service_stat.stat.gr_name == 'root' + - debian_zuul_server_service_stat.stat.mode == '0755' + when: ansible_os_family == 'Debian' + - name: Register /etc/systemd/system/zuul-merger.service stat: path: /etc/systemd/system/zuul-merger.service - register: zuul_merger_service_stat + register: redhat_zuul_merger_service_stat + when: ansible_os_family == 'RedHat' - - name: Assert zuul_merger_service_stat tests. + - name: Assert redhat_zuul_merger_service_stat tests. assert: that: - - zuul_merger_service_stat.stat.exists - - zuul_merger_service_stat.stat.isreg - - zuul_merger_service_stat.stat.pw_name == 'root' - - zuul_merger_service_stat.stat.gr_name == 'root' - - zuul_merger_service_stat.stat.mode == '0644' + - redhat_zuul_merger_service_stat.stat.exists + - redhat_zuul_merger_service_stat.stat.isreg + - redhat_zuul_merger_service_stat.stat.pw_name == 'root' + - redhat_zuul_merger_service_stat.stat.gr_name == 'root' + - redhat_zuul_merger_service_stat.stat.mode == '0644' + when: ansible_os_family == 'RedHat' - name: Register /etc/systemd/system/zuul-server.service stat: path: /etc/systemd/system/zuul-server.service - register: zuul_server_service_stat + register: redhat_zuul_server_service_stat + when: ansible_os_family == 'RedHat' - - name: Assert zuul_server_service_stat tests. + - name: Assert redhat_zuul_server_service_stat tests. assert: that: - - zuul_server_service_stat.stat.exists - - zuul_server_service_stat.stat.isreg - - zuul_server_service_stat.stat.pw_name == 'root' - - zuul_server_service_stat.stat.gr_name == 'root' - - zuul_server_service_stat.stat.mode == '0644' + - redhat_zuul_server_service_stat.stat.exists + - redhat_zuul_server_service_stat.stat.isreg + - redhat_zuul_server_service_stat.stat.pw_name == 'root' + - redhat_zuul_server_service_stat.stat.gr_name == 'root' + - redhat_zuul_server_service_stat.stat.mode == '0644' + when: ansible_os_family == 'RedHat' diff --git a/vars/Debian.yaml b/vars/Debian.yaml index a869f7c..9af6f82 100644 --- a/vars/Debian.yaml +++ b/vars/Debian.yaml @@ -16,3 +16,11 @@ __zuul_build_depends: - git - python-dev - python-pip + +__zuul_file_zuul_merger_service_dest: /etc/init.d/zuul-merger +__zuul_file_zuul_merger_service_mode: "0755" +__zuul_file_zuul_merger_service_src: etc/init.d/zuul-merger + +__zuul_file_zuul_server_service_dest: /etc/init.d/zuul-server +__zuul_file_zuul_server_service_mode: "0755" +__zuul_file_zuul_server_service_src: etc/init.d/zuul-server diff --git a/vars/RedHat.yaml b/vars/RedHat.yaml index c44b73b..31cc0ed 100644 --- a/vars/RedHat.yaml +++ b/vars/RedHat.yaml @@ -18,3 +18,11 @@ __zuul_build_depends: - git - python-devel - python-pip + +__zuul_file_zuul_merger_service_dest: /etc/systemd/system/zuul-merger.service +__zuul_file_zuul_merger_service_mode: "0644" +__zuul_file_zuul_merger_service_src: etc/systemd/system/zuul-merger.service + +__zuul_file_zuul_server_service_dest: /etc/systemd/system/zuul-server.service +__zuul_file_zuul_server_service_mode: "0644" +__zuul_file_zuul_server_service_src: etc/systemd/system/zuul-server.service