d4ddd6088a143f13ea82d269d48881a2e089be35
[puppet_haproxy.git] / manifests / listen.pp
1 # == Define Resource Type: haproxy::listen
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 # [*ports*]
24 #    Ports on which the proxy will listen for connections on the ip address
25 #    specified in the virtual_ip parameter. Accepts either a single string or
26 #    an array of strings which may be a unique port or a hyphenated port range.
27 #
28 # [*order*]
29 #    The order, or numerical weight, of the fragment created by this defined
30 #     resource type. This is necessary to ensure the fragment is associated
31 #     with the correct listening service instance.
32 #
33 # [*ipaddress*]
34 #    The ip address the proxy binds to. Empty addresses, '*', and '0.0.0.0'
35 #     mean that the proxy listens to all valid addresses on the system.
36 #
37 # [*mode*]
38 #    The mode of operation for the listening service. Valid values are 'tcp',
39 #     HTTP', and 'health'.
40 #
41 # [*options*]
42 #    A hash of options that are inserted into the listening service
43 #     configuration block.
44 #
45 # [*collect_exported*]
46 #    Boolean, default 'true'. True means 'collect exported @@balancermember resources'
47 #    (for the case when every balancermember node exports itself), false means
48 #    'rely on the existing declared balancermember resources' (for the case when you 
49 #    know the full set of balancermembers in advance and use haproxy::balancermember 
50 #    with array arguments, which allows you to deploy everything in 1 run)
51 #
52 #
53 # === Examples
54 #
55 #  Exporting the resource for a balancer member:
56 #
57 #  haproxy::listen { 'puppet00':
58 #    order     => '20',
59 #    ipaddress => $::ipaddress,
60 #    ports     => '18140',
61 #    mode      => 'tcp',
62 #    options   => {
63 #      'option'  => [
64 #        'tcplog',
65 #        'ssl-hello-chk'
66 #      ],
67 #      'balance' => 'roundrobin'
68 #    },
69 #  }
70 #
71 # === Authors
72 #
73 # Gary Larizza <gary@puppetlabs.com>
74 #
75 define haproxy::listen (
76   $ports,
77   $order            = '20',
78   $ipaddress        = $::ipaddress,
79   $mode             = 'tcp',
80   $collect_exported = true,
81   $options          = {
82     'option'  => [
83       'tcplog',
84       'ssl-hello-chk'
85     ],
86     'balance' => 'roundrobin'
87   }
88 ) {
89   # Template uses: $name, $ipaddress, $ports, $options
90   concat::fragment { "${name}_listen_block":
91     order   => $order,
92     target  => '/etc/haproxy/haproxy.cfg',
93     content => template('haproxy/haproxy_listen_block.erb'),
94   }
95
96   if $collect_exported {
97     Haproxy::Balancermember <<| listening_service == $name |>>
98   }
99   # else: the resources have been created and they introduced their
100   # concat fragments. We don't have to do anything about them.
101 }