f47e3874dde041332479e595be4fddae41e64158
[puppet_haproxy.git] / manifests / config.pp
1 # == Define Resource Type: haproxy::config
2 #
3 # This type will setup a listening service configuration block inside
4 #  the haproxy.cfg file on an haproxy load balancer. Each listening service
5 #  configuration needs one or more load balancer member server (that can be
6 #  declared with the haproxy::balancermember defined resource type). Using
7 #  storeconfigs, you can export the haproxy::balancermember resources on all
8 #  load balancer member servers, and then collect them on a single haproxy
9 #  load balancer server.
10 #
11 # === Requirement/Dependencies:
12 #
13 # Currently requires the ripienaar/concat module on the Puppet Forge and
14 #  uses storeconfigs on the Puppet Master to export/collect resources
15 #  from all balancer members.
16 #
17 # === Parameters
18 #
19 # [*name*]
20 #    The namevar of the defined resource type is the listening service's name.
21 #     This name goes right after the 'listen' statement in haproxy.cfg
22 #
23 # [*virtual_ip_port*]
24 #    A unique port, or a port range for which the proxy will accept connections
25 #     for the ip address specified in the virtual_ip parameter.
26 #
27 # [*order*]
28 #    The order, or numerical weight, of the fragment created by this defined
29 #     resource type. This is necessary to ensure the fragment is associated
30 #     with the correct listening service instance.
31 #
32 # [*virtual_ip*]
33 #    The ip address the proxy binds to. Empty addresses, '*', and '0.0.0.0'
34 #     mean that the proxy listens to all valid addresses on the system.
35 #
36 # [*mode*]
37 #    The mode of operation for the listening service. Valid values are 'tcp',
38 #     HTTP', and 'health'.
39 #
40 # [*haproxy_config_options*]
41 #    A hash of options that are inserted into the listening service
42 #     configuration block.
43
44 # [*collect_exported*]
45 #    Boolean, default 'true'. True means 'collect exported @@balancermember resources'
46 #    (for the case when every balancermember node exports itself), false means
47 #    'rely on the existing declared balancermember resources' (for the case when you 
48 #    know the full set of balancermembers in advance and use haproxy::balancermember 
49 #    with array arguments, which allows you to deploy everything in 1 run)
50 #    
51 #
52 # === Examples
53 #
54 #  Exporting the resource for a balancer member:
55 #
56 #  haproxy::config { 'puppet00':
57 #    order                  => '20',
58 #    virtual_ip             => $::ipaddress,
59 #    virtual_ip_port        => '18140',
60 #    mode                   => 'tcp',
61 #    haproxy_config_options => {'option' => ['tcplog', 'ssl-hello-chk'],
62 #                               'balance' => 'roundrobin'},
63 #  }
64 #
65 # === Authors
66 #
67 # Gary Larizza <gary@puppetlabs.com>
68 #
69 define haproxy::config (
70   $virtual_ip_port,
71   $order                     = '20',
72   $virtual_ip                = $::ipaddress,
73   $mode                      = 'tcp',
74   $collect_exported          = true,
75   $haproxy_config_options    = {
76     'option' => [
77       'tcplog',
78       'ssl-hello-chk'
79     ],
80     'balance' => 'roundrobin'
81   }
82 ) {
83   concat::fragment { "${name}_config_block":
84     order   => $order,
85     target  => '/etc/haproxy/haproxy.cfg',
86     content => template('haproxy/haproxy_config_block.erb'),
87   }
88
89   if $collect_exported {
90     Haproxy::Balancermember <<| listening_service == $name |>>
91   }
92   # else: the resources have been created and they introduced their
93   # concat fragments. We don't have to do anything about them.
94 }