# Copyright 2015 Josh Farwell, unless otherwise noted.
#
class mailman3::core (
- $install_mailman = $mailman3::params::install_mailman,
- $mailman_version = $mailman3::params::version,
+ $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_options = {},
) inherits mailman3::params {
# Make sure parameters are properly formatted
- validate_bool($install_mailman)
- validate_string($mailman_version)
+ validate_bool($install_core)
+ validate_string($core_version)
+ validate_bool($core_manage_database)
+ validate_bool($core_manage_firewall)
+ validate_hash($core_override_options)
+
+ $core_options = merge($mailman3::params::core_default_options, $core_override_options)
anchor { 'mailman3::core::begin': }
anchor { 'mailman3::core::end': }
class { '::mailman3::core::install':
- install_mailman => $install_mailman,
- mailman_version => $mailman_version,
+ install_core => $install_core,
+ core_version => $core_version,
}
- #class { '::mailman3::core::config':
- #default_secure_options => $mailman3::params::default_secure_options,
- #manage_database => $manage_database,
- #manage_firewall => $manage_firewall,
- #options => $options,
- #override_secure_options => $override_secure_options,
- #}
+ class { '::mailman3::core::config':
+ core_manage_database => $core_manage_database,
+ core_manage_firewall => $core_manage_firewall,
+ core_options => $core_options,
+ }
Anchor['mailman3::core::begin'] ->
Class['mailman3::core::install'] ->
- #Class['mailman3::core::config'] ->
+ Class['mailman3::core::config'] ->
Anchor['mailman3::core::end']
}
--- /dev/null
+# == Class: mailman3::core::config
+#
+# Full description of class mailman3 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
+#
+# class { 'mailman3':
+# servers => [ 'pool.ntp.org', 'ntp.local.company.com' ],
+# }
+#
+# === Authors
+#
+# Josh Farwell <jfarwell@linuxfoundation.org>
+#
+# === Copyright
+#
+# Copyright 2015 Josh Farwell, unless otherwise noted.
+#
+class mailman3::core::config (
+ $core_manage_database,
+ $core_manage_firewall,
+ $core_options,
+) {
+ validate_bool($core_manage_database)
+ validate_bool($core_manage_firewall)
+ validate_hash($core_options)
+
+ anchor{ 'mailman3::core::config::begin': }
+ anchor{ 'mailman3::core::config::end': }
+
+ # TODO: generate secure admin password for REST interface
+ file { '/etc/mailman.cfg':
+ ensure => file,
+ owner => 'mailman',
+ group => 'mailman',
+ mode => '0640',
+ content => template('mailman3/mailman.cfg.erb')
+ }
+
+}
# Copyright 2015 Josh Farwell, unless otherwise noted.
#
class mailman3::core::install (
- $install_mailman,
- $mailman_version,
+ $install_core,
+ $core_version,
) {
- validate_bool($install_mailman)
- validate_string($mailman_version)
+ validate_bool($install_core)
+ validate_string($core_version)
- if ($install_mailman) {
+ if ($install_core) {
include mailman3::repo
package { 'mailman3':
- ensure => $mailman_version,
+ ensure => $core_version,
require => Class['::mailman3::repo']
}
# TODO: Strategy for organizing this manifest
# TODO: Secure_default_options hash
# Mangement Booleans
- $install_mailman = true
+ $core_manage_database = true
+ $core_manage_firewall = true
+ $install_core = true
+
+ # Shared values
+ $rest_admin_user = 'restadmin'
+ $rest_admin_pass = 'restpass'
# Mailman Core values
- $mailman_version = 'installed' # could also be 3.0.0
- $site_owner = undef
+ $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
+
+ # Mailman Core default options hashes
+ $core_default_options = {
+ 'mailman' => {
+ 'site_owner' => $mailman3::params::core_site_owner,
+ 'layout' => $mailman3::params::core_layout,
+ },
- # default options hash
- $default_options = {
- 'core' => {
- 'site_owner' => $mailman3::params::site_owner_email,
+ 'paths.fhs' => {
+ 'bin_dir' => $mailman3::params::core_bin_dir,
+ 'var_dir' => $mailman3::params::core_var_dir,
+ 'queue_dir' => $mailman3::params::core_queue_dir,
+ 'log_dir' => $mailman3::params::core_log_dir,
+ 'lock_dir' => $mailman3::params::core_lock_dir,
+ 'ext_dir' => $mailman3::params::core_ext_dir,
+ 'pid_file' => $mailman3::params::core_pid_file,
},
+
+ 'webservice' => {
+ 'admin_user' => $mailman3::params::rest_admin_user,
+ 'admin_pass' => $mailman3::params::rest_admin_pass,
+ }
+
}
}
--- /dev/null
+require 'spec_helper'
+
+describe 'mailman3::core::config', :type => :class do
+
+ # since we have no default parameters defined,
+ # we should fail if nothing is passed
+ context 'with defaults for all parameters' do
+ let (:params) {{}}
+ it { is_expected.to_not compile }
+ end
+
+ # assumed default parameters from params.pp
+ context 'with assumed default parameters' do
+ let (:params) {
+ {
+ 'core_manage_database' => false,
+ 'core_manage_firewall' => false,
+ 'core_options' => {
+ 'mailman' => {
+ 'site_owner' => 'root@localhost',
+ 'layout' => 'fhs',
+ },
+ 'paths.fhs' => {
+ 'bin_dir' => '/usr/libexec/mailman3',
+ 'var_dir' => '/var/lib/mailman3',
+ 'queue_dir' => '/var/spool/mailman3',
+ 'log_dir' => '/var/log/mailman3',
+ 'lock_dir' => '/run/lock/mailman3',
+ 'ext_dir' => '/etc/mailman3.d',
+ 'pid_file' => '/run/mailman3/master.pid',
+ },
+ 'webservice' => {
+ 'admin_user' => 'restadmin',
+ 'admin_pass' => 'GENERATE',
+ },
+ },
+ } }
+
+ it { is_expected.to contain_file('/etc/mailman.cfg').with(
+ 'ensure' => 'file',
+ 'owner' => 'mailman',
+ 'group' => 'mailman',
+ 'mode' => '0640',
+ '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",
+ ) }
+
+ end
+
+ context 'with user defined parameters' do
+ let (:params) {
+ {
+ 'core_manage_database' => false,
+ 'core_manage_firewall' => false,
+ 'core_options' => {
+ 'mailman' => {
+ 'site_owner' => 'admin@example.com',
+ 'layout' => 'fhs',
+ },
+ 'paths.fhs' => {
+ 'bin_dir' => '/foo/libexec/mailman3',
+ 'var_dir' => '/foo/lib/mailman3',
+ 'queue_dir' => '/foo/spool/mailman3',
+ 'log_dir' => '/foo/log/mailman3',
+ 'lock_dir' => '/foo/lock/mailman3',
+ 'ext_dir' => '/foo/mailman3.d',
+ 'pid_file' => '/foo/mailman3/master.pid',
+ },
+ 'webservice' => {
+ 'admin_user' => 'fooadmin',
+ 'admin_pass' => 'bar',
+ },
+ 'testsection' => {
+ 'test_value' => 'foobar',
+ },
+ },
+ } }
+
+ it { is_expected.to contain_file('/etc/mailman.cfg').with(
+ 'ensure' => 'file',
+ 'owner' => 'mailman',
+ 'group' => 'mailman',
+ 'mode' => '0640',
+ '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",
+ ) }
+
+ end
+
+end
# default parameters from params.pp
let(:params) {
{
- 'install_mailman' => true,
- 'mailman_version' => 'installed',
+ 'install_core' => true,
+ 'core_version' => 'installed',
}
}
# should not install if the flags are set
let(:params) {
{
- 'install_mailman' => false,
- 'mailman_version' => 'installed',
+ 'install_core' => false,
+ 'core_version' => 'installed',
}
}
it { is_expected.to contain_class('mailman3::params') }
it { is_expected.to contain_anchor('mailman3::core::begin') }
it { is_expected.to contain_class('mailman3::core::install') }
+ it { is_expected.to contain_class('mailman3::core::config') }
it { is_expected.to contain_anchor('mailman3::core::end') }
end
end
--- /dev/null
+; MANAGED BY PUPPET
+
+<% @core_options.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 -%>