diff --git a/hieradata/nodes/metacpan-dev.yaml b/hieradata/nodes/metacpan-dev.yaml index 348bf161..6727cf2a 100644 --- a/hieradata/nodes/metacpan-dev.yaml +++ b/hieradata/nodes/metacpan-dev.yaml @@ -1,4 +1,12 @@ --- + +classes: + - minion_queue + +minion_queue::service::workers: 1 +minion_queue::service::ensure: running +minion_queue::service::enable: true + metacpan::user: 'vagrant' metacpan::group: 'vagrant' diff --git a/modules/minion_queue/manifests/init.pp b/modules/minion_queue/manifests/init.pp new file mode 100644 index 00000000..5659857d --- /dev/null +++ b/modules/minion_queue/manifests/init.pp @@ -0,0 +1,21 @@ +# == Class: minion_queue +# +# Probably requires metacpan::system::postgress +# but that's not a specific dependency for now +# +# Add the following to hiera +# +# classes: +# - minion_queue +# +# minion_queue::service::workers: 1 +# minion_queue::service::ensure: running +# minion_queue::service::enable: true +# +# +class minion_queue( +) { + + include minion_queue::service + +} diff --git a/modules/minion_queue/manifests/service.pp b/modules/minion_queue/manifests/service.pp new file mode 100644 index 00000000..762e2833 --- /dev/null +++ b/modules/minion_queue/manifests/service.pp @@ -0,0 +1,29 @@ +# Install init script for minion_queue +# See init.pp for details +class minion_queue::service ( + $workers = hiera('minion_queue::service::workers', 1 ), + $service_ensure = hiera('minion_queue::service::ensure', 'stopped' ), + $service_enable = hiera('minion_queue::service::enable', false ), + $user = hiera('metacpan::user', 'metacpan'), + $group = hiera('metacpan::group', 'metacpan'), +) { + include perl + + $service_name = "minion_queue" + $perlbin = $perl::params::bin_dir + + $init = "/etc/init.d/${service_name}" + + file { $init: + ensure => file, + mode => '0755', + owner => $user, + group => $group, + content => template('minion_queue/init.pl.erb'), + } + + service { $service_name: + ensure => $service_enable, + enable => $service_enable, + } +} diff --git a/modules/minion_queue/templates/init.pl.erb b/modules/minion_queue/templates/init.pl.erb new file mode 100644 index 00000000..fe1e66b9 --- /dev/null +++ b/modules/minion_queue/templates/init.pl.erb @@ -0,0 +1,65 @@ +#!<%= @perlbin %>/perl +<%# vim: set syn=perl.eruby ts=4 sts=4 sw=4 et sta: %> +# Generated by puppet. + +### BEGIN INIT INFO +# Provides: <%= @name %> +# Required-Start: $all +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Starts <%= @name %> +# Description: Starts <%= @name %> +### END INIT INFO` + +use strict; +use warnings; + +use Daemon::Control; +use File::Path 2.06 (); # core + +my $name = "minion_queue"; + +my $code_base_name = 'metacpan-api'; + +my $user = '<%= @user %>'; +my $home = "/home/${user}/${code_base_name}"; + +my %dirs = ( + pid => "$home/var/run", + log => "$home/var/log", +); +my $carton = '<%= @perlbin %>/carton'; +my $workers = <%= @workers %>; + +my $carton_dir = "/home/${user}/carton"; +my $carton_path = "${carton_dir}/${code_base_name}"; + +# TODO: Should we use the ./bin/carton wrapper instead of setting this here? +$ENV{PERL_CARTON_PATH} = $carton_path; + +# We need the right perl in the ENV +$ENV{PATH} = '<%= @perlbin %>:' . $ENV{PATH}; + +# carton exec bin/queue.pl +my @program_args = ( + 'exec', "${home}/bin/queue.pl", + 'minion', 'worker', + '-j', $workers +); + +my $args = { + directory => $home, + fork => 2, + group => $user, + lsb_desc => "Starts $name", + lsb_sdesc => "Starts $name", + name => $name, + pid_file => "$dirs{pid}/${name}.pid", + program => $carton, + program_args => \@program_args, + stderr_file => "$dirs{log}/${name}.log", + user => $user, +}; + +exit Daemon::Control->new($args)->run;