summaryrefslogtreecommitdiff
path: root/manifests/config.pp
blob: f47e3874dde041332479e595be4fddae41e64158 (plain)
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
# == Define Resource Type: haproxy::config
#
# This type will setup a listening service configuration block inside
#  the haproxy.cfg file on an haproxy load balancer. Each listening service
#  configuration needs one or more load balancer member server (that can be
#  declared with the haproxy::balancermember defined resource type). Using
#  storeconfigs, you can export the haproxy::balancermember resources on all
#  load balancer member servers, and then collect them on a single haproxy
#  load balancer server.
#
# === 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 namevar of the defined resource type is the listening service's name.
#     This name goes right after the 'listen' statement in haproxy.cfg
#
# [*virtual_ip_port*]
#    A unique port, or a port range for which the proxy will accept connections
#     for the ip address specified in the virtual_ip parameter.
#
# [*order*]
#    The order, or numerical weight, of the fragment created by this defined
#     resource type. This is necessary to ensure the fragment is associated
#     with the correct listening service instance.
#
# [*virtual_ip*]
#    The ip address the proxy binds to. Empty addresses, '*', and '0.0.0.0'
#     mean that the proxy listens to all valid addresses on the system.
#
# [*mode*]
#    The mode of operation for the listening service. Valid values are 'tcp',
#     HTTP', and 'health'.
#
# [*haproxy_config_options*]
#    A hash of options that are inserted into the listening service
#     configuration block.
# 
# [*collect_exported*]
#    Boolean, default 'true'. True means 'collect exported @@balancermember resources'
#    (for the case when every balancermember node exports itself), false means
#    'rely on the existing declared balancermember resources' (for the case when you 
#    know the full set of balancermembers in advance and use haproxy::balancermember 
#    with array arguments, which allows you to deploy everything in 1 run)
#    
#
# === Examples
#
#  Exporting the resource for a balancer member:
#
#  haproxy::config { 'puppet00':
#    order                  => '20',
#    virtual_ip             => $::ipaddress,
#    virtual_ip_port        => '18140',
#    mode                   => 'tcp',
#    haproxy_config_options => {'option' => ['tcplog', 'ssl-hello-chk'],
#                               'balance' => 'roundrobin'},
#  }
#
# === Authors
#
# Gary Larizza <gary@puppetlabs.com>
#
define haproxy::config (
  $virtual_ip_port,
  $order                     = '20',
  $virtual_ip                = $::ipaddress,
  $mode                      = 'tcp',
  $collect_exported          = true,
  $haproxy_config_options    = {
    'option' => [
      'tcplog',
      'ssl-hello-chk'
    ],
    'balance' => 'roundrobin'
  }
) {
  concat::fragment { "${name}_config_block":
    order   => $order,
    target  => '/etc/haproxy/haproxy.cfg',
    content => template('haproxy/haproxy_config_block.erb'),
  }

  if $collect_exported {
    Haproxy::Balancermember <<| listening_service == $name |>>
  }
  # else: the resources have been created and they introduced their
  # concat fragments. We don't have to do anything about them.
}