Commit 69e4455

mo khan <mo@mokhan.ca>
2015-05-02 18:32:46
add unicorn recipe.
1 parent 46a1cb0
Changed files (3)
recipes
spec
templates
recipes/unicorn.rb
@@ -0,0 +1,13 @@
+configuration = node['unicorn']
+
+template "/etc/init.d/unicorn" do
+  source "unicorn.erb"
+  owner configuration['username']
+  group configuration['username']
+  mode "0744"
+  variables(configuration)
+end
+
+service "unicorn" do
+  action [:enable, :start]
+end
spec/unicorn_spec.rb
@@ -0,0 +1,27 @@
+describe "mokhan-myface::unicorn" do
+  subject do
+    ChefSpec::SoloRunner.new do |node|
+      node.set['unicorn'] = unicorn_variables
+    end.converge(described_recipe)
+  end
+
+  let(:username) { FFaker::Internet.user_name }
+  let(:unicorn_variables) do
+    {
+      'username' => username
+    }
+  end
+
+  it 'creates the unicorn init.d script' do
+    expect(subject).to create_template("/etc/init.d/unicorn")
+      .with_source("unicorn.erb")
+      .with_owner(username)
+      .with_group(username)
+      .with_mode("0744")
+      .with_variables(unicorn_variables)
+  end
+
+  it 'starts the unicorn service' do
+    expect(subject).to start_service("unicorn")
+  end
+end
templates/default/unicorn.erb
@@ -0,0 +1,95 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          unicorn
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Start unicorn at boot time
+# Description:       Run input app server
+### END INIT INFO
+set -e
+# Example init script, this can be used with nginx, too,
+# since nginx and unicorn accept the same signals
+
+# Feel free to change any of the following variables for your app:
+TIMEOUT=${TIMEOUT-60}
+APP_ROOT=<%= @current_path %>
+PID=$APP_ROOT/tmp/pids/unicorn.pid
+ENVIRONMENT=<%= @rails_env %>
+CMD="cd $APP_ROOT; bin/unicorn -E $ENVIRONMENT -D -c $APP_ROOT/config/unicorn.rb"
+action="$1"
+set -u
+
+old_pid="$PID.oldbin"
+
+cd $APP_ROOT || exit 1
+
+sig () {
+  test -s "$PID" && kill -$1 `cat $PID`
+}
+
+oldsig () {
+  test -s $old_pid && kill -$1 `cat $old_pid`
+}
+
+workersig () {
+  workerpid="$APP_ROOT/tmp/pids/unicorn.$2.pid"
+  test -s "$workerpid" && kill -$1 `cat $workerpid`
+}
+
+case $action in
+status )
+  sig 0 && echo >&2 "unicorn is running." && exit 0
+  echo >&2 "unicorn is not running." && exit 1 
+  ;;
+start)
+  sig 0 && echo >&2 "Already running" && exit 0
+  eval "$CMD"
+  ;;
+stop)
+  sig QUIT && exit 0
+  echo >&2 "Not running"
+  ;;
+force-stop)
+  sig TERM && exit 0
+  echo >&2 "Not running"
+  ;;
+restart|reload)
+  sig HUP && echo reloaded OK && exit 0
+  echo >&2 "Couldn't reload, starting '$CMD' instead"
+  eval "$CMD"
+  ;;
+upgrade)
+  if sig USR2 && sleep 20 && sig 0 && oldsig QUIT
+  then
+    n=$TIMEOUT
+    while test -s $old_pid && test $n -ge 0
+    do
+      printf '.' && sleep 1 && n=$(( $n - 1 ))
+    done
+    echo
+
+    if test $n -lt 0 && test -s $old_pid
+    then
+      echo >&2 "$old_pid still exists after $TIMEOUT seconds"
+      exit 1
+    fi
+    exit 0
+  fi
+  echo >&2 "Couldn't upgrade, starting '$CMD' instead"
+  eval "$CMD"
+  ;;
+kill_worker)
+  workersig QUIT $2 && exit 0
+  echo >&2 "Worker not running"
+  ;;
+
+reopen-logs)
+  sig USR1
+  ;;
+*)
+  echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
+  exit 1
+  ;;
+esac