Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jshholland debian support #42

Merged
merged 9 commits into from
May 23, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.