Update hash formatting for readability
[puppet_haproxy.git] / manifests / init.pp
1 # == Class: puppet-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 # [*haproxy_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 # [*haproxy_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 #    haproxy_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 #    haproxy_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 # === Authors
63 #
64 # Gary Larizza <gary@puppetlabs.com>
65 #
66 class haproxy (
67   $enable                   = true,
68   $haproxy_global_options   = $haproxy::data::haproxy_global_options,
69   $haproxy_defaults_options = $haproxy::data::haproxy_defaults_options
70 ) inherits haproxy::data {
71   include concat::setup
72
73   package { 'haproxy':
74     ensure  => $enable ? {
75       true  => present,
76       false => absent,
77     },
78     name    => 'haproxy',
79   }
80
81   if $enable {
82     concat { '/etc/haproxy/haproxy.cfg':
83       owner   => '0',
84       group   => '0',
85       mode    => '0644',
86       require => Package['haproxy'],
87       notify  => Service['haproxy'],
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     # Most of the variables are used inside the haproxy-base.cfg.erb template
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  => Service['haproxy'],
109       }
110     }
111
112     file { $haproxy_global_options['chroot']:
113       ensure => directory,
114       before => Service['haproxy'],
115     }
116
117   }
118
119   service { 'haproxy':
120     ensure     => $enable ? {
121       true  => running,
122       false => stopped,
123     },
124     enable     => $enable ? {
125       true  => true,
126       false => false,
127     },
128     name       => 'haproxy',
129     hasrestart => true,
130     hasstatus  => true,
131     require    => [
132       Concat['/etc/haproxy/haproxy.cfg'],
133       File[$haproxy_global_options['chroot']],
134     ],
135   }
136 }