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