[deprec] use @ in front of erb template tags
[puppet_haproxy.git] / manifests / balancermember.pp
1 # == Define Resource Type: haproxy::balancermember
2 #
3 # This type will setup a balancer member inside a listening service
4 #  configuration block in /etc/haproxy/haproxy.cfg on the load balancer.
5 #  currently it only has the ability to specify the instance name,
6 #  ip address, port, and whether or not it is a backup. More features
7 #  can be added as needed. The best way to implement this is to export
8 #  this resource for all haproxy balancer member servers, and then collect
9 #  them on the main haproxy load balancer.
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 title of the resource is arbitrary and only utilized in the concat
21 #    fragment name.
22 #
23 # [*listening_service*]
24 #    The haproxy service's instance name (or, the title of the
25 #     haproxy::listen resource). This must match up with a declared
26 #     haproxy::listen resource.
27 #
28 # [*ports*]
29 #     An array or commas-separated list of ports for which the balancer member
30 #     will accept connections from the load balancer. Note that cookie values
31 #     aren't yet supported, but shouldn't be difficult to add to the
32 #     configuration. If you use an array in server_names and ipaddresses, the
33 #     same port is used for all balancermembers.
34 #
35 # [*server_names*]
36 #     The name of the balancer member server as known to haproxy in the
37 #      listening service's configuration block. This defaults to the
38 #      hostname. Can be an array of the same length as ipaddresses,
39 #      in which case a balancermember is created for each pair of
40 #      server_names and ipaddresses (in lockstep).
41 #
42 # [*ipaddresses*]
43 #      The ip address used to contact the balancer member server.
44 #      Can be an array, see documentation to server_names.
45 #
46 # [*options*]
47 #      An array of options to be specified after the server declaration
48 #       in the listening service's configuration block.
49 #
50 #
51 # === Examples
52 #
53 #  Exporting the resource for a balancer member:
54 #
55 #  @@haproxy::balancermember { 'haproxy':
56 #    listening_service => 'puppet00',
57 #    ports             => '8140',
58 #    server_names      => $::hostname,
59 #    ipaddresses       => $::ipaddress,
60 #    options           => 'check',
61 #  }
62 #
63 #
64 #  Collecting the resource on a load balancer
65 #
66 #  Haproxy::Balancermember <<| listening_service == 'puppet00' |>>
67 #
68 #  Creating the resource for multiple balancer members at once
69 #  (for single-pass installation of haproxy without requiring a first
70 #  pass to export the resources if you know the members in advance):
71
72 #  haproxy::balancermember { 'haproxy':
73 #    listening_service => 'puppet00',
74 #    ports             => '8140',
75 #    server_names      => ['server01', 'server02'],
76 #    ipaddresses       => ['192.168.56.200', '192.168.56.201'],
77 #    options           => 'check',
78 #  }
79 #  
80 #  (this resource can be declared anywhere)
81 #
82 define haproxy::balancermember (
83   $listening_service,
84   $ports,
85   $server_names = $::hostname,
86   $ipaddresses  = $::ipaddress,
87   $options      = ''
88 ) {
89   # Template uses $ipaddresses, $server_name, $ports, $option
90   concat::fragment { "${listening_service}_balancermember_${name}":
91     order   => "20-${listening_service}-${name}",
92     target  => '/etc/haproxy/haproxy.cfg',
93     content => template('haproxy/haproxy_balancermember.erb'),
94   }
95 }