summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README12
-rw-r--r--lib/puppet/parser/functions/guess_apache_version.rb39
-rw-r--r--manifests/module/alias.pp2
-rw-r--r--spec/functions/guess_apache_version.rb50
4 files changed, 98 insertions, 5 deletions
diff --git a/README b/README
index 45e4727..1c0c96c 100644
--- a/README
+++ b/README
@@ -46,12 +46,16 @@ have to be deployed to fit this schema.
source => "modules/site-apache/blah"
-Requirements:
+Requirements
+------------
* puppet 2.7 or newer
- * stdlib
- * templatewlv
-
+ * stdlib module
+ * templatewlv module
+ * facter >= 2.2
+ because we check for $::operatingsystemmajrelease on multiple places.
+ In Debian wheezy, facter needs to get upgraded from wheezy-backports.
+ The facter version of Debian jessie is new enough.
Usage
=====
diff --git a/lib/puppet/parser/functions/guess_apache_version.rb b/lib/puppet/parser/functions/guess_apache_version.rb
new file mode 100644
index 0000000..7537f6d
--- /dev/null
+++ b/lib/puppet/parser/functions/guess_apache_version.rb
@@ -0,0 +1,39 @@
+# Try to guess the version of apache to be installed.
+# Certain apache modules depend on each other, so we
+# need to evaluate the apache version before it gets
+# installed. This function decides which apache version
+# is going to be installed based on the `operatingsystemrelease`
+# fact.
+module Puppet::Parser::Functions
+ newfunction(:guess_apache_version, :type => :rvalue) do |args|
+ release = lookupvar('operatingsystemrelease')
+ unknown = 'unknown'
+
+ case lookupvar('operatingsystem')
+
+ when 'Debian'
+ case release
+ when /^7.*/
+ version = '2.2'
+ when /^8.*/
+ version = '2.4'
+ else
+ version = unknown
+ end
+
+ when 'Ubuntu'
+ case release
+ when /(12.04|12.10|13.04|13.10)/
+ version = '2.2'
+ when /(14.04|14.10|15.04|15.10|16.04)/
+ version = '2.4'
+ else
+ version = unknown
+ end
+
+ else
+ version = unknown
+ end
+ version
+ end
+end
diff --git a/manifests/module/alias.pp b/manifests/module/alias.pp
index 26d9f4a..33d26ef 100644
--- a/manifests/module/alias.pp
+++ b/manifests/module/alias.pp
@@ -7,7 +7,7 @@ class apache::module::alias ( $ensure = present )
# from 2.4, /etc/apache2/mods-enabled/alias.conf contains the "Require"
# directive which needs "authz_core" mod enabled
- if ( versioncmp($::apache_version, '2.4') >= 0 ) {
+ if ( guess_apache_version() == '2.4') {
class { 'authz_core': ensure => $ensure }
}
diff --git a/spec/functions/guess_apache_version.rb b/spec/functions/guess_apache_version.rb
new file mode 100644
index 0000000..b57a7a0
--- /dev/null
+++ b/spec/functions/guess_apache_version.rb
@@ -0,0 +1,50 @@
+require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper'))
+
+describe 'guess_apache_version function' do
+
+ #let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
+
+ it "should exist" do
+ expect(Puppet::Parser::Functions.function("guess_apache_version")).to eq("function_guess_apache_version")
+ end
+
+ context 'on debian 7.8' do
+ let(:facts) do
+ {
+ :operatingsystem => 'Debian',
+ :operatingsystemrelease => '7.8'
+ }
+ end
+ it "should return 2.2" do
+ result = scope.function_guess_apache_version([])
+ expect(result).to(eq('2.2'))
+ end
+ end
+
+ context 'on debian 8.0' do
+ let(:facts) do
+ {
+ :operatingsystem => 'Debian',
+ :operatingsystemrelease => '8.0'
+ }
+ end
+ it "should return 2.4" do
+ result = scope.function_guess_apache_version([])
+ expect(result).to(eq('2.4'))
+ end
+ end
+
+ context 'on ubuntu 15.10' do
+ let(:facts) do
+ {
+ :operatingsystem => 'Ubuntu',
+ :operatingsystemrelease => '15.10'
+ }
+ end
+ it "should return 2.4" do
+ result = scope.function_guess_apache_version([])
+ expect(result).to(eq('2.4'))
+ end
+ end
+
+end