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