Use selector for haproxy service
[puppet_haproxy.git] / manifests / init.pp
1 # == Class: haproxy
2 #
3 # A Puppet module, using storeconfigs, to model an haproxy configuration.
4 # Currently VERY limited - assumes Redhat/CentOS setup. Pull requests accepted!
5 #
6 # === Requirement/Dependencies:
7 #
8 # Currently requires the ripienaar/concat module on the Puppet Forge and
9 #  uses storeconfigs on the Puppet Master to export/collect resources
10 #  from all balancer members.
11 #
12 # === Parameters
13 #
14 # [*enable*]
15 #   Chooses whether haproxy should be installed or ensured absent.
16 #   Currently ONLY accepts valid boolean true/false values.
17 #
18 # [*global_options*]
19 #   A hash of all the haproxy global options. If you want to specify more
20 #    than one option (i.e. multiple timeout or stats options), pass those
21 #    options as an array and you will get a line for each of them in the
22 #    resultant haproxy.cfg file.
23 #
24 # [*defaults_options*]
25 #   A hash of all the haproxy defaults options. If you want to specify more
26 #    than one option (i.e. multiple timeout or stats options), pass those
27 #    options as an array and you will get a line for each of them in the
28 #    resultant haproxy.cfg file.
29 #
30 #
31 # === Examples
32 #
33 #  class { 'haproxy':
34 #    enable           => true,
35 #    global_options   => {
36 #      'log'     => "${::ipaddress} local0",
37 #      'chroot'  => '/var/lib/haproxy',
38 #      'pidfile' => '/var/run/haproxy.pid',
39 #      'maxconn' => '4000',
40 #      'user'    => 'haproxy',
41 #      'group'   => 'haproxy',
42 #      'daemon'  => '',
43 #      'stats'   => 'socket /var/lib/haproxy/stats'
44 #    },
45 #    defaults_options => {
46 #      'log'     => 'global',
47 #      'stats'   => 'enable',
48 #      'option'  => 'redispatch',
49 #      'retries' => '3',
50 #      'timeout' => [
51 #        'http-request 10s',
52 #        'queue 1m',
53 #        'connect 10s',
54 #        'client 1m',
55 #        'server 1m',
56 #        'check 10s'
57 #      ],
58 #      'maxconn' => '8000'
59 #    },
60 #  }
61 #
62 class haproxy (
63   $manage_service   = true,
64   $enable           = true,
65   $global_options   = $haproxy::params::global_options,
66   $defaults_options = $haproxy::params::defaults_options
67 ) inherits haproxy::params {
68   include concat::setup
69
70   package { 'haproxy':
71     ensure  => $enable ? {
72       true  => present,
73       false => absent,
74     },
75     name    => 'haproxy',
76   }
77
78   if $enable {
79     concat { '/etc/haproxy/haproxy.cfg':
80       owner   => '0',
81       group   => '0',
82       mode    => '0644',
83       require => Package['haproxy'],
84       notify  => $manage_service ? {
85         true  => Service['haproxy'],
86         false => undef,
87       },
88     }
89
90     # Simple Header
91     concat::fragment { '00-header':
92       target  => '/etc/haproxy/haproxy.cfg',
93       order   => '01',
94       content => "# This file managed by Puppet\n",
95     }
96
97     # Template uses $global_options, $defaults_options
98     concat::fragment { 'haproxy-base':
99       target  => '/etc/haproxy/haproxy.cfg',
100       order   => '10',
101       content => template('haproxy/haproxy-base.cfg.erb'),
102     }
103
104     if ($::osfamily == 'Debian') {
105       file { '/etc/default/haproxy':
106         content => 'ENABLED=1',
107         require => Package['haproxy'],
108         before  => $manage_service ? {
109           true  => Service['haproxy'],
110           false => undef,
111         },
112       }
113     }
114
115     file { $global_options['chroot']:
116       ensure => directory,
117     }
118
119   }
120
121   if $manage_service {
122     service { 'haproxy':
123       ensure     => $enable ? {
124         true  => running,
125         false => stopped,
126       },
127       enable     => $enable ? {
128         true  => true,
129         false => false,
130       },
131       name       => 'haproxy',
132       hasrestart => true,
133       hasstatus  => true,
134       require    => [
135         Concat['/etc/haproxy/haproxy.cfg'],
136         File[$global_options['chroot']],
137       ],
138     }
139   }
140 }