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