92df8b840f05022b67e5c2d0757153e034d8a42c
[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  => Service['haproxy'],
85     }
86
87     # Simple Header
88     concat::fragment { '00-header':
89       target  => '/etc/haproxy/haproxy.cfg',
90       order   => '01',
91       content => "# This file managed by Puppet\n",
92     }
93
94     # Template uses $global_options, $defaults_options
95     concat::fragment { 'haproxy-base':
96       target  => '/etc/haproxy/haproxy.cfg',
97       order   => '10',
98       content => template('haproxy/haproxy-base.cfg.erb'),
99     }
100
101     if ($::osfamily == 'Debian') {
102       file { '/etc/default/haproxy':
103         content => 'ENABLED=1',
104         require => Package['haproxy'],
105         before  => Service['haproxy'],
106       }
107     }
108
109     file { $global_options['chroot']:
110       ensure => directory,
111       before => Service['haproxy'],
112     }
113
114   }
115
116   if $manage_service {
117     service { 'haproxy':
118       ensure     => $enable ? {
119         true  => running,
120         false => stopped,
121       },
122       enable     => $enable ? {
123         true  => true,
124         false => false,
125       },
126       name       => 'haproxy',
127       hasrestart => true,
128       hasstatus  => true,
129       require    => [
130         Concat['/etc/haproxy/haproxy.cfg'],
131         File[$global_options['chroot']],
132       ],
133     }
134   }
135 }