#!/bin/sh # PROVIDE: buildbot-worker # REQUIRE: LOGIN # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable buildbot-worker: # # buildbot_worker_enable (bool): Set to "YES" to enable buildbot-worker. # Default: "NO" # buildbot_worker_flags (flags): Set extra command flags here. See buildbot-worker(8) # Default: Empty (""). # buildbot_worker_user (user): User to run buildbot-worker as. # Default: "buildbot" # buildbot_worker_basedir (path): Location for buildbot-worker base directory # Default: /usr/local/etc/buildbot-worker # buildbot_worker_profiles (str): Define profiles names. Space-delimited. # Default: Empty ("") # # This rc.d script supports multiple "profiles". When profiles are # specified, the non-profile specific parameters become defaults. # # Example: # # buildbot_worker_profiles="foo bar" # # buildbot_worker_foo_enable="YES" # buildbot_worker_foo_basedir="/var/db/buildbot/workers/foo" # buildbot_worker_foo_user="foo" # # buildbot_worker_bar_enable="YES" # buildbot_worker_bar_basedir="/var/db/buildbot/workers/bar" . /etc/rc.subr export PATH=${PATH}:%%LOCALBASE%%/bin name="buildbot_worker" desc="Buildbot Buildworker" rcvar=buildbot_worker_enable command="/usr/local/bin/buildbot-worker" load_rc_config ${name} # These are just the defaults, they might get overriden for a specific profile. eval ": \${${name}_enable:=\"NO\"}" eval ": \${${name}_flags:=\"\"}" eval ": \${${name}_user:=\"buildbot\"}" eval ": \${${name}_basedir:=\"/var/db/buildbot/workers\"}" reload_cmd="${name}_reload" start_precmd="${name}_prestart" stop_precmd="${name}_prestop" pidfile="${buildbot_worker_basedir}/twistd.pid" procname="%%PYTHON_CMD%%" # A specific profile is specified in the command if [ -n "$2" ]; then profile="$2" # Override defaults with profile-specific values if [ -n "${buildbot_worker_profiles}" ]; then eval buildbot_worker_enable="\${buildbot_worker_${profile}_enable:-${buildbot_worker_enable}}" eval buildbot_worker_flags="\${buildbot_worker_${profile}_flags:-${buildbot_worker_flags}}" eval buildbot_worker_user="\${buildbot_worker_${profile}_user:-${buildbot_worker_user}}" eval buildbot_worker_basedir="\${buildbot_worker_${profile}_basedir:-${buildbot_worker_basedir}/${profile}}" eval pidfile="\${buildbot_worker_${profile}_basedir:-${buildbot_worker_basedir}}/twistd.pid" else echo "$0: extra argument ignored" fi # A specific profile is not in the command else # Check if any profiles are defined if [ -n "$1" -a -n "${buildbot_worker_profiles}" ]; then # Loop through them for profile in ${buildbot_worker_profiles}; do eval _enable="\${buildbot_worker_${profile}_enable}" case "${_enable:-${buildbot_worker_enable}}" in [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) continue ;; [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) ;; *) if test -z "$_enable"; then _var=buildbot_worker_enable else _var=buildbot_worker_"${profile}"_enable fi warn "Bad value" \ "'${_enable:-${buildbot_worker_enable}}'" \ "for ${_var}. " \ "Profile ${profile} skipped." continue ;; esac echo "===> ${name} profile: ${profile}" if $0 $1 ${profile}; then success="${profile} ${success:-}" else failed="${profile} (${retcode}) ${failed:-}" fi done # Exit so that non-profile rc.d is not started when there are profiles exit 0 fi fi buildbot_worker_prestart() { if [ ! -f "${buildbot_worker_basedir}/buildbot.tac" ]; then echo "Worker is not configured." echo "Run the following command to create a new worker:" echo "su -m ${buildbot_worker_user} -c \"exec ${command} create-worker ${buildbot_worker_basedir} \"" exit 1 fi rc_flags="start ${buildbot_worker_basedir} ${rc_flags}" } buildbot_worker_prestop() { rc_flags="stop ${buildbot_worker_basedir} ${rc_flags}" } buildbot_worker_reload() { rc_flags="${buildbot_worker_basedir} ${rc_flags}" ${command} sighup ${rc_flags} } run_rc_command "$1"