--- /dev/null
+# Class: firewall
+#
+# Manages the installation of packages for operating systems that are
+# currently supported by the firewall type.
+#
+class firewall {
+ case $::kernel {
+ 'Linux': {
+ class { "${title}::linux": }
+ }
+ default: {
+ fail("${title}: Kernel '${::kernel}' is not currently supported")
+ }
+ }
+}
--- /dev/null
+class firewall::linux {
+ package { 'iptables':
+ ensure => present,
+ }
+
+ case $::operatingsystem {
+ 'RedHat', 'CentOS', 'Fedora': {
+ class { "${title}::redhat":
+ require => Package['iptables'],
+ }
+ }
+ 'Debian', 'Ubuntu': {
+ class { "${title}::debian":
+ require => Package['iptables'],
+ }
+ }
+ default: {}
+ }
+}
--- /dev/null
+class firewall::linux::debian {
+ package { 'iptables-persistent':
+ ensure => present,
+ }
+
+ # This isn't a real service/daemon. The start action loads rules, so just
+ # needs to be called on system boot.
+ service { 'iptables-persistent':
+ ensure => undef,
+ enable => true,
+ require => Package['iptables-persistent'],
+ }
+}
--- /dev/null
+class firewall::linux::redhat {
+ service { 'iptables':
+ ensure => running,
+ enable => true,
+ }
+}
--- /dev/null
+require 'spec_helper'
+
+describe 'firewall::linux::debian' do
+ it { should contain_package('iptables-persistent').with(
+ :ensure => 'present',
+ )}
+ it { should contain_service('iptables-persistent').with(
+ :ensure => nil,
+ :enable => 'true',
+ :require => 'Package[iptables-persistent]',
+ )}
+end
--- /dev/null
+require 'spec_helper'
+
+describe 'firewall::linux::redhat' do
+ it { should contain_service('iptables').with(
+ :ensure => 'running',
+ :enable => 'true',
+ )}
+end
--- /dev/null
+require 'spec_helper'
+
+describe 'firewall::linux' do
+ let(:facts_default) {{ :kernel => 'Linux' }}
+ it { should contain_package('iptables').with_ensure('present') }
+
+ context 'RedHat like' do
+ %w{RedHat CentOS Fedora}.each do |os|
+ context "operatingsystem => #{os}" do
+ let(:facts) { facts_default.merge({ :operatingsystem => os }) }
+ it { should contain_class('firewall::linux::redhat').with_require('Package[iptables]') }
+ end
+ end
+ end
+
+ context 'Debian like' do
+ %w{Debian Ubuntu}.each do |os|
+ context "operatingsystem => #{os}" do
+ let(:facts) { facts_default.merge({ :operatingsystem => os }) }
+ it { should contain_class('firewall::linux::debian').with_require('Package[iptables]') }
+ end
+ end
+ end
+end
--- /dev/null
+require 'spec_helper'
+
+describe 'firewall' do
+ context 'kernel => Linux' do
+ let(:facts) {{ :kernel => 'Linux' }}
+ it { should include_class('firewall::linux') }
+ end
+end
--- /dev/null
+../../../../lib
\ No newline at end of file
--- /dev/null
+../../../../manifests
\ No newline at end of file
require 'rubygems'
require 'bundler/setup'
+require 'rspec-puppet'
Bundler.require :default, :test
require behaviour.relative_path_from(Pathname.new(dir))
end
+fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures'))
+
RSpec.configure do |config|
config.mock_with :mocha
+ config.module_path = File.join(fixture_path, 'modules')
+ config.manifest_dir = File.join(fixture_path, 'manifests')
end