Skip to content

Commit 27505e7

Browse files
andy-s-clarkjarshwah
authored andcommitted
Add systemd support (#14)
* Add systemd support * Add binary_directory parameter for systemd
1 parent e3436e7 commit 27505e7

5 files changed

Lines changed: 72 additions & 14 deletions

File tree

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,22 @@ redhat init.d or upstart depending on the service provider.
6464
Default: 'upstart'
6565

6666
`upstart` is required for the default `service_file`, and
67-
works on RedHat >= 6. Setting `service_provider` to `redhat`
67+
works on RedHat 6. Setting `service_provider` to `redhat`
6868
will now deploy the init.d service file, unless you specifically
6969
set `service_template` etc.
70+
`systemd` will create a systemd service on RedHat 7.
7071

7172
* `manage_service_file`
7273
Whether to override the system service file if it exists.
7374
Default: true
7475

76+
* `binary_directory`
77+
Default: '/usr/sbin'
78+
79+
Directory containing the uwsgi binary. Used by the `systemd`
80+
service_provider; not used by the `upstart` or `redhat` service_provider
81+
parameter.
82+
7583
* `config_file`
7684
The location of the uwsgi config file.
7785
Default: '/etc/uwsgi.ini'

manifests/init.pp

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,16 @@
4141
# [*service_provider*]
4242
# The service provider. Default: 'upstart'
4343
# 'upstart' is required for the default service_file, and
44-
# works on RedHat >= 6
44+
# works on RedHat 6.
45+
# 'systemd' works on RedHat 7.
4546
#
4647
# [*manage_service_file*]
4748
# Whether to override the system service file if it exists. Default: true
4849
#
50+
# [*binary_directory*]
51+
# Directory containing the uwsgi binary. Used by the 'systemd'
52+
# service_provider, but not 'upstart' or 'redhat'.
53+
#
4954
# [*config_file*]
5055
# The location of the uwsgi config file. Default: '/etc/uwsgi.ini'
5156
#
@@ -100,6 +105,7 @@
100105
$service_enable = $uwsgi::params::service_enable,
101106
$service_provider = $uwsgi::params::service_provider,
102107
$manage_service_file = $uwsgi::params::manage_service_file,
108+
$binary_directory = $uwsgi::params::binary_directory,
103109
$config_file = $uwsgi::params::config_file,
104110
$log_file = $uwsgi::params::log_file,
105111
$log_rotate = $uwsgi::params::log_rotate,
@@ -156,6 +162,7 @@
156162
$service_file_real = $service_provider ? {
157163
redhat => '/etc/init.d/uwsgi',
158164
upstart => '/etc/init/uwsgi.conf',
165+
systemd => '/etc/systemd/system/uwsgi.service',
159166
default => '/etc/init/uwsgi.conf',
160167
}
161168
} else {
@@ -166,6 +173,7 @@
166173
$service_file_mode_real = $service_provider ? {
167174
redhat => '0555',
168175
upstart => '0644',
176+
systemd => '0644',
169177
default => '0644',
170178
}
171179
} else {
@@ -176,6 +184,7 @@
176184
$service_template_real = $service_provider ? {
177185
redhat => 'uwsgi/uwsgi_service-redhat.erb',
178186
upstart => 'uwsgi/uwsgi_upstart.conf.erb',
187+
systemd => 'uwsgi/uwsgi_systemd.service.erb',
179188
default => 'uwsgi/uwsgi_upstart.conf.erb',
180189
}
181190
} else {
@@ -192,10 +201,43 @@
192201
require => Package[$package_name]
193202
}
194203
$required_files = [ $config_file, $service_file_real ]
204+
205+
if $service_provider == 'systemd' {
206+
exec { 'uwsgi-reload-systemd':
207+
command => '/bin/systemctl daemon-reload',
208+
refreshonly => true,
209+
subscribe => File[$service_file_real],
210+
before => Service[$service_name],
211+
}
212+
}
195213
} else {
196214
$required_files = $config_file
197215
}
198216

217+
$log_directory = dirname($log_file)
218+
$pid_directory = dirname($pidfile)
219+
$socket_directory = dirname($socket)
220+
221+
exec { $log_directory:
222+
creates => $log_directory,
223+
command => "mkdir -p ${log_directory}",
224+
path => $::path
225+
} -> file { $log_directory: }
226+
227+
exec { $pid_directory:
228+
creates => $pid_directory,
229+
command => "mkdir -p ${pid_directory}",
230+
path => $::path
231+
} -> file { $pid_directory: }
232+
233+
if $socket_directory != $pid_directory {
234+
exec { $socket_directory:
235+
creates => $socket_directory,
236+
command => "mkdir -p ${socket_directory}",
237+
path => $::path
238+
} -> file { $socket_directory: }
239+
}
240+
199241
file { $app_directory:
200242
ensure => 'directory',
201243
owner => 'root',
@@ -212,7 +254,10 @@
212254
provider => $service_provider,
213255
require => [
214256
Package[$package_name],
215-
File[$required_files]
257+
File[$required_files],
258+
File[$log_directory],
259+
File[$pid_directory],
260+
File[$socket_directory],
216261
],
217262
subscribe => File[$required_files]
218263
}

manifests/params.pp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
$service_enable = true
1515
$service_provider = 'upstart'
1616
$manage_service_file = true
17+
$binary_directory = '/usr/sbin'
1718
$config_file = '/etc/uwsgi.ini'
1819
$tyrant = true
1920
$install_pip = true
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#
2+
# This file is managed by the puppet class 'uwsgi'
3+
#
4+
# uWSGI Emperor process systemd service
5+
#
6+
[Unit]
7+
Description=uWSGI Emperor
8+
After=network.target
9+
10+
[Service]
11+
Type=simple
12+
ExecStart=<%= @binary_directory %>/uwsgi --die-on-term --ini <%= @config_file %>
13+
14+
[Install]
15+
WantedBy=multi-user.target

templates/uwsgi_upstart.conf.erb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,4 @@ stop on runlevel [!2345]
99

1010
respawn
1111

12-
pre-start script
13-
uwsgilog="<%= @log_file %>"
14-
uwsgipid="<%= @pidfile %>"
15-
uwsgisocket="<%= @socket %>"
16-
uwsgilogdir="${uwsgilog%/*}"
17-
uwsgipiddir="${uwsgipid%/*}"
18-
uwsgisocketdir="${uwsgisocket%/*}"
19-
mkdir -p "$uwsgipiddir"
20-
mkdir -p "$uwsgisocketdir"
21-
mkdir -p "$uwsgilogdir"
22-
end script
2312
exec uwsgi --die-on-term --ini <%= @config_file %>

0 commit comments

Comments
 (0)