diff options
-rw-r--r-- | README | 12 | ||||
-rw-r--r-- | lib/puppet/parser/functions/guess_apache_version.rb | 39 | ||||
-rw-r--r-- | manifests/module/alias.pp | 2 | ||||
-rw-r--r-- | spec/functions/guess_apache_version.rb | 50 |
4 files changed, 98 insertions, 5 deletions
@@ -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 |