[deprec] use @ in front of erb template tags
[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 - 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 # [*version*]
19 #   Allows you to specify what version of the package to install.
20 #   Default is simply 'present'
21 #
22 # [*global_options*]
23 #   A hash of all the haproxy global options. If you want to specify more
24 #    than one option (i.e. multiple timeout or stats options), pass those
25 #    options as an array and you will get a line for each of them in the
26 #    resultant haproxy.cfg file.
27 #
28 # [*defaults_options*]
29 #   A hash of all the haproxy defaults options. If you want to specify more
30 #    than one option (i.e. multiple timeout or stats options), pass those
31 #    options as an array and you will get a line for each of them in the
32 #    resultant haproxy.cfg file.
33 #
34 #
35 # === Examples
36 #
37 #  class { 'haproxy':
38 #    enable           => true,
39 #    global_options   => {
40 #      'log'     => "${::ipaddress} local0",
41 #      'chroot'  => '/var/lib/haproxy',
42 #      'pidfile' => '/var/run/haproxy.pid',
43 #      'maxconn' => '4000',
44 #      'user'    => 'haproxy',
45 #      'group'   => 'haproxy',
46 #      'daemon'  => '',
47 #      'stats'   => 'socket /var/lib/haproxy/stats'
48 #    },
49 #    defaults_options => {
50 #      'log'     => 'global',
51 #      'stats'   => 'enable',
52 #      'option'  => 'redispatch',
53 #      'retries' => '3',
54 #      'timeout' => [
55 #        'http-request 10s',
56 #        'queue 1m',
57 #        'connect 10s',
58 #        'client 1m',
59 #        'server 1m',
60 #        'check 10s'
61 #      ],
62 #      'maxconn' => '8000'
63 #    },
64 #  }
65 #
66 class haproxy (
67   $manage_service   = true,
68   $enable           = true,
69   $version          = 'present',
70   $global_options   = $haproxy::params::global_options,
71   $defaults_options = $haproxy::params::defaults_options
72 ) inherits haproxy::params {
73   include concat::setup
74
75   package { 'haproxy':
76     ensure  => $enable ? {
77       true  => $version,
78       false => absent,
79     },
80     name    => 'haproxy',
81   }
82
83   if $enable {
84     concat { '/etc/haproxy/haproxy.cfg':
85       owner   => '0',
86       group   => '0',
87       mode    => '0644',
88       require => Package['haproxy'],
89       notify  => $manage_service ? {
90         true  => Service['haproxy'],
91         false => undef,
92       },
93     }
94
95     # Simple Header
96     concat::fragment { '00-header':
97       target  => '/etc/haproxy/haproxy.cfg',
98       order   => '01',
99       content => "# This file managed by Puppet\n",
100     }
101
102     # Template uses $global_options, $defaults_options
103     concat::fragment { 'haproxy-base':
104       target  => '/etc/haproxy/haproxy.cfg',
105       order   => '10',
106       content => template('haproxy/haproxy-base.cfg.erb'),
107     }
108
109     if ($::osfamily == 'Debian') {
110       file { '/etc/default/haproxy':
111         content => 'ENABLED=1',
112         require => Package['haproxy'],
113         before  => $manage_service ? {
114           true  => Service['haproxy'],
115           false => undef,
116         },
117       }
118     }
119
120     file { $global_options['chroot']:
121       ensure  => directory,
122       owner   => $global_options['user'],
123       group   => $global_options['group'],
124       mode    => '0550',
125       require => Package['haproxy']
126     }
127
128   }
129
130   if $manage_service {
131     service { 'haproxy':
132       ensure     => $enable ? {
133         true  => running,
134         false => stopped,
135       },
136       enable     => $enable ? {
137         true  => true,
138         false => false,
139       },
140       name       => 'haproxy',
141       hasrestart => true,
142       hasstatus  => true,
143       require    => [
144         Concat['/etc/haproxy/haproxy.cfg'],
145         File[$global_options['chroot']],
146       ],
147     }
148   }
149 }