diff --git a/.gitignore b/.gitignore deleted file mode 100644 index dade81e..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -Gemfile.lock -.bundled_gems/ diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 019213a..0000000 --- a/Gemfile +++ /dev/null @@ -1,15 +0,0 @@ -source 'https://rubygems.org' - -if File.exists?('/home/zuul/src/git.openstack.org/openstack-infra/puppet-openstack_infra_spec_helper') - gem_checkout_method = {:path => '/home/zuul/src/git.openstack.org/openstack-infra/puppet-openstack_infra_spec_helper'} -else - gem_checkout_method = {:git => 'https://git.openstack.org/openstack-infra/puppet-openstack_infra_spec_helper'} -end -gem_checkout_method[:require] = false - -group :development, :test, :system_tests do - gem 'puppet-openstack_infra_spec_helper', - gem_checkout_method -end - -# vim:ft=ruby diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d645695..0000000 --- a/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index 2ff2e00..ec889a9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ -# OpenStack Mailman Module +This project is no longer maintained. -This module installs and configures Mailman +The contents of this repository are still available in the Git +source code management system. To see the contents of this +repository before it reached its end of life, please check out the +previous commit with "git checkout HEAD^1". + +For any further questions, please email +service-discuss@lists.opendev.org or join #opendev on OFTC. diff --git a/Rakefile b/Rakefile deleted file mode 100644 index 7f22329..0000000 --- a/Rakefile +++ /dev/null @@ -1,8 +0,0 @@ -require 'rubygems' -require 'puppetlabs_spec_helper/rake_tasks' -require 'puppet-lint/tasks/puppet-lint' -PuppetLint.configuration.fail_on_warnings = true -PuppetLint.configuration.send('disable_80chars') -PuppetLint.configuration.send('disable_autoloader_layout') -PuppetLint.configuration.send('disable_class_inherits_from_params_class') -PuppetLint.configuration.send('disable_class_parameter_defaults') \ No newline at end of file diff --git a/files/index.html b/files/index.html deleted file mode 100644 index 1c70d95..0000000 --- a/files/index.html +++ /dev/null @@ -1,4 +0,0 @@ -
This is the default web page for this server.
-The web server software is running but no content has been added, yet.
- diff --git a/lib/puppet/provider/maillist/noaliasmailman.rb b/lib/puppet/provider/maillist/noaliasmailman.rb deleted file mode 100644 index 99f4010..0000000 --- a/lib/puppet/provider/maillist/noaliasmailman.rb +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright (c) 2014 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Puppet maillist provider for mailman mailing lists. -# Based on the 'mailman' package provider in puppet 2.7, except this one -# does not muck with aliases. - -require 'puppet/provider/parsedfile' - -Puppet::Type.type(:maillist).provide(:noaliasmailman) do - - defaultfor :kernel => 'Linux' - - if [ "CentOS", "RedHat", "Fedora" ].any? { |os| Facter.value(:operatingsystem) == os } - commands :list_lists => "/usr/lib/mailman/bin/list_lists", :rmlist => "/usr/lib/mailman/bin/rmlist", :newlist => "/usr/lib/mailman/bin/newlist" - commands :mailman => "/usr/lib/mailman/mail/mailman" - else - # This probably won't work for non-Debian installs, but this path is sure not to be in the PATH. - commands :list_lists => "list_lists", :rmlist => "rmlist", :newlist => "newlist" - commands :mailman => "/var/lib/mailman/mail/mailman" - end - - mk_resource_methods - - # Return a list of existing mailman instances. - def self.instances - list_lists('--bare'). - split("\n"). - collect { |line| new(:ensure => :present, :name => line.strip) } - end - - # Prefetch our list list, yo. - def self.prefetch(lists) - instances.each do |prov| - if list = lists[prov.name] || lists[prov.name.downcase] - list.provider = prov - end - end - end - - # Create the list. - def create - args = [] - if val = @resource[:mailserver] - args << "--emailhost" << val - end - if val = @resource[:webserver] - args << "--urlhost" << val - end - - args << self.name - if val = @resource[:admin] - args << val - else - raise ArgumentError, "Mailman lists require an administrator email address" - end - if val = @resource[:password] - args << val - else - raise ArgumentError, "Mailman lists require an administrator password" - end - newlist(*args) - end - - # Delete the list. - def destroy(purge = false) - args = [] - args << "--archives" if purge - args << self.name - rmlist(*args) - end - - # Does our list exist already? - def exists? - properties[:ensure] != :absent - end - - # Clear out the cached values. - def flush - @property_hash.clear - end - - # Look up the current status. - def properties - if @property_hash.empty? - @property_hash = query || {:ensure => :absent} - @property_hash[:ensure] = :absent if @property_hash.empty? - end - @property_hash.dup - end - - # Remove the list and its archives. - def purge - destroy(true) - end - - # Pull the current state of the list from the full list. We're - # getting some double entendre here.... - def query - self.class.instances.each do |list| - if list.name == self.name or list.name.downcase == self.name - return list.properties - end - end - nil - end -end diff --git a/lib/puppet/provider/mailman_list/mailman.rb b/lib/puppet/provider/mailman_list/mailman.rb deleted file mode 100644 index cfd07aa..0000000 --- a/lib/puppet/provider/mailman_list/mailman.rb +++ /dev/null @@ -1,132 +0,0 @@ -# Copyright (c) 2014 Hewlett-Packard Development Company, L.P. -# Copyright (C) 2017 Red Hat, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Puppet maillist provider for mailman mailing lists. -# Based on the 'mailman' package provider in puppet 2.7, except this one -# does not muck with aliases. - -require 'puppet/provider/parsedfile' - -Puppet::Type.type(:mailman_list).provide(:mailman) do - - defaultfor :kernel => 'Linux' - - if [ "CentOS", "RedHat", "Fedora" ].any? { |os| Facter.value(:operatingsystem) == os } - commands :list_lists => "/usr/lib/mailman/bin/list_lists", :rmlist => "/usr/lib/mailman/bin/rmlist", :newlist => "/usr/lib/mailman/bin/newlist" - commands :mailman => "/usr/lib/mailman/mail/mailman" - else - # This probably won't work for non-Debian installs, but this path is sure not to be in the PATH. - commands :list_lists => "list_lists", :rmlist => "rmlist", :newlist => "newlist" - commands :mailman => "/var/lib/mailman/mail/mailman" - end - - mk_resource_methods - - # Return a list of existing mailman instances. - def self.instances - ret = [] - Dir.entries('/srv/mailman').each do |entry| - if (entry == '.' || entry == '..') then next end - path = File.join('/srv/mailman', entry) - if !File.directory?(path) then next end - if !File.exists?(File.join(path, 'lists')) then next end - ENV['MAILMAN_SITE_DIR'] = path - list_lists('--bare').split("\n").each do |line| - ret << new(:ensure => :present, :name => line.strip+'@'+entry) - end - end - return ret - end - - def self.prefetch(lists) - instances.each do |prov| - if list = lists[prov.name] || lists[prov.name.downcase] - list.provider = prov - end - end - end - - def setenv - r = self.name.split('@') - ENV['MAILMAN_SITE_DIR'] = File.join('/srv/mailman', r[1]) - print "Mailman install dir", ENV['MAILMAN_SITE_DIR'], "\n" - return r[0] - end - - def create - print "create ", self.name, "\n" - name = setenv - args = [] - if val = @resource[:mailserver] - args << "--emailhost" << val - end - if val = @resource[:webserver] - args << "--urlhost" << val - end - - args << name - if val = @resource[:admin] - args << val - else - raise ArgumentError, "Mailman lists require an administrator email address" - end - if val = @resource[:password] - args << val - else - raise ArgumentError, "Mailman lists require an administrator password" - end - newlist(*args) - puts "done" - end - - def destroy(purge = false) - puts "destroy", self.name - name = setenv - args = [] - args << "--archives" if purge - args << name - rmlist(*args) - end - - def exists? - properties[:ensure] != :absent - end - - def flush - @property_hash.clear - end - - def properties - if @property_hash.empty? - @property_hash = query || {:ensure => :absent} - @property_hash[:ensure] = :absent if @property_hash.empty? - end - @property_hash.dup - end - - def purge - destroy(true) - end - - def query - self.class.instances.each do |list| - if list.name == self.name or list.name.downcase == self.name - return list.properties - end - end - nil - end -end diff --git a/lib/puppet/type/mailman_list.rb b/lib/puppet/type/mailman_list.rb deleted file mode 100644 index a61fcb6..0000000 --- a/lib/puppet/type/mailman_list.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'puppet/provider/parsedfile' - -Puppet::Type.newtype(:mailman_list) do - ensurable - newparam(:name) do - desc "The name of the mailing list." - end - - newparam(:install) do - desc "The mailmain installation to use." - end - newparam(:admin) do - desc "The email address of the administrator." - end - newparam(:description) do - desc "The description of the mailing list." - end - newparam(:mailserver) do - desc "The FQDN of the mailing list host." - end - newparam(:password) do - desc "The admin password for the list." - end - newparam(:provider) do - desc "The backend to use for this mailman_list." - end - newparam(:webserver) do - desc "The FQDN of the host providing web archives." - end -end diff --git a/manifests/init.pp b/manifests/init.pp deleted file mode 100644 index cb275c5..0000000 --- a/manifests/init.pp +++ /dev/null @@ -1,73 +0,0 @@ -# == Class: mailman -# -class mailman( - $vhost_name = $::fqdn, - $multihost = false, -) { - - include httpd - - package { 'mailman': - ensure => installed, - } - - if ($multihost) { - file { '/srv/mailman': - ensure => directory, - owner => 'root', - group => 'root', - mode => '0755', - } - file { '/etc/mailman/mm_cfg.py': - ensure => present, - owner => 'root', - group => 'root', - mode => '0444', - content => template('mailman/mm_cfg_multihost.py.erb'), - replace => true, - require => Package['mailman'], - } - } else { - ::httpd::vhost { $vhost_name: - port => 80, - docroot => '/var/www/', - priority => '50', - template => 'mailman/mailman.vhost.erb', - } - file { '/etc/mailman/mm_cfg.py': - ensure => present, - owner => 'root', - group => 'root', - mode => '0444', - content => template('mailman/mm_cfg.py.erb'), - replace => true, - require => Package['mailman'], - } - service { 'mailman': - ensure => running, - hasrestart => true, - hasstatus => false, - subscribe => File['/etc/mailman/mm_cfg.py'], - require => Package['mailman'], - } - } - - httpd_mod { 'rewrite': - ensure => present, - before => Service['httpd'], - } - - httpd_mod { 'cgid': - ensure => present, - before => Service['httpd'], - } - - file { '/var/www/index.html': - ensure => present, - source => 'puppet:///modules/mailman/index.html', - owner => 'root', - group => 'root', - replace => true, - mode => '0444', - } -} diff --git a/manifests/site.pp b/manifests/site.pp deleted file mode 100644 index 3df6852..0000000 --- a/manifests/site.pp +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (C) 2017 Red Hat, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This processes the passed in directory (which should be like -# "/srv/mailman/something/templates/en") to identify the language and -# creates a symlink to the target installed templates for that -# language. - -define mailman::language_link() -{ - $parts = split($name, '/') - $lname = $parts[-1] - $target = sprintf('/usr/share/mailman/%s', $lname) - - file { $name: - ensure => link, - target => $target, - } -} - -define mailman::site ( - $default_email_host, - $default_url_host, - $install_languages = ['en']) -{ - include httpd - - $root = "/srv/mailman/${name}" - $dirs = [ - "${root}/", - "${root}/etc", - "${root}/lists", - "${root}/logs", - "${root}/locks", - "${root}/data", - "${root}/spam", - "${root}/mail", - "${root}/run", - "${root}/archives", - "${root}/archives/public", - "${root}/archives/private", - "${root}/templates", - "${root}/qfiles", - "${root}/qfiles/in", - "${root}/qfiles/out", - "${root}/qfiles/commands", - "${root}/qfiles/bounces", - "${root}/qfiles/news", - "${root}/qfiles/archive", - "${root}/qfiles/shunt", - "${root}/qfiles/virgin", - "${root}/qfiles/bad", - "${root}/qfiles/retry", - "${root}/qfiles/maildir", - ] - - file { $dirs: - ensure => directory, - owner => 'list', - group => 'list', - mode => '2775', - } - - $install_template_dirs = regsubst ($install_languages, '^(.*)$', "${root}/templates/\\1") - - mailman::language_link { $install_template_dirs: } - - file { "/srv/mailman/${name}/etc/mm_cfg_local.py": - ensure => present, - content => template('mailman/mm_site_cfg.py.erb'), - } - - if ! defined(File['/etc/mailman/sites']) { - file { '/etc/mailman/sites': - ensure => present, - } - } - - file_line { "mailman_site_file_${name}": - require => File['/etc/mailman/sites'], - path => '/etc/mailman/sites', - line => "${default_email_host}: /srv/mailman/${name}", - } - - # We alias the resource name here so that it can resolve properly - # within the vhost template when evaluated as part of the vhost - # define (which will override $name). - $mailman_site_name = $name - ::httpd::vhost { $default_url_host: - port => 80, - docroot => '/var/www/', - priority => '50', - content => template('mailman/mailman_multihost.vhost.erb'), - } - - file { "/etc/init.d/mailman-${name}": - ensure => present, - content => template('mailman/mailman.init.erb'), - owner => 'root', - group => 'root', - mode => '0755', - } - - service { "mailman-${name}": - enable => true, - hasrestart => true, - hasstatus => false, - require => File["/etc/init.d/mailman-${name}"], - } -} diff --git a/metadata.json b/metadata.json deleted file mode 100644 index ad15470..0000000 --- a/metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "openstackinfra-mailman", - "version": "0.0.1", - "author": "OpenStack CI", - "summary": "Puppet module for Mailman", - "license": "Apache 2.0", - "source": "https://git.openstack.org/openstack-infra/puppet-mailman.git", - "project_page": "http://docs.openstack.org/infra/system-config/", - "issues_url": "https://storyboard.openstack.org/#!/project/795", - "dependencies": [] -} diff --git a/spec/acceptance/basic_spec.rb b/spec/acceptance/basic_spec.rb deleted file mode 100644 index b27c76e..0000000 --- a/spec/acceptance/basic_spec.rb +++ /dev/null @@ -1,97 +0,0 @@ -require 'puppet-openstack_infra_spec_helper/spec_helper_acceptance' - -describe 'basic mailman', :if => ['debian', 'ubuntu'].include?(os[:family]) do - - def pp_path - base_path = File.dirname(__FILE__) - File.join(base_path, 'fixtures') - end - - def puppet_manifest - module_path = File.join(pp_path, 'default.pp') - File.read(module_path) - end - - it 'should work with no errors' do - apply_manifest(puppet_manifest, catch_failures: true) - end - - it 'should be idempotent' do - apply_manifest(puppet_manifest, catch_changes: true) - end - - describe command("curl http://localhost/cgi-bin/mailman/listinfo") do - its(:stdout) { should contain('Mailing Lists') } - end - - expected_vhost = <