Working version

This commit contains a working version of this Puppet implementation of
Sonarr.
This commit is contained in:
Ruben Bosch 2019-06-19 21:44:13 +02:00
parent 1986730af1
commit b9a617cf25
No known key found for this signature in database
GPG Key ID: 50A7118A59880ACE
5 changed files with 166 additions and 70 deletions

View File

@ -1,73 +1,28 @@
# Class: sonarr # == Class: sonarr
# ===========================
#
# Full description of class sonarr here.
#
# Parameters
# ----------
#
# Document parameters here.
#
# * `sample parameter`
# Explanation of what this parameter affects and what it defaults to.
# e.g. "Specify one or more upstream ntp servers as an array."
#
# Variables
# ----------
#
# Here you should define a list of variables that this module would require.
#
# * `sample variable`
# Explanation of how this variable affects the function of this class and if
# it has a default. e.g. "The parameter enc_ntp_servers must be set by the
# External Node Classifier as a comma separated list of hostnames." (Note,
# global variables should be avoided in favor of class parameters as
# of Puppet 2.6.)
#
# Examples
# --------
#
# @example
# class { 'sonarr':
# servers => [ 'pool.ntp.org', 'ntp.local.company.com' ],
# }
#
# Authors
# -------
#
# Ruben Bosch <ruben@rubuen.me>
#
# Copyright
# ---------
#
# Copyright 2019 Ruben Bosch.
# #
class sonarr ( class sonarr (
$manage_epel = false, $manage_epel = $sonarr::params::manage_epel,
$mono = true, $install_mono = $sonarr::params::install_mono,
) { $mono_baseurl = $sonarr::params::mono_baseurl,
if $manage_epel { $mono_gpgkey = $sonarr::params::mono_gpgkey,
package { 'epel-release': $mono_packages = $sonarr::params::mono_packages,
ensure => 'installed', $additional_packages = $sonarr::params::additional_packages,
} $user = $sonarr::params::user,
} $group = $sonarr::params::user,
if $mono { $base_path = $sonarr::params::base_path,
yumrepo { 'mono': $install_path = $sonarr::params::install_path,
ensure => present, $config_folder = $sonarr::params::config_folder,
baseurl => 'http://download.mono-project.com/repo/centos/', $app_folder = $sonarr::params::app_folder,
gpgkey => "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF", $archive_name = $sonarr::params::archive_name,
} -> $archive_url = $sonarr::params::archive_url,
package { $executable = $sonarr::params::executable,
[ $service_enable = $sonarr::params::service_enable,
'wget', 'mediainfo', 'libzen', 'libmediainfo', $service_name = $sonarr::params::service_name,
'curl', 'gettext', 'mono-core', 'mono-devel', ) inherits sonarr::params {
'sqlite.x86_64', 'git', 'par2cmdline', 'p7zip',
'unar.x86_64', 'unzip', 'tar', 'gcc', contain sonarr::install
'python-feedparser', 'python-configobj', contain sonarr::service
'python-cheetah', 'python-dbus', 'python-devel',
'libxslt-devel' Class['sonarr::install'] ~>
]: Class['sonarr::service']
ensure => installed,
}
}
} }

84
manifests/install.pp Normal file
View File

@ -0,0 +1,84 @@
# == Class: sonarr::install
#
class sonarr::install (
$manage_epel = $sonarr::manage_epel,
$install_mono = $sonarr::install_mono,
$mono_baseurl = $sonarr::mono_baseurl,
$mono_gpgkey = $sonarr::mono_gpgkey,
$mono_packages = $sonarr::mono_packages,
$additional_packages = $sonarr::additional_packages,
$user = $sonarr::user,
$group = $sonarr::user,
$base_path = $sonarr::base_path,
$install_path = $sonarr::install_path,
$config_folder = $sonarr::config_folder,
$app_folder = $sonarr::app_folder,
$archive_name = $sonarr::archive_name,
$archive_url = $sonarr::archive_url,
$executable = $sonarr::executable,
) {
if $manage_epel {
package { 'epel-release':
ensure => 'installed',
}
}
if $install_mono {
yumrepo { 'mono':
ensure => present,
baseurl => $mono_baseurl,
gpgkey => $mono_gpgkey,
gpgcheck => true,
} ->
package { $mono_packages:
ensure => installed,
}
}
$_additional_packages = $additional_packages ? {
Array => true,
default => false,
}
if $_additional_packages {
package { $additional_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,
} ->
exec { 'move files to correct folder':
command => "/usr/bin/mv ${install_path}/NzbDrone/* ${install_path}",
creates => "${install_path}/${executable}",
}
}

23
manifests/params.pp Normal file
View File

@ -0,0 +1,23 @@
class sonarr::params {
$manage_epel = true
$install_mono = true
$mono_baseurl = 'http://download.mono-project.com/repo/centos/'
$mono_gpgkey = 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF'
$mono_packages = ['mono-core', 'mono-devel']
$additional_packages = ['wget', 'mediainfo', 'libzen', 'libmediainfo', 'curl',
'gettext', 'sqlite.x86_64', 'git', 'par2cmdline',
'p7zip', 'unar.x86_64', 'unzip', 'tar', 'gcc',
'python-feedparser', 'python-configobj',
'python-cheetah', 'python-dbus', 'python-devel',
'libxslt-devel']
$user = 'sonarr'
$base_path = '/opt/sonarr'
$install_path = '/opt/sonarr/bin'
$config_folder = "/home/${user}/.config"
$app_folder = "/home/${user}/.config/NzbDrone"
$archive_name = 'NzbDrone.master.tar.gz'
$archive_url = 'http://update.sonarr.tv/v2/master/mono/'
$executable = 'NzbDrone.exe'
$service_enable = true
$service_name = 'sonarr'
}

21
manifests/service.pp Normal file
View File

@ -0,0 +1,21 @@
# == Class: sonarr::service
#
class sonarr::service (
$service_enable = $sonarr::service_enable,
$service_name = $sonarr::service_name,
$user = $sonarr::user,
$group = $sonarr::user,
$install_path = $sonarr::install_path,
$executable = $sonarr::executable,
$base_path = $sonarr::base_path,
) {
if $service_enable {
include ::systemd
systemd::unit_file { "${service_name}.service":
content => template('sonarr/systemd.erb'),
enable => true,
active => true,
}
}
}

13
templates/systemd.erb Normal file
View File

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