feat: add prowlarr module

- add media::prowlarr role
This commit is contained in:
Ben Vincent 2024-06-27 21:32:13 +10:00
parent 0b7f07692c
commit f2046efebe
8 changed files with 231 additions and 0 deletions

View File

@ -0,0 +1,27 @@
class prowlarr::config (
$user = $prowlarr::params::user,
$group = $prowlarr::params::group,
$base_path = $prowlarr::params::base_path,
$bind_address = $prowlarr::bind_address,
$port = $prowlarr::port,
$ssl_port = $prowlarr::ssl_port,
$enable_ssl = $prowlarr::enable_ssl,
$launch_browser = $prowlarr::launch_browser,
$api_key = $prowlarr::api_key,
$authentication_method = $prowlarr::authentication_method,
$authentication_required = $prowlarr::authentication_required,
$branch = $prowlarr::branch,
$log_level = $prowlarr::log_level,
$ssl_cert_path = $prowlarr::ssl_cert_path,
$ssl_cert_password = $prowlarr::ssl_cert_password,
$url_base = $prowlarr::url_base,
$instance_name = $prowlarr::instance_name,
) {
file { "${base_path}/config.xml":
ensure => file,
content => template('prowlarr/prowlarr_config.xml.erb'),
owner => $user,
group => $group,
mode => '0644',
}
}

View File

@ -0,0 +1,36 @@
# manage prowlarr
class prowlarr (
$packages = $prowlarr::params::packages,
$user = $prowlarr::params::user,
$group = $prowlarr::params::group,
$base_path = $prowlarr::params::base_path,
$install_path = $prowlarr::params::install_path,
$config_folder = $prowlarr::params::config_folder,
$app_folder = $prowlarr::params::app_folder,
$archive_name = $prowlarr::params::archive_name,
$archive_url = $prowlarr::params::archive_url,
$executable = $prowlarr::params::executable,
$service_enable = $prowlarr::params::service_enable,
$service_name = $prowlarr::params::service_name,
$bind_address = $prowlarr::params::bind_address,
$port = $prowlarr::params::port,
$ssl_port = $prowlarr::params::ssl_port,
$enable_ssl = $prowlarr::params::enable_ssl,
$launch_browser = $prowlarr::params::launch_browser,
$api_key = $prowlarr::params::api_key,
$authentication_method = $prowlarr::params::authentication_method,
$authentication_required = $prowlarr::params::authentication_required,
$branch = $prowlarr::params::branch,
$log_level = $prowlarr::params::log_level,
$ssl_cert_path = $prowlarr::params::ssl_cert_path,
$ssl_cert_password = $prowlarr::params::ssl_cert_password,
$url_base = $prowlarr::params::url_base,
$instance_name = $prowlarr::params::instance_name,
) inherits prowlarr::params {
include prowlarr::install
include prowlarr::config
include prowlarr::service
Class['prowlarr::install'] -> Class['prowlarr::config'] -> Class['prowlarr::service']
}

View File

@ -0,0 +1,58 @@
# instsall prowlarr
class prowlarr::install (
$packages = $prowlarr::packages,
$user = $prowlarr::user,
$group = $prowlarr::group,
$base_path = $prowlarr::base_path,
$install_path = $prowlarr::install_path,
$config_folder = $prowlarr::config_folder,
$app_folder = $prowlarr::app_folder,
$archive_name = $prowlarr::archive_name,
$archive_url = $prowlarr::archive_url,
$executable = $prowlarr::executable,
) {
$_packages = $packages ? {
Array => true,
default => false,
}
if $_packages {
ensure_packages($packages, {ensure => 'installed'})
}
group { $group:
ensure => present,
}
user { $user:
ensure => present,
shell => '/sbin/nologin',
groups => $group,
managehome => true,
}
file { [ $base_path, $install_path, $config_folder, $app_folder ]:
ensure => directory,
owner => $user,
group => $group,
}
archive { $archive_name:
path => "/tmp/${archive_name}",
source => "${archive_url}${archive_name}",
extract => true,
extract_path => $install_path,
creates => "${install_path}/${executable}",
cleanup => true,
require => File[$install_path],
user => $user,
group => $group,
notify => Exec['move_prowlarr_files'],
}
exec { 'move_prowlarr_files':
command => "/usr/bin/mv ${install_path}/Prowlarr/* ${install_path}",
creates => "${install_path}/${executable}",
}
}

View File

@ -0,0 +1,49 @@
# prowlarr params
class prowlarr::params (
Array[String] $packages = [
'mediainfo',
'libzen',
'libmediainfo',
'gettext',
'sqlite.x86_64',
'par2cmdline',
'python3-feedparser',
'python3-configobj',
'python3-cheetah',
'python3-dbus',
'libxslt-devel',
'libchromaprint',
],
String $user = 'prowlarr',
String $group = 'prowlarr',
Stdlib::Absolutepath $base_path = '/opt/prowlarr',
Stdlib::Absolutepath $install_path = '/opt/prowlarr/bin',
Stdlib::Absolutepath $config_folder = '/home/prowlarr/.config',
Stdlib::Absolutepath $app_folder = '/home/prowlarr/.config/Prowlarr',
String $archive_version = '1.19.0',
String $archive_name = 'Prowlarr.master.linux-core-x64.tar.gz',
Stdlib::HTTPUrl $archive_url = "https://git.query.consul/api/packages/unkinben/generic/prowlarr/${archive_version}/",
String $executable = 'Prowlarr/Prowlarr',
String $service_name = 'prowlarr',
Boolean $service_enable = true,
# params for the configuration file
Stdlib::Host $bind_address = '127.0.0.1',
Stdlib::Port $port = 8686,
Stdlib::Port $ssl_port = 9696,
Boolean $enable_ssl = false,
Boolean $launch_browser = true,
String $api_key = '32-digit-random-string-goes-here',
Enum[
'Forms',
'Basic',
'External'
] $authentication_method = 'External',
Enum['Enabled', 'Disabled'] $authentication_required = 'Enabled',
String $branch = 'main',
Enum['debug', 'info', 'warn', 'error', 'fatal'] $log_level = 'info',
Optional[String] $ssl_cert_path = undef,
Optional[String] $ssl_cert_password = undef,
Optional[String] $url_base = undef,
String $instance_name = 'prowlarr',
) { }

View File

@ -0,0 +1,21 @@
# manage prowlarr service
class prowlarr::service (
$service_enable = $prowlarr::service_enable,
$service_name = $prowlarr::service_name,
$user = $prowlarr::user,
$group = $prowlarr::user,
$install_path = $prowlarr::install_path,
$executable = $prowlarr::executable,
$base_path = $prowlarr::base_path,
) {
if $service_enable {
include ::systemd
systemd::unit_file { "${service_name}.service":
content => template('prowlarr/prowlarr.service.erb'),
enable => true,
active => true,
subscribe => File["${base_path}/config.xml"],
}
}
}

View File

@ -0,0 +1,14 @@
[Unit]
Description=<%= @service_name %> Daemon
After=syslog.target network.target
[Service]
User=<%= @user %>
Group=<%= @group %>
Type=simple
ExecStart=<%= @install_path %>/<%= @executable %> -nobrowser -data=<%= @base_path %>
KillMode=process
Restart=on-failure
TimeoutStopSec=20
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,16 @@
<Config>
<BindAddress><%= @bind_address %></BindAddress>
<Port><%= @port %></Port>
<SslPort><%= @ssl_port %></SslPort>
<EnableSsl><%= @enable_ssl.to_s.capitalize %></EnableSsl>
<LaunchBrowser><%= @launch_browser.to_s.capitalize %></LaunchBrowser>
<ApiKey><%= @api_key %></ApiKey>
<AuthenticationMethod><%= @authentication_method %></AuthenticationMethod>
<AuthenticationRequired><%= @authentication_required %></AuthenticationRequired>
<Branch><%= @branch %></Branch>
<LogLevel><%= @log_level %></LogLevel>
<SslCertPath><%= @ssl_cert_path || '' %></SslCertPath>
<SslCertPassword><%= @ssl_cert_password || '' %></SslCertPassword>
<UrlBase><%= @url_base || '' %></UrlBase>
<InstanceName><%= @instance_name %></InstanceName>
</Config><%- # No newline at the end of the file -%>

View File

@ -0,0 +1,10 @@
# prowlarr server profile
class roles::apps::media::prowlarr {
if $facts['firstrun'] {
include profiles::defaults
include profiles::firstrun::init
}else{
include profiles::defaults
include profiles::base
}
}