Skip to content

Commit

Permalink
Merge pull request #42 from jhoblitt/jshholland-debian-support
Browse files Browse the repository at this point in the history
Jshholland debian support
  • Loading branch information
Joshua Hoblitt committed May 23, 2015
2 parents ed0e4dc + 3c1962b commit 47ed216
Show file tree
Hide file tree
Showing 10 changed files with 285 additions and 12 deletions.
13 changes: 11 additions & 2 deletions manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,24 @@
validate_string($java)
validate_string($jar_name)

case $::osfamily {
'debian': {
ensure_packages(['daemon'])
Package['daemon'] -> File['init-script']
}
default : {}
}

# prog is the 'name' of the init.d script.
$prog = "selenium${name}"

file { "/etc/init.d/${prog}":
file { 'init-script':
ensure => 'file',
path => "/etc/init.d/${prog}",
owner => 'root',
group => 'root',
mode => '0755',
content => template("${module_name}/init.d/selenium.erb"),
content => template("${module_name}/init.d/${selenium::params::service_template}"),
} ~>
service { $prog:
ensure => running,
Expand Down
7 changes: 6 additions & 1 deletion manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@
$download_timeout = '90'

case $::osfamily {
'redhat': {}
'redhat': {
$service_template = 'redhat.selenium.erb'
}
'debian': {
$service_template = 'debian.selenium.erb'
}
default: {
fail("Module ${module_name} is not supported on ${::operatingsystem}")
}
Expand Down
9 changes: 9 additions & 0 deletions spec/acceptance/nodesets/debian-7.8.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
HOSTS:
debian-7.8:
roles:
- master
platform: debian-7-amd64
box: chef/debian-7.8
hypervisor: vagrant
CONFIG:
type: foss
6 changes: 5 additions & 1 deletion spec/acceptance/selenium_hub_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ class { 'selenium::hub': }
it { should be_file }
it { should be_owned_by 'selenium' }
it { should be_grouped_into 'selenium' }
it { should be_mode 644}
if fact('operatingsystem') == 'Ubuntu'
it { should be_mode 664 }
else
it { should be_mode 644 }
end
end
end

Expand Down
6 changes: 5 additions & 1 deletion spec/acceptance/selenium_node_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ class { 'selenium::node': }
it { should be_file }
it { should be_owned_by 'selenium' }
it { should be_grouped_into 'selenium' }
it { should be_mode 644}
if fact('operatingsystem') == 'Ubuntu'
it { should be_mode 664 }
else
it { should be_mode 644 }
end
end
end

Expand Down
6 changes: 5 additions & 1 deletion spec/acceptance/selenium_server_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ class { 'selenium::server': }
it { should be_file }
it { should be_owned_by 'selenium' }
it { should be_grouped_into 'selenium' }
it { should be_mode 644}
if fact('operatingsystem') == 'Ubuntu'
it { should be_mode 664 }
else
it { should be_mode 644 }
end
end
end

Expand Down
14 changes: 10 additions & 4 deletions spec/unit/classes/selenium_params_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,23 @@
it { should contain_class('selenium::params') }
end

context 'for osfamily Debian' do
let(:facts) {{ :osfamily => 'Debian' }}

it { should contain_class('selenium::params') }
end

context 'unsupported osfamily' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:osfamily => 'Suse',
:operatingsystem => 'SuSE',
}
end

it 'should fail' do
expect { should contain_class('selenium::params') }.
to raise_error(Puppet::Error, /not supported on Debian/)
to raise_error(Puppet::Error, /not supported on SuSE/)
end
end

Expand Down
5 changes: 3 additions & 2 deletions spec/unit/defines/selenium_config_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@
:options => '-Dwebdriver.enable.native.events=1',
:java => 'java',
}

p.merge!(params) if params

it do
should contain_file("/etc/init.d/selenium#{title}").with({
should contain_file('init-script').with({
'ensure' => 'file',
'path' => "/etc/init.d/selenium#{title}",
'owner' => 'root',
'group' => 'root',
'mode' => '0755',
Expand Down
231 changes: 231 additions & 0 deletions templates/init.d/debian.selenium.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
#!/bin/bash
# /etc/init.d/seleniumserver
# debian-compatible seleniumserver startup script.
# Amelia A Lewis <[email protected]>
#
### BEGIN INIT INFO
# Provides: <%= @prog %>
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start seleniumserver at boot time
# Description: Controls the selenium server engine.
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin

DESC="Selenium Remote Control Server"
NAME='<%= @prog %>'
SCRIPTNAME=/etc/init.d/$NAME
PIDFILE=/var/run/$NAME/$NAME.pid
SELENIUM_USER='<%= @user %>'
SELENIUM_INSTALL_ROOT='<%= @install_root %>'
SELENIUM_JAR_NAME='<%= @jar_name %>'
SELENIUM_JAR="${SELENIUM_INSTALL_ROOT}/jars/${SELENIUM_JAR_NAME}"
SELENIUM_LOG_NAME='<%= @name %>'
SELENIUM_LOG="${SELENIUM_INSTALL_ROOT}/log/${SELENIUM_LOG_NAME}_stdout.log"
SELENIUM_ERROR_LOG="${SELENIUM_INSTALL_ROOT}/log/${SELENIUM_LOG_NAME}_stderr.log"
SELENIUM_DISPLAY='<%= @display %>'
SELENIUM_OPTIONS='<%= @options %>'
HTTP_PORT=4444
SELENIUM_ARGS="-port $HTTP_PORT"
SELENIUM_JAVA='<%= @java %>'

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

DAEMON=/usr/bin/daemon
DAEMON_ARGS="--name=$NAME --inherit --output=$SELENIUM_LOG --pidfile=$PIDFILE --env='DISPLAY=${SELENIUM_DISPLAY}'"

SU=/bin/su
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# load environments
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
elif [ -r /etc/environment ]; then
. /etc/environment
export LANG LANGUAGE
fi

# 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

# Make sure we run as root, since setting the max open files through
# ulimit requires root access
if [ `id -u` -ne 0 ]; then
echo "The $NAME init script can only be run as root"
exit 1
fi

check_tcp_port() {
local service=$1
local assigned=$2
local default=$3

if [ -n "$assigned" ]; then
port=$assigned
else
port=$default
fi

count=`netstat --listen --numeric-ports | grep \:$port[[:space:]] | grep -c . `

if [ $count -ne 0 ]; then
echo "The selected $service port ($port) seems to be in use by another program "
echo "Please select another port to use for $NAME"
return 1
fi
}

#
# Function that starts the daemon/service
#
do_start()
{
# the default location is /var/run/seleniumserver/seleniumserver.pid but the parent directory needs to be created
mkdir `dirname $PIDFILE` > /dev/null 2>&1 || true
chown $SELENIUM_USER `dirname $PIDFILE`
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
$DAEMON $DAEMON_ARGS --running && return 1

# Verify that the seleniumserver port is not already in use
check_tcp_port "http" "$HTTP_PORT" "4444" || return 1

# --user in daemon doesn't prepare environment variables like HOME, USER, LOGNAME or USERNAME,
# so we let su do so for us now
$SU -l $SELENIUM_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- java -jar ${SELENIUM_JAR} ${SELENIUM_OPTIONS} > ${SELENIUM_LOG} 2> ${SELENIUM_ERROR_LOG}" || return 2
}

#
# Verify that all seleniumserver processes have been shutdown
# and if not, then do killall for them
#
get_running()
{
return `ps -U $SELENIUM_USER --no-headers -f | egrep -e '(java|daemon)' | grep -c . `
}

force_stop()
{
get_running
if [ $? -ne 0 ]; then
killall -u $SELENIUM_USER java daemon || return 3
fi
}

# Get the status of the daemon process
get_daemon_status()
{
$DAEMON $DAEMON_ARGS --running || return 1
}

#
# 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
get_daemon_status
case "$?" in
0)
$DAEMON $DAEMON_ARGS --stop || return 2
# wait for the process to really terminate
for n in 1 2 3 4 5; do
sleep 1
$DAEMON $DAEMON_ARGS --running || break
done
if get_daemon_status; then
force_stop || return 3
fi
;;
*)
force_stop || return 3
;;
esac

# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return 0
}

case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
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
;;
status)
get_daemon_status
case "$?" in
0) echo "$DESC is running with the pid `cat $PIDFILE`";;
*)
get_running
procs=$?
if [ $procs -eq 0 ]; then
echo -n "$DESC is not running"
if [ -f $PIDFILE ]; then
echo ", but the pidfile ($PIDFILE) still exists"
else
echo
fi
else
echo "$procs instances of seleniumserver are running at the moment"
echo "but the pidfile $PIDFILE is missing"
fi
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

exit 0
File renamed without changes.

0 comments on commit 47ed216

Please sign in to comment.