From 8a56bba7a7ac6376627e64be00d3ca2db14fdf71 Mon Sep 17 00:00:00 2001 From: Dan Bode Date: Tue, 12 Jun 2012 19:16:02 -0700 Subject: Add Debian support. This pull requests performs the minimum amount of effort to add Debian support. Adds Debian defaults (which were made to be as similar as possible to the Redhat defaults) Adds two Debian specific resources to the haproxy class - a defaults file to ensure the service is started - creates the /var/lib/haproxy directory so that the configuration can be as similar to Redhat as possible.y --- manifests/data.pp | 18 ++++++++++++++++++ manifests/init.pp | 13 +++++++++++++ 2 files changed, 31 insertions(+) diff --git a/manifests/data.pp b/manifests/data.pp index aa49285..db865d6 100644 --- a/manifests/data.pp +++ b/manifests/data.pp @@ -24,6 +24,24 @@ class haproxy::data { 'maxconn' => '8000' } } + Debian: { + $haproxy_global_options = { 'log' => "127.0.0.1 local0", + 'chroot' => '/var/lib/haproxy', + 'pidfile' => '/var/run/haproxy.pid', + 'maxconn' => '4000', + 'user' => 'haproxy', + 'group' => 'haproxy', + 'daemon' => '', + 'stats' => 'socket /var/lib/haproxy/stats' + } + $haproxy_defaults_options = { 'log' => 'global', + 'stats' => 'enable', + 'option' => 'redispatch', + 'retries' => '3', + 'timeout' => ['http-request 10s', 'queue 1m', 'connect 10s', 'client 1m', 'server 1m', 'check 10s'], + 'maxconn' => '8000' + } + } default: { fail("The $::operatingsystem operating system is not supported with the haproxy module") } } } diff --git a/manifests/init.pp b/manifests/init.pp index 8005aec..8fc46ac 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -97,6 +97,19 @@ class haproxy ( order => '10', content => template('haproxy/haproxy-base.cfg.erb'), } + + if ($::operatingsystem == 'Ubuntu') { + file { '/etc/default/haproxy': + content => 'ENABLED=1', + require => Package['haproxy'] + } + } + + file { '/var/lib/haproxy': + ensure => directory, + before => Service['haproxy'], + } + } service { 'haproxy': -- cgit v1.2.3 From ee028ee6c7872de0adc35b5b50e6d802e02c25a5 Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Wed, 29 Aug 2012 13:50:25 -0700 Subject: Update specs for haproxy base class with debian support Many of the tests that apply to the RedHat family also apply to Debian. The tests have been updated to reflect this, as well as to capture the minor differences between the two platforms. This commit incorperates the changes from glarizza#7 and glarizza#12 Not all tests pass because I found it pertinent to update the spec where the actual module code was lacking. --- spec/classes/haproxy_spec.rb | 152 +++++++++++++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 49 deletions(-) diff --git a/spec/classes/haproxy_spec.rb b/spec/classes/haproxy_spec.rb index 46c8124..fa171f3 100644 --- a/spec/classes/haproxy_spec.rb +++ b/spec/classes/haproxy_spec.rb @@ -1,59 +1,113 @@ require 'spec_helper' describe 'haproxy', :type => :class do - - context 'on Redhat family operatingsystems' do - let(:facts) do - { - :osfamily => 'Redhat', - :concat_basedir => '/dne' - } - end - it { should include_class('concat::setup') } - - it 'should install the haproxy package' do - subject.should contain_package('haproxy').with( - 'ensure' => 'present' - ) - end - - it 'should install the haproxy service' do - subject.should contain_service('haproxy').with( - 'ensure' => 'running', - 'enable' => 'true', - 'hasrestart' => 'true', - 'hasstatus' => 'true' - ) - end - - it 'should set up /etc/haproxy/haproxy.cfg as a concat resource' do - subject.should contain_concat('/etc/haproxy/haproxy.cfg').with( - 'owner' => '0', - 'group' => '0', - 'mode' => '0644' - ) - end - - it 'should contain a header concat fragment' do - subject.should contain_concat__fragment('00-header').with( - 'target' => '/etc/haproxy/haproxy.cfg', - 'order' => '01', - 'content' => "# This file managed by Puppet\n" - ) + let(:default_facts) do + { + :concat_basedir => '/dne', + :ipaddress => '10.10.10.10' + } + end + context 'on supported platforms' do + describe 'for OS-agnostic configuration' do + ['Debian', 'RedHat'].each do |osfamily| + context "on #{osfamily} family operatingsystems" do + let(:facts) do + { :osfamily => osfamily }.merge default_facts + end + let(:params) do + {'enable' => true} + end + it { should include_class('concat::setup') } + it 'should install the haproxy package' do + subject.should contain_package('haproxy').with( + 'ensure' => 'present' + ) + end + it 'should install the haproxy service' do + subject.should contain_service('haproxy').with( + 'ensure' => 'running', + 'enable' => 'true', + 'hasrestart' => 'true', + 'hasstatus' => 'true', + 'require' => [ + 'Concat[/etc/haproxy/haproxy.cfg]', + 'File[/var/lib/haproxy]' + ] + ) + end + it 'should set up /etc/haproxy/haproxy.cfg as a concat resource' do + subject.should contain_concat('/etc/haproxy/haproxy.cfg').with( + 'owner' => '0', + 'group' => '0', + 'mode' => '0644' + ) + end + it 'should manage the chroot directory' do + subject.should contain_file('/var/lib/haproxy').with( + 'ensure' => 'directory' + ) + end + it 'should contain a header concat fragment' do + subject.should contain_concat__fragment('00-header').with( + 'target' => '/etc/haproxy/haproxy.cfg', + 'order' => '01', + 'content' => "# This file managed by Puppet\n" + ) + end + it 'should contain a haproxy-base concat fragment' do + subject.should contain_concat__fragment('haproxy-base').with( + 'target' => '/etc/haproxy/haproxy.cfg', + 'order' => '10' + ) + end + describe 'Base concat fragment contents' do + let(:contents) { param_value(subject, 'concat::fragment', 'haproxy-base', 'content').split("\n") } + it 'should contain global and defaults sections' do + contents.should include('global') + contents.should include('defaults') + end + it 'should log to an ip address for local0' do + contents.should be_any { |match| match =~ / log \d+(\.\d+){3} local0/ } + end + it 'should specify the default chroot' do + contents.should include(' chroot /var/lib/haproxy') + end + it 'should specify the correct user' do + contents.should include(' user haproxy') + end + it 'should specify the correct group' do + contents.should include(' group haproxy') + end + it 'should specify the correct pidfile' do + contents.should include(' pidfile /var/run/haproxy.pid') + end + end + end + end end - - it 'should contain a haproxy-base concat fragment' do - subject.should contain_concat__fragment('haproxy-base').with( - 'target' => '/etc/haproxy/haproxy.cfg', - 'order' => '10', - 'content' => "global\n chroot /var/lib/haproxy\n daemon \n group haproxy\n log local0\n maxconn 4000\n pidfile /var/run/haproxy.pid\n stats socket /var/lib/haproxy/stats\n user haproxy\n\ndefaults\n log global\n maxconn 8000\n option redispatch\n retries 3\n stats enable\n timeout http-request 10s\n timeout queue 1m\n timeout connect 10s\n timeout client 1m\n timeout server 1m\n timeout check 10s\n" - ) + describe 'for OS-specific configuration' do + context 'only on Debian family operatingsystems' do + let(:facts) do + { :osfamily => 'Debian' }.merge default_facts + end + it 'should manage haproxy service defaults' do + subject.should contain_file('/etc/default/haproxy').with( + 'before' => 'Service[haproxy]', + 'require' => 'Package[haproxy]' + ) + verify_contents(subject, '/etc/default/haproxy', ['ENABLED=1']) + end + end + context 'only on RedHat family operatingsystems' do + let(:facts) do + { :osfamily => 'RedHat' }.merge default_facts + end + end end end - - context 'on non-Redhat family operatingsystems' do + context 'on unsupported operatingsystems' do let(:facts) do - { :osfamily => 'Debian' } + { :osfamily => 'RainbowUnicorn' }.merge default_facts end it do expect { -- cgit v1.2.3 From 449bbee4b9f9bc31d8676fbdf5ad699f5b1987f0 Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Wed, 29 Aug 2012 13:53:49 -0700 Subject: Log to $ipaddress by default on both platforms --- manifests/data.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/data.pp b/manifests/data.pp index db865d6..6b27068 100644 --- a/manifests/data.pp +++ b/manifests/data.pp @@ -25,7 +25,7 @@ class haproxy::data { } } Debian: { - $haproxy_global_options = { 'log' => "127.0.0.1 local0", + $haproxy_global_options = { 'log' => "${::ipaddress} local0", 'chroot' => '/var/lib/haproxy', 'pidfile' => '/var/run/haproxy.pid', 'maxconn' => '4000', -- cgit v1.2.3 From dc03ae98bcb95559f7faf4bea72fa810dcdc4c8f Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Wed, 29 Aug 2012 13:54:33 -0700 Subject: /etc/default/haproxy applies to all Debian, not just Ubuntu --- manifests/init.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/init.pp b/manifests/init.pp index 8fc46ac..93c7e17 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -98,7 +98,7 @@ class haproxy ( content => template('haproxy/haproxy-base.cfg.erb'), } - if ($::operatingsystem == 'Ubuntu') { + if ($::osfamily == 'Debian') { file { '/etc/default/haproxy': content => 'ENABLED=1', require => Package['haproxy'] -- cgit v1.2.3 From 6bb22697689bb7a8ed76afe69a4a245760d12708 Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Wed, 29 Aug 2012 13:55:08 -0700 Subject: The directory resource for managing the chroot should be a variable --- manifests/init.pp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 93c7e17..2feacf2 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -105,7 +105,7 @@ class haproxy ( } } - file { '/var/lib/haproxy': + file { $haproxy_global_options['chroot']: ensure => directory, before => Service['haproxy'], } @@ -124,6 +124,9 @@ class haproxy ( name => 'haproxy', hasrestart => true, hasstatus => true, - require => Concat['/etc/haproxy/haproxy.cfg'], + require => [ + Concat['/etc/haproxy/haproxy.cfg'], + File[$haproxy_global_options['chroot']], + ], } } -- cgit v1.2.3 From 12a8a5d6e0419f26265e325a8cf1e4019dc23895 Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Wed, 29 Aug 2012 13:55:40 -0700 Subject: Add a dependency to ENABLE=1 before starting the service on debian --- manifests/init.pp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manifests/init.pp b/manifests/init.pp index 2feacf2..f75051c 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -101,7 +101,8 @@ class haproxy ( if ($::osfamily == 'Debian') { file { '/etc/default/haproxy': content => 'ENABLED=1', - require => Package['haproxy'] + require => Package['haproxy'], + before => Service['haproxy'], } } -- cgit v1.2.3