From f22556b39f9cbb5111bf0279ef885b035e726db2 Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Tue, 25 Jun 2024 23:30:10 +1000 Subject: [PATCH] feat: manage sonarr configuration - add config class to sonarr module - update params to include unique group param --- hieradata/roles/apps/media/sonarr.eyaml | 1 + hieradata/roles/apps/media/sonarr.yaml | 1 + modules/sonarr/manifests/config.pp | 27 +++++++++++ modules/sonarr/manifests/init.pp | 41 +++++++++++----- modules/sonarr/manifests/install.pp | 2 +- modules/sonarr/manifests/params.pp | 47 ++++++++++++++----- modules/sonarr/manifests/service.pp | 9 ++-- .../sonarr/templates/sonarr_config.xml.erb | 16 +++++++ 8 files changed, 113 insertions(+), 31 deletions(-) create mode 100644 modules/sonarr/manifests/config.pp create mode 100644 modules/sonarr/templates/sonarr_config.xml.erb diff --git a/hieradata/roles/apps/media/sonarr.eyaml b/hieradata/roles/apps/media/sonarr.eyaml index e69de29..18be20a 100644 --- a/hieradata/roles/apps/media/sonarr.eyaml +++ b/hieradata/roles/apps/media/sonarr.eyaml @@ -0,0 +1 @@ +sonarr::api_key: ENC[PKCS7,MIIBmQYJKoZIhvcNAQcDoIIBijCCAYYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEANhwc0Vk0htkacwqGA/ZEVR7hpC1V2+nyP3lxyqkVNWERdcIsoMjlfwp2QNoLVirALY10Kon1wKXiRLT+QOqF9aTapS2Vb2YH3ZujR5yT6T1z4e0o4EA3IlNJZemVIziIqrK8+8zZzVafYdOYwMwpbc5EzoJPBtdqNHbDaQu4bRTCp2yMISTOzFjZpOoEJlRyC8YrffNU2xzA5mh5Cw+00MdIfPd8enrCnA4b1ddqP/IsfEYRt91ANQBULwKC5wenKdJAN5qKSKW6KU9TUM5YvGvUPgTvcYgXNf3/INL6G3/HwISTE5A7S6lqwYLyRTT1fMHtgDIqS936DPqCdAZtzjBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBZ4e3jAM0zvV43IrCzQOGIgDBwOWgm+wJG+jAU8r1awWDvzQXgF3h65nAKfoOuGEztsjeBEruU4EmZy6llLbfSSb8=] diff --git a/hieradata/roles/apps/media/sonarr.yaml b/hieradata/roles/apps/media/sonarr.yaml index 683db99..d23077d 100644 --- a/hieradata/roles/apps/media/sonarr.yaml +++ b/hieradata/roles/apps/media/sonarr.yaml @@ -29,6 +29,7 @@ profiles::nginx::simpleproxy::nginx_aliases: - sonarr.query.consul - "sonarr.service.%{facts.country}-%{facts.region}.consul" profiles::nginx::simpleproxy::proxy_port: 8989 +profiles::nginx::simpleproxy::proxy_host: 127.0.0.1 profiles::nginx::simpleproxy::proxy_path: '/' # configure consul service diff --git a/modules/sonarr/manifests/config.pp b/modules/sonarr/manifests/config.pp new file mode 100644 index 0000000..e9f603e --- /dev/null +++ b/modules/sonarr/manifests/config.pp @@ -0,0 +1,27 @@ +class sonarr::config ( + $user = $sonarr::params::user, + $group = $sonarr::params::group, + $base_path = $sonarr::params::base_path, + $bind_address = $sonarr::bind_address, + $port = $sonarr::port, + $ssl_port = $sonarr::ssl_port, + $enable_ssl = $sonarr::enable_ssl, + $launch_browser = $sonarr::launch_browser, + $api_key = $sonarr::api_key, + $authentication_method = $sonarr::authentication_method, + $authentication_required = $sonarr::authentication_required, + $branch = $sonarr::branch, + $log_level = $sonarr::log_level, + $ssl_cert_path = $sonarr::ssl_cert_path, + $ssl_cert_password = $sonarr::ssl_cert_password, + $url_base = $sonarr::url_base, + $instance_name = $sonarr::instance_name, +) { + file { "${base_path}/config.xml": + ensure => file, + content => template('sonarr/sonarr_config.xml.erb'), + owner => $user, + group => $group, + mode => '0644', + } +} diff --git a/modules/sonarr/manifests/init.pp b/modules/sonarr/manifests/init.pp index 7dc312b..34054ff 100644 --- a/modules/sonarr/manifests/init.pp +++ b/modules/sonarr/manifests/init.pp @@ -1,21 +1,36 @@ # manage sonarr class sonarr ( - $packages = $sonarr::params::packages, - $user = $sonarr::params::user, - $group = $sonarr::params::user, - $base_path = $sonarr::params::base_path, - $install_path = $sonarr::params::install_path, - $config_folder = $sonarr::params::config_folder, - $app_folder = $sonarr::params::app_folder, - $archive_name = $sonarr::params::archive_name, - $archive_url = $sonarr::params::archive_url, - $executable = $sonarr::params::executable, - $service_enable = $sonarr::params::service_enable, - $service_name = $sonarr::params::service_name, + $packages = $sonarr::params::packages, + $user = $sonarr::params::user, + $group = $sonarr::params::group, + $base_path = $sonarr::params::base_path, + $install_path = $sonarr::params::install_path, + $config_folder = $sonarr::params::config_folder, + $app_folder = $sonarr::params::app_folder, + $archive_name = $sonarr::params::archive_name, + $archive_url = $sonarr::params::archive_url, + $executable = $sonarr::params::executable, + $service_enable = $sonarr::params::service_enable, + $service_name = $sonarr::params::service_name, + $bind_address = $sonarr::params::bind_address, + $port = $sonarr::params::port, + $ssl_port = $sonarr::params::ssl_port, + $enable_ssl = $sonarr::params::enable_ssl, + $launch_browser = $sonarr::params::launch_browser, + $api_key = $sonarr::params::api_key, + $authentication_method = $sonarr::params::authentication_method, + $authentication_required = $sonarr::params::authentication_required, + $branch = $sonarr::params::branch, + $log_level = $sonarr::params::log_level, + $ssl_cert_path = $sonarr::params::ssl_cert_path, + $ssl_cert_password = $sonarr::params::ssl_cert_password, + $url_base = $sonarr::params::url_base, + $instance_name = $sonarr::params::instance_name, ) inherits sonarr::params { include sonarr::install + include sonarr::config include sonarr::service - Class['sonarr::install'] -> Class['sonarr::service'] + Class['sonarr::install'] -> Class['sonarr::config'] -> Class['sonarr::service'] } diff --git a/modules/sonarr/manifests/install.pp b/modules/sonarr/manifests/install.pp index 0aa2b01..fbe4c58 100644 --- a/modules/sonarr/manifests/install.pp +++ b/modules/sonarr/manifests/install.pp @@ -2,7 +2,7 @@ class sonarr::install ( $packages = $sonarr::packages, $user = $sonarr::user, - $group = $sonarr::user, + $group = $sonarr::group, $base_path = $sonarr::base_path, $install_path = $sonarr::install_path, $config_folder = $sonarr::config_folder, diff --git a/modules/sonarr/manifests/params.pp b/modules/sonarr/manifests/params.pp index 339e71d..33ae09a 100644 --- a/modules/sonarr/manifests/params.pp +++ b/modules/sonarr/manifests/params.pp @@ -1,6 +1,6 @@ # sonarr params class sonarr::params ( - $packages = [ + Array[String] $packages = [ 'mediainfo', 'libzen', 'libmediainfo', @@ -13,15 +13,36 @@ class sonarr::params ( 'python3-dbus', 'libxslt-devel' ], - $user = 'sonarr', - $base_path = '/opt/sonarr', - $install_path = '/opt/sonarr/bin', - $config_folder = "/home/${user}/.config", - $app_folder = "/home/${user}/.config/Sonarr", - $archive_version = '4.0.5', - $archive_name = 'Sonarr.main.linux-x64.tar.gz', - $archive_url = "https://git.query.consul/api/packages/unkinben/generic/sonarr/${archive_version}/", - $executable = 'Sonarr/Sonarr', - $service_enable = true, - $service_name = 'sonarr', -){} + String $user = 'sonarr', + String $group = 'sonarr', + Stdlib::Absolutepath $base_path = '/opt/sonarr', + Stdlib::Absolutepath $install_path = '/opt/sonarr/bin', + Stdlib::Absolutepath $config_folder = '/home/sonarr/.config', + Stdlib::Absolutepath $app_folder = '/home/sonarr/.config/Sonarr', + String $archive_version = '4.0.5', + String $archive_name = 'Sonarr.main.linux-x64.tar.gz', + Stdlib::HTTPUrl $archive_url = "https://git.query.consul/api/packages/unkinben/generic/sonarr/${archive_version}/", + String $executable = 'Sonarr/Sonarr', + String $service_name = 'sonarr', + Boolean $service_enable = true, + + # params for the configuration file + Stdlib::Host $bind_address = '127.0.0.1', + Stdlib::Port $port = 8989, + Stdlib::Port $ssl_port = 9898, + 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 = 'Sonarr', +) { } diff --git a/modules/sonarr/manifests/service.pp b/modules/sonarr/manifests/service.pp index 875440a..6d8dcf2 100644 --- a/modules/sonarr/manifests/service.pp +++ b/modules/sonarr/manifests/service.pp @@ -3,7 +3,7 @@ class sonarr::service ( $service_enable = $sonarr::service_enable, $service_name = $sonarr::service_name, $user = $sonarr::user, - $group = $sonarr::user, + $group = $sonarr::group, $install_path = $sonarr::install_path, $executable = $sonarr::executable, $base_path = $sonarr::base_path, @@ -12,9 +12,10 @@ class sonarr::service ( include ::systemd systemd::unit_file { "${service_name}.service": - content => template('sonarr/sonarr.service.erb'), - enable => true, - active => true, + content => template('sonarr/sonarr.service.erb'), + enable => true, + active => true, + subscribe => File["${base_path}/config.xml"], } } } diff --git a/modules/sonarr/templates/sonarr_config.xml.erb b/modules/sonarr/templates/sonarr_config.xml.erb new file mode 100644 index 0000000..069dff6 --- /dev/null +++ b/modules/sonarr/templates/sonarr_config.xml.erb @@ -0,0 +1,16 @@ + + <%= @bind_address %> + <%= @port %> + <%= @ssl_port %> + <%= @enable_ssl.to_s.capitalize %> + <%= @launch_browser.to_s.capitalize %> + <%= @api_key %> + <%= @authentication_method %> + <%= @authentication_required %> + <%= @branch %> + <%= @log_level %> + <%= @ssl_cert_path || '' %> + <%= @ssl_cert_password || '' %> + <%= @url_base || '' %> + <%= @instance_name %> +