summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorng <ng+gitlab@immerda.ch>2015-11-28 09:22:57 +0000
committerng <ng+gitlab@immerda.ch>2015-11-28 09:22:57 +0000
commit465abc11546ea02664a957aed4672fd1311a22a9 (patch)
treec64ead2eb8f3cfb78d71471acbe144df243f119f
parentfcd2a84e535e5d280d5299a8ff489920e1ea2305 (diff)
parentce46bcb833032440103ea9a7e0eb49c5a2cd093e (diff)
Merge branch 'modalias_apache2.4' into 'master'
[bug] Use guess_apache_version() to query apache version Using $::apache_version won't work because the facts are evaluated before compiling the catalog and with this, before the installation of apache. so on an install from scratch, this fact won't contain anything. See merge request !5
-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