PuppetLabs Module for haproxy
=============================

HAProxy is an HA proxying daemon for load-balancing to clustered services. It
can proxy TCP directly, or other kinds of traffic such as HTTP.

Dependencies
------------

Tested and built on Debian, Ubuntu and CentOS

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.

Basic Usage
-----------

This haproxy uses storeconfigs to collect and realize balancer member servers
on a load balancer server. 

*To install and configure HAProxy server listening on port 8140*

```puppet
node 'haproxy-server' {
  class { 'haproxy': }
  haproxy::listen { 'puppet00':
    ipaddress => $::ipaddress,
    ports     => '8140',
  }
}
```

*To add backend loadbalance members*

```puppet
node 'webserver01' {
  @@haproxy::balancermember { $fqdn:
    listening_service => 'puppet00',
    server_names      => $::hostname,
    ipaddresses       => $::ipaddress,
    ports             => '8140',
    options           => 'check'
  }
}
```

Configuring haproxy options
---------------------------

The base `haproxy` class can accept two parameters which will configure basic
behaviour of the haproxy server daemon:

- `global_options` to configure the `global` section in `haproxy.cfg`
- `defaults_options` to configure the `defaults` section in `haproxy.cfg`

Configuring haproxy daemon listener
-----------------------------------

One `haproxy::listen` defined resource should be defined for each HAProxy loadbalanced set of backend servers. The title of the `haproxy::listen` resource is the key to which balancer members will be proxied to. The `ipaddress` field should be the public ip address which the loadbalancer will be contacted on. The `ports` attribute can accept an array or comma-separated list of ports which should be proxied to the `haproxy::balancermemeber` nodes.

Configuring haproxy loadbalanced member nodes
---------------------------------------------

The `haproxy::balacemember` defined resource should be exported from each node
which is serving loadbalanced traffic. the `listening_service` attribute will
associate it with `haproxy::listen` directives on the haproxy node.
`ipaddresses` and `ports` will be assigned to the member to be contacted on. If an array of `ipaddresses` and `server_names` are provided then they will be added to the config in lock-step.


Copyright and License
---------------------

Copyright (C) 2012 [Puppet Labs](https://www.puppetlabs.com/) Inc

Puppet Labs can be contacted at: info@puppetlabs.com

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.