From 9964fca2f4ba7749d161b22c9270c871b5900520 Mon Sep 17 00:00:00 2001 From: Josh Farwell Date: Wed, 17 Jun 2015 11:19:26 -0700 Subject: [PATCH] Configured hyperkitty.cfg file for Mailman Core In order to connect to Hyperkitty, Mailman needs to know its URL and API key, held in its own config file. A best-case scenario would be for the web portion of the module to export a resource that defines this file based on its own config, but for now we will duplicate the variables. Also cleaned up some formatting. Change-Id: Ifd92cea8069a1ebcf8d919c5161ac5e5cd60a01a Signed-off-by: Josh Farwell --- manifests/core.pp | 14 ++++++++++---- manifests/core/config.pp | 10 ++++++++++ manifests/params.pp | 34 +++++++++++++++++++++++----------- spec/classes/core__config_spec.rb | 29 +++++++++++++++++++++++++++++ templates/hyperkitty.cfg.erb | 15 +++++++++++++++ 5 files changed, 87 insertions(+), 15 deletions(-) create mode 100644 templates/hyperkitty.cfg.erb diff --git a/manifests/core.pp b/manifests/core.pp index 32259ac..5b717cf 100644 --- a/manifests/core.pp +++ b/manifests/core.pp @@ -36,25 +36,30 @@ # Copyright 2015 Josh Farwell, unless otherwise noted. # class mailman3::core ( - $install_core = $mailman3::params::install_core, - $core_version = $mailman3::params::core_version, $core_manage_database = $mailman3::params::core_manage_database, $core_manage_firewall = $mailman3::params::core_manage_firewall, + $core_override_hyperkittycfg = {}, $core_override_options = {}, $core_override_allowed_hosts = {}, + $core_version = $mailman3::params::core_version, $db_tag = $mailman3::params::core_db_tag, + $install_core = $mailman3::params::install_core, ) inherits mailman3::params { # Make sure parameters are properly formatted validate_bool($install_core) - validate_string($db_tag) - validate_string($core_version) validate_bool($core_manage_database) validate_bool($core_manage_firewall) + validate_hash($core_override_hyperkittycfg) validate_hash($core_override_options) validate_hash($core_override_allowed_hosts) + validate_string($db_tag) + validate_string($core_version) # Merge together options with defaults from ::params, right most wins + $core_hyperkittycfg = merge($mailman3::params::core_default_hyperkittycfg, + $core_override_hyperkittycfg) + $core_options = merge($mailman3::params::core_default_options, $core_override_options) @@ -73,6 +78,7 @@ class mailman3::core ( core_manage_database => $core_manage_database, core_manage_firewall => $core_manage_firewall, core_options => $core_options, + core_hyperkittycfg => $core_hyperkittycfg, core_allowed_hosts => $core_allowed_hosts, db_tag => $db_tag, } diff --git a/manifests/core/config.pp b/manifests/core/config.pp index 25e8836..7dad6a3 100644 --- a/manifests/core/config.pp +++ b/manifests/core/config.pp @@ -37,6 +37,7 @@ # class mailman3::core::config ( $core_allowed_hosts, + $core_hyperkittycfg, $core_manage_database, $core_manage_firewall, $core_options, @@ -45,6 +46,7 @@ class mailman3::core::config ( validate_string($db_tag) validate_bool($core_manage_database) validate_bool($core_manage_firewall) + validate_hash($core_hyperkittycfg) validate_hash($core_options) validate_hash($core_allowed_hosts) @@ -60,6 +62,14 @@ class mailman3::core::config ( content => template('mailman3/mailman.cfg.erb') } + file { '/etc/mailman3.d/hyperkitty.cfg': + ensure => file, + owner => 'mailman', + group => 'mailman', + mode => '0640', + content => template('mailman3/hyperkitty.cfg.erb') + } + if ($core_manage_firewall) { class { 'mailman3::core::config::firewall': core_manage_firewall => $core_manage_firewall, diff --git a/manifests/params.pp b/manifests/params.pp index 7613209..4a7c1c4 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -49,23 +49,35 @@ class mailman3::params { $rest_admin_pass = 'restpass' # Mailman Core values - $core_db_tag = 'mailman3-core' - $core_layout = 'fhs' - $core_bin_dir = '/usr/libexec/mailman3' - $core_var_dir = '/var/lib/mailman3' - $core_queue_dir = '/var/spool/mailman3' - $core_log_dir = '/var/log/mailman3' - $core_lock_dir = '/run/lock/mailman3' - $core_ext_dir = '/etc/mailman3.d' - $core_pid_file = '/run/mailman3/master.pid' - $core_site_owner = 'root@localhost' - $core_version = 'installed' # could also be 3.0.0 + $core_db_tag = 'mailman3-core' + $core_version = 'installed' # could also be 3.0.0 + + $core_layout = 'fhs' + $core_bin_dir = '/usr/libexec/mailman3' + $core_var_dir = '/var/lib/mailman3' + $core_queue_dir = '/var/spool/mailman3' + $core_log_dir = '/var/log/mailman3' + $core_lock_dir = '/run/lock/mailman3' + $core_ext_dir = '/etc/mailman3.d' + $core_pid_file = '/run/mailman3/master.pid' + $core_site_owner = 'root@localhost' + + $core_hyperkitty_baseurl = 'http://localhost:8000/archives' + $core_hyperkitty_apikey = 'SecretArchiverAPIKey' # Mailman Core default options hashes $core_default_allowed_hosts = { 'rest' => ['0.0.0.0'], 'lmtp' => ['0.0.0.0'], } + + $core_default_hyperkittycfg = { + 'general' => { + 'base_url' => $mailman3::params::core_hyperkitty_baseurl, + 'api_key' => $mailman3::params::core_hyperkitty_apikey, + } + } + $core_default_options = { 'mailman' => { 'site_owner' => $mailman3::params::core_site_owner, diff --git a/spec/classes/core__config_spec.rb b/spec/classes/core__config_spec.rb index 0a2a028..a0a1c84 100644 --- a/spec/classes/core__config_spec.rb +++ b/spec/classes/core__config_spec.rb @@ -18,6 +18,12 @@ describe 'mailman3::core::config', :type => :class do 'rest' => ['0.0.0.0'], 'lmtp' => ['0.0.0.0'], }, + 'core_hyperkittycfg' => { + 'general' => { + 'base_url' => 'http://localhost:8000/archives', + 'api_key' => 'SecretArchiverAPIKey', + }, + }, 'core_manage_database' => false, 'core_manage_firewall' => true, 'core_options' => { @@ -49,6 +55,14 @@ describe 'mailman3::core::config', :type => :class do 'content' => "; MANAGED BY PUPPET\n\n[mailman]\n layout = fhs\n site_owner = root@localhost\n\n[paths.fhs]\n bin_dir = /usr/libexec/mailman3\n ext_dir = /etc/mailman3.d\n lock_dir = /run/lock/mailman3\n log_dir = /var/log/mailman3\n pid_file = /run/mailman3/master.pid\n queue_dir = /var/spool/mailman3\n var_dir = /var/lib/mailman3\n\n[webservice]\n admin_pass = GENERATE\n admin_user = restadmin\n\n", ) } + it { is_expected.to contain_file('/etc/mailman3.d/hyperkitty.cfg').with( + 'ensure' => 'file', + 'owner' => 'mailman', + 'group' => 'mailman', + 'mode' => '0640', + 'content' => "; MANAGED BY PUPPET\n\n[general]\napi_key: SecretArchiverAPIKey\nbase_url: http://localhost:8000/archives\n\n" + ) } + it { is_expected.to contain_class('mailman3::core::config::firewall').with( 'core_allowed_hosts' => { 'rest' => ['0.0.0.0'], @@ -66,6 +80,12 @@ describe 'mailman3::core::config', :type => :class do 'rest' => ['10.0.0.1'], 'lmtp' => ['10.0.0.1'], }, + 'core_hyperkittycfg' => { + 'general' => { + 'base_url' => 'http://example.com/archives', + 'api_key' => 'superdifferentpassword', + }, + }, 'core_manage_database' => false, 'core_manage_firewall' => true, 'core_options' => { @@ -100,6 +120,14 @@ describe 'mailman3::core::config', :type => :class do 'content' => "; MANAGED BY PUPPET\n\n[mailman]\n layout = fhs\n site_owner = admin@example.com\n\n[paths.fhs]\n bin_dir = /foo/libexec/mailman3\n ext_dir = /foo/mailman3.d\n lock_dir = /foo/lock/mailman3\n log_dir = /foo/log/mailman3\n pid_file = /foo/mailman3/master.pid\n queue_dir = /foo/spool/mailman3\n var_dir = /foo/lib/mailman3\n\n[testsection]\n test_value = foobar\n\n[webservice]\n admin_pass = bar\n admin_user = fooadmin\n\n", ) } + it { is_expected.to contain_file('/etc/mailman3.d/hyperkitty.cfg').with( + 'ensure' => 'file', + 'owner' => 'mailman', + 'group' => 'mailman', + 'mode' => '0640', + 'content' => "; MANAGED BY PUPPET\n\n[general]\napi_key: superdifferentpassword\nbase_url: http://example.com/archives\n\n" + ) } + it { is_expected.to contain_class('mailman3::core::config::firewall').with( 'core_allowed_hosts' => { 'rest' => ['10.0.0.1'], 'lmtp' => ['10.0.0.1'] }, ) } @@ -111,6 +139,7 @@ describe 'mailman3::core::config', :type => :class do let (:params) { { 'db_tag' => 'testtag', + 'core_hyperkittycfg' => {}, 'core_manage_database' => false, 'core_manage_firewall' => false, 'core_allowed_hosts' => {}, diff --git a/templates/hyperkitty.cfg.erb b/templates/hyperkitty.cfg.erb new file mode 100644 index 0000000..9f515f8 --- /dev/null +++ b/templates/hyperkitty.cfg.erb @@ -0,0 +1,15 @@ +; MANAGED BY PUPPET + +<% @core_hyperkittycfg.sort.map do |section, var_hash| -%> +[<%= section %>] +<% var_hash.sort.map do |var, val_or_arr| -%> +<% if val_or_arr.is_a? Array -%> +<% val_or_arr.each do |val| -%> +<%= var %>: <%= val %> +<% end -%> +<% else -%> +<%= var %>: <%= val_or_arr %> +<% end -%> +<% end -%> + +<% end -%> -- 2.16.6