From: Josh Farwell Date: Tue, 9 Jun 2015 01:39:55 +0000 (-0700) Subject: Configured core service X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F24%2F124%2F4;p=puppet%2Fmodules%2Fmailman3.git Configured core service Added ::core::config, which creates an ini file for the mailman service from a template and an options hash. Defined the default mailman.cfg file in params. Refactored the rest of the core submodule to refer to the service as "core" instead of "mailman" to avoid confusion. Change-Id: Ide760844152e946020a95e4cd771c1c6e3fc4507 Signed-off-by: Josh Farwell --- diff --git a/manifests/core.pp b/manifests/core.pp index 2301e09..ec75976 100644 --- a/manifests/core.pp +++ b/manifests/core.pp @@ -36,33 +36,39 @@ # 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'] } diff --git a/manifests/core/config.pp b/manifests/core/config.pp new file mode 100644 index 0000000..ee25686 --- /dev/null +++ b/manifests/core/config.pp @@ -0,0 +1,59 @@ +# == 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 +# +# === 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') + } + +} diff --git a/manifests/core/install.pp b/manifests/core/install.pp index fadda27..bc49dbb 100644 --- a/manifests/core/install.pp +++ b/manifests/core/install.pp @@ -36,18 +36,18 @@ # 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'] } diff --git a/manifests/params.pp b/manifests/params.pp index aa80c05..e97a485 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -40,17 +40,48 @@ class mailman3::params { # 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, + } + } } diff --git a/spec/classes/core__config_spec.rb b/spec/classes/core__config_spec.rb new file mode 100644 index 0000000..7f377c1 --- /dev/null +++ b/spec/classes/core__config_spec.rb @@ -0,0 +1,88 @@ +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 diff --git a/spec/classes/core__install_spec.rb b/spec/classes/core__install_spec.rb index d53e186..4bf0735 100644 --- a/spec/classes/core__install_spec.rb +++ b/spec/classes/core__install_spec.rb @@ -5,8 +5,8 @@ describe 'mailman3::core::install', :type => :class do # default parameters from params.pp let(:params) { { - 'install_mailman' => true, - 'mailman_version' => 'installed', + 'install_core' => true, + 'core_version' => 'installed', } } @@ -29,8 +29,8 @@ describe 'mailman3::core::install', :type => :class do # should not install if the flags are set let(:params) { { - 'install_mailman' => false, - 'mailman_version' => 'installed', + 'install_core' => false, + 'core_version' => 'installed', } } diff --git a/spec/classes/core_spec.rb b/spec/classes/core_spec.rb index e320675..c1c43c2 100644 --- a/spec/classes/core_spec.rb +++ b/spec/classes/core_spec.rb @@ -7,6 +7,7 @@ describe 'mailman3::core', :type => :class do 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 diff --git a/templates/mailman.cfg.erb b/templates/mailman.cfg.erb new file mode 100644 index 0000000..b0f8619 --- /dev/null +++ b/templates/mailman.cfg.erb @@ -0,0 +1,15 @@ +; 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 -%>