Configured hyperkitty.cfg file for Mailman Core 63/163/1
authorJosh Farwell <jfarwell@linuxfoundation.org>
Wed, 17 Jun 2015 18:19:26 +0000 (11:19 -0700)
committerJosh Farwell <jfarwell@linuxfoundation.org>
Wed, 17 Jun 2015 18:25:46 +0000 (11:25 -0700)
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 <jfarwell@linuxfoundation.org>
manifests/core.pp
manifests/core/config.pp
manifests/params.pp
spec/classes/core__config_spec.rb
templates/hyperkitty.cfg.erb [new file with mode: 0644]

index 32259ac..5b717cf 100644 (file)
 # 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,
   }
index 25e8836..7dad6a3 100644 (file)
@@ -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,
index 7613209..4a7c1c4 100644 (file)
@@ -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,
index 0a2a028..a0a1c84 100644 (file)
@@ -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 (file)
index 0000000..9f515f8
--- /dev/null
@@ -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 -%>