diff --git a/README.md b/README.md index 4d4b0be..692991c 100644 --- a/README.md +++ b/README.md @@ -64,14 +64,22 @@ redhat init.d or upstart depending on the service provider. Default: 'upstart' `upstart` is required for the default `service_file`, and - works on RedHat >= 6. Setting `service_provider` to `redhat` + works on RedHat 6. Setting `service_provider` to `redhat` will now deploy the init.d service file, unless you specifically set `service_template` etc. + `systemd` will create a systemd service on RedHat 7. * `manage_service_file` Whether to override the system service file if it exists. Default: true +* `binary_directory` + Default: '/usr/sbin' + + Directory containing the uwsgi binary. Used by the `systemd` + service_provider; not used by the `upstart` or `redhat` service_provider + parameter. + * `config_file` The location of the uwsgi config file. Default: '/etc/uwsgi.ini' diff --git a/manifests/init.pp b/manifests/init.pp index ff7f5c4..4afbdab 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -41,11 +41,16 @@ # [*service_provider*] # The service provider. Default: 'upstart' # 'upstart' is required for the default service_file, and -# works on RedHat >= 6 +# works on RedHat 6. +# 'systemd' works on RedHat 7. # # [*manage_service_file*] # Whether to override the system service file if it exists. Default: true # +# [*binary_directory*] +# Directory containing the uwsgi binary. Used by the 'systemd' +# service_provider, but not 'upstart' or 'redhat'. +# # [*config_file*] # The location of the uwsgi config file. Default: '/etc/uwsgi.ini' # @@ -100,6 +105,7 @@ $service_enable = $uwsgi::params::service_enable, $service_provider = $uwsgi::params::service_provider, $manage_service_file = $uwsgi::params::manage_service_file, + $binary_directory = $uwsgi::params::binary_directory, $config_file = $uwsgi::params::config_file, $log_file = $uwsgi::params::log_file, $log_rotate = $uwsgi::params::log_rotate, @@ -156,6 +162,7 @@ $service_file_real = $service_provider ? { redhat => '/etc/init.d/uwsgi', upstart => '/etc/init/uwsgi.conf', + systemd => '/etc/systemd/system/uwsgi.service', default => '/etc/init/uwsgi.conf', } } else { @@ -166,6 +173,7 @@ $service_file_mode_real = $service_provider ? { redhat => '0555', upstart => '0644', + systemd => '0644', default => '0644', } } else { @@ -176,6 +184,7 @@ $service_template_real = $service_provider ? { redhat => 'uwsgi/uwsgi_service-redhat.erb', upstart => 'uwsgi/uwsgi_upstart.conf.erb', + systemd => 'uwsgi/uwsgi_systemd.service.erb', default => 'uwsgi/uwsgi_upstart.conf.erb', } } else { @@ -192,10 +201,43 @@ require => Package[$package_name] } $required_files = [ $config_file, $service_file_real ] + + if $service_provider == 'systemd' { + exec { 'uwsgi-reload-systemd': + command => '/bin/systemctl daemon-reload', + refreshonly => true, + subscribe => File[$service_file_real], + before => Service[$service_name], + } + } } else { $required_files = $config_file } + $log_directory = dirname($log_file) + $pid_directory = dirname($pidfile) + $socket_directory = dirname($socket) + + exec { $log_directory: + creates => $log_directory, + command => "mkdir -p ${log_directory}", + path => $::path + } -> file { $log_directory: } + + exec { $pid_directory: + creates => $pid_directory, + command => "mkdir -p ${pid_directory}", + path => $::path + } -> file { $pid_directory: } + + if $socket_directory != $pid_directory { + exec { $socket_directory: + creates => $socket_directory, + command => "mkdir -p ${socket_directory}", + path => $::path + } -> file { $socket_directory: } + } + file { $app_directory: ensure => 'directory', owner => 'root', @@ -212,7 +254,10 @@ provider => $service_provider, require => [ Package[$package_name], - File[$required_files] + File[$required_files], + File[$log_directory], + File[$pid_directory], + File[$socket_directory], ], subscribe => File[$required_files] } diff --git a/manifests/params.pp b/manifests/params.pp index 184c2be..931703b 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -14,6 +14,7 @@ $service_enable = true $service_provider = 'upstart' $manage_service_file = true + $binary_directory = '/usr/sbin' $config_file = '/etc/uwsgi.ini' $tyrant = true $install_pip = true diff --git a/templates/uwsgi_systemd.service.erb b/templates/uwsgi_systemd.service.erb new file mode 100644 index 0000000..9cd1ef6 --- /dev/null +++ b/templates/uwsgi_systemd.service.erb @@ -0,0 +1,15 @@ +# +# This file is managed by the puppet class 'uwsgi' +# +# uWSGI Emperor process systemd service +# +[Unit] +Description=uWSGI Emperor +After=network.target + +[Service] +Type=simple +ExecStart=<%= @binary_directory %>/uwsgi --die-on-term --ini <%= @config_file %> + +[Install] +WantedBy=multi-user.target diff --git a/templates/uwsgi_upstart.conf.erb b/templates/uwsgi_upstart.conf.erb index 2f7761e..c658a45 100644 --- a/templates/uwsgi_upstart.conf.erb +++ b/templates/uwsgi_upstart.conf.erb @@ -9,15 +9,4 @@ stop on runlevel [!2345] respawn -pre-start script - uwsgilog="<%= @log_file %>" - uwsgipid="<%= @pidfile %>" - uwsgisocket="<%= @socket %>" - uwsgilogdir="${uwsgilog%/*}" - uwsgipiddir="${uwsgipid%/*}" - uwsgisocketdir="${uwsgisocket%/*}" - mkdir -p "$uwsgipiddir" - mkdir -p "$uwsgisocketdir" - mkdir -p "$uwsgilogdir" -end script exec uwsgi --die-on-term --ini <%= @config_file %>