Dzahn has submitted this change and it was merged. Change subject: Initial RESTBase puppet module ......................................................................
Initial RESTBase puppet module Change-Id: I2b83590ee432871078a861425e0d0b1fed0440d1 --- A modules/restbase/manifests/init.pp A modules/restbase/templates/config.yaml.erb A modules/restbase/templates/restbase.default.erb A modules/restbase/templates/restbase.init 4 files changed, 329 insertions(+), 0 deletions(-) Approvals: jenkins-bot: Verified Dzahn: Looks good to me, approved diff --git a/modules/restbase/manifests/init.pp b/modules/restbase/manifests/init.pp new file mode 100644 index 0000000..0362a91 --- /dev/null +++ b/modules/restbase/manifests/init.pp @@ -0,0 +1,111 @@ +# == Class: restbase +# +# restbase is a REST API & storage service +# http://restbase.org +# +# === Parameters +# +# [*cassandra_user*] +# Cassandra user name. +# [*cassandra_password*] +# Cassandra password. +# [*seeds*] +# Array of cassandra hosts (IP or host names) to contact. +# Default: ['localhost'] +# [*port*] +# Port where to run the restbase service. Default: 7231 +# [*logstash_host*] +# GELF logging host. Default: localhost +# [*logstash_port*] +# GELF logging port. Default: 12201 +# +class restbase( + $cassandra_user, + $cassandra_password, + $seeds = [$::ipaddress], + $cassandra_defaultConsistency = 'localQuorum', + $port = 7231, + $logstash_host = 'localhost', + $logstash_port = '12201', +) { + ensure_packages( ['nodejs', 'nodejs-legacy', 'npm'] ) + + package { 'restbase/deploy': + provider => 'trebuchet', + } + + group { 'restbase': + ensure => present, + system => true, + } + + user { 'restbase': + gid => 'restbase', + home => '/nonexistent', + shell => '/bin/false', + system => true, + before => Service['restbase'], + } + + file { '/var/log/restbase': + ensure => directory, + owner => 'restbase', + group => 'restbase', + mode => '0775', + before => Service['restbase'], + } + + file { '/etc/default/restbase': + content => template('restbase/restbase.default.erb'), + owner => 'root', + group => 'root', + mode => '0444', + notify => Service['restbase'], + } + + file { '/etc/init.d/restbase': + content => template('restbase/restbase.init'), + owner => 'root', + group => 'root', + mode => '0755', + notify => Service['restbase'], + } + + file { '/etc/restbase': + ensure => directory, + owner => 'restbase', + group => 'restbase', + mode => '0775', + before => Service['restbase'], + } + + file { '/etc/restbase/config.yaml': + content => template('restbase/config.yaml.erb'), + owner => 'root', + group => 'root', + mode => '0444', + notify => Service['restbase'], + } + + file { '/usr/lib/restbase': + ensure => directory, + owner => 'restbase', + group => 'restbase', + mode => '0775', + before => Service['restbase'], + } + + file { '/usr/lib/restbase/deploy': + ensure => link, + target => '/srv/deployment/restbase/deploy', + require => File['/usr/lib/restbase'], + before => Service['restbase'], + } + + service { 'restbase': + ensure => running, + hasstatus => true, + hasrestart => true, + provider => 'init', + } +} diff --git a/modules/restbase/templates/config.yaml.erb b/modules/restbase/templates/config.yaml.erb new file mode 100644 index 0000000..e10d00e --- /dev/null +++ b/modules/restbase/templates/config.yaml.erb @@ -0,0 +1,24 @@ +# RESTBase config + +port: <%= @port %> + +# System domain (used to store restbase metadata) in reverse DNS notation +sysdomain: restbase.local + +storage: + default: + # module name + type: restbase-cassandra + hosts: [<%= Array(@seeds).join(',') %>] + keyspace: system + username: <%= @cassandra_user %> + password: <%= @cassandra_password %> + defaultConsistency: <%= @cassandra_defaultConsistency %> + +logging: + name: restbase + streams: + # XXX: Use gelf-stream -> logstash + - type: gelf + host: <%= @logstash_host %> + port: <%= @logstash_port %> diff --git a/modules/restbase/templates/restbase.default.erb b/modules/restbase/templates/restbase.default.erb new file mode 100644 index 0000000..d5e29f7 --- /dev/null +++ b/modules/restbase/templates/restbase.default.erb @@ -0,0 +1,10 @@ +# Defaults for restbase initscript + +SETTINGS_FILE=/etc/restbase/config.yaml + +PORT="<%= @port %>" + +# Default is to listen on all interfaces +#INTERFACE="0.0.0.0" + +DAEMON_ARGS="-c $SETTINGS_FILE" diff --git a/modules/restbase/templates/restbase.init b/modules/restbase/templates/restbase.init new file mode 100644 index 0000000..befcb96 --- /dev/null +++ b/modules/restbase/templates/restbase.init @@ -0,0 +1,184 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: restbase +# Required-Start: $local_fs $network $remote_fs $syslog +# Required-Stop: $local_fs $network $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: REST storage API and backend orchestration layer +# Description: Distributed storage service with REST API & backend +# service orchestration layer. +### END INIT INFO + +# Author: Gabriel Wicke <[email protected]> + +# 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="RESTBase HTTP service" +NAME=restbase +SCRIPT_PATH=/usr/lib/restbase/deploy/restbase/server.js +DAEMON="/usr/bin/nodejs $SCRIPT_PATH" +DAEMON_ARGS="" +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -e "$SCRIPT_PATH" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# export the port and host env vars, if set +export PORT +export INTERFACE + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +DAEMON_ARGS="-c $SETTINGS_FILE" +# +# Function that starts the daemon/service +# +do_start() +{ + # up the number of fds [sockets] from 1024 + ulimit -n 100000 + + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + + # calling /bin/sh is a hack needed to get output redirection on Ubuntu + # 12.04 LTS, see below + start-stop-daemon --start --quiet --pidfile $PIDFILE -bm \ + -c restbase:restbase --test \ + --exec /bin/sh -- \ + -c "$DAEMON $DAEMON_ARGS > /dev/null 2>&1" \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE -bm \ + -c restbase:restbase \ + --exec /bin/sh -- \ + -c "$DAEMON $DAEMON_ARGS > /dev/null 2>&1" \ + || return 2 + echo "Started RESTBase server on port $PORT" + + # Cleaner version of the above, but does not work with Ubuntu 12.04 + # LTS as the --no-close parameter is not yet supported there + #start-stop-daemon --start --quiet --pidfile $PIDFILE -bm --no-close \ + # -c restbase:restbase \ + # --exec $DAEMON -- $DAEMON_ARGS >> /var/log/restbase/restbase.log 2>&1 \ + # || 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. + sleep 5 +} + +# +# 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 --quiet --retry=TERM/60/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/5/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + 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 $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|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: -- To view, visit https://gerrit.wikimedia.org/r/167213 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I2b83590ee432871078a861425e0d0b1fed0440d1 Gerrit-PatchSet: 15 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: GWicke <[email protected]> Gerrit-Reviewer: Alexandros Kosiaris <[email protected]> Gerrit-Reviewer: BryanDavis <[email protected]> Gerrit-Reviewer: Dzahn <[email protected]> Gerrit-Reviewer: Faidon Liambotis <[email protected]> Gerrit-Reviewer: GWicke <[email protected]> Gerrit-Reviewer: Ori.livneh <[email protected]> Gerrit-Reviewer: Ottomata <[email protected]> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
