The directory resource for managing the chroot should be a variable
[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   => { 'log'     => "${::ipaddress} local0",
36 #                                   'chroot'  => '/var/lib/haproxy',
37 #                                   'pidfile' => '/var/run/haproxy.pid',
38 #                                   'maxconn' => '4000',
39 #                                   'user'    => 'haproxy',
40 #                                   'group'   => 'haproxy',
41 #                                   'daemon'  => '',
42 #                                   'stats'   => 'socket /var/lib/haproxy/stats'
43 #                                 },
44 #      haproxy_defaults_options => { 'log'     => 'global',
45 #                                    'stats'   => 'enable',
46 #                                    'option'  => 'redispatch',
47 #                                    'retries' => '3',
48 #                                    'timeout' => ['http-request 10s',
49 #                                                 'queue 1m',
50 #                                                 'connect 10s',
51 #                                                 'client 1m',
52 #                                                 'server 1m',
53 #                                                 'check 10s'],
54 #                                    'maxconn' => '8000'
55 #                                  },
56 #
57 #  }
58 #
59 # === Authors
60 #
61 # Gary Larizza <gary@puppetlabs.com>
62 #
63 class haproxy (
64   $enable                   = true,
65   $haproxy_global_options   = $haproxy::data::haproxy_global_options,
66   $haproxy_defaults_options = $haproxy::data::haproxy_defaults_options
67 ) inherits haproxy::data {
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     # Most of the variables are used inside the haproxy-base.cfg.erb template
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       }
106     }
107
108     file { $haproxy_global_options['chroot']:
109       ensure => directory,
110       before => Service['haproxy'],
111     }
112
113   }
114
115   service { 'haproxy':
116     ensure     => $enable ? {
117       true  => running,
118       false => stopped,
119     },
120     enable     => $enable ? {
121       true  => true,
122       false => false,
123     },
124     name       => 'haproxy',
125     hasrestart => true,
126     hasstatus  => true,
127     require    => [
128       Concat['/etc/haproxy/haproxy.cfg'],
129       File[$haproxy_global_options['chroot']],
130     ],
131   }
132 }