# F5 BIG-IP Load Balancer Plugin Manual

## Preface

This document describes the functionality provided by the F5 BIG-IP plugin.

Refer to XL Deploy Reference Manual for background information on XL Deploy and deployment concepts.

## Overview

The BIG-IP plugin is a XL Deploy plugin that adds capability for managing deployments done to application and web servers whose traffic is managed by a BIG-IP load-balancing device.

## Features

- Allows servers and services to be taken out of the load balancing pool before a deployment and put back after the deployment has been performed.

## Requirements

- XL Deploy requirements
  - XL Deploy: version 4.5.0+
  - BIG-IP: 10.x, 11.x
  - Python: 2.7 (additional libraries required: pycontrol 2.0+, suds 0.3.9+)
  - Other XL Deploy plugins:
    - loadbalancer-plugin (distributed together)
    - group-orchestrator-plugin 4.5.0+
    - webserver-plugin 4.5.0+

## Installation

Place the plugin JAR file and all the dependent plugin files into your SERVER_HOME/plugins directory.

Install Python 2.7.x and the additional pycontrol (https://pypi.python.org/pypi/pycontrol) and suds (https://pypi.python.org/pypi/suds) libraries on the host which has access to the BIG-IP loadbalancer device.

## Usage

The plugin works in conjunction with the "group-based" orchestrator to disable and enable containers which are part of a single deployment group in one go.

The group-based orchestrator will divvy up the deployment into multiple phases, based on the 'deploymentGroup' property of the containers that are being targeted. Each of these group will be disabled in the BIG-IP just before they're deployed to, and will be re-enabled right after the deployment to that group. This will ensure that there is no downtime during the deployment.

The plugin will add the following 4 properties to every container to control how the server is known in the BIG-IP loadbalancer, and should it take part in the loadbalancing deployment:

|  | Additional container properties
--- | --- | ---
|  | bigIpAddress : STRING
|  | The address this server is registered under in the BigIP load balancer
|  | bigIpPool : STRING
|  | The BigIP load balancer pool this server is a member of
|  | bigIpPort : INTEGER
|  | The port of the service of this server that is load balanced by the BigIP load balancer
|  | disableInLoadBalancer : BOOLEAN = true
|  | Whether this server should be disabled in the load balancer when it is being deployed to

The plugin will add two steps to the deployment of each deployment group.

1. A disable server step, this will stop the traffic to the servers that are managed by the loadbalancer.
2. An enable server step, this will start the traffic to the servers that were previously disabled.

Traffic management to the server will be done by enabling and disabling the referenced BIG-IP pool member inside the BIG-IP loadbalancing pool.

### Setting up a loadbalancing configuration

In order to setup XL Deploy to use your BIG-IP loadbalancing device, you will need to take the following steps.

1. Create a BIG-IP LocalTrafficManager (`big-ip.LocalTrafficManager`) configuration item in the 'Infrastructure' tree under a host, and add it as a `member` to the `udm.Environment`. The host configuration item indicates how to connect to the BIG-IP device.
2. Add all the containers that the BIG-IP device manages to the `managedServers` collection of the created BIG-IP LocalTrafficManager configuration item.
3. Populate the BIG-IP connection properties 'address', 'username', 'password', 'partition' as seen from the host machine
4. Update all managed containers with appropriate deployment group and BIG-IP member data and add them to the same `udm.Environment` as the BIG-IP LocalTrafficManager CI

### Loadbalancing a mixed Application Server and Web Server environment

If you have an Apache httpd server which fronts a website backed by one or more application servers, it is possible to setup a more complex loadbalancing scenario, thus ensuring that the served website is not broken during the deployment. For this, the `www.ApacheHttpdServer` configuration item from the standard webserver-plugin is augmented with a property called `applicationServers`.

Whenever a deployment is done to one or more of the containers mentioned in the `applicationServers` residing in the same Environment as the web server, the following happens in addition to the standard behavior:

1. Just before the first application server will be deployed to, the webserver will be removed from the loadbalancing configuration
2. After the last application server linked to the web server has been deployed to, the webserver is put back into the loadbalancing configuration

## Release notes

### BIG-IP plugin 4.5.0

XL Deploy 4.5.0 compatibility.

#### Improvements

- [DEPL-5354] - Add support for F5 BIG-IP 11.x appliances

### BIG-IP plugin 4.0.0

XL Deploy 4.0.0 compatibility.

## CI Reference

### Configuration Item Overview

#### Containers

#### Other Configuration Items

### Configuration Item Details

#### big-ip.LocalTrafficManager

Type Hierarchy | lb.LoadBalancer >> udm.BaseContainer >> udm.BaseConfigurationItem
Interfaces | udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

An F5 BigIp LoadBalancer

|  | Parent
--- | --- | ---
|  | host : CI<overthere.Host>
|  | The host that runs the PyControl 2 library that controls the BigIP load balancer

|  | Public Properties
--- | --- | ---
|  | address : STRING
|  | The address of the BigIP load balancer
|  | partition : STRING
|  | The active partition on the BigIP load balancer
|  | password : STRING
|  | The password used to connect to the BigIP load balancer
|  | username : STRING
|  | The username used to connect to the BigIP load balancer
|  | bigIpAddress : STRING
|  | The address this server is registered under in the BigIP load balancer
|  | bigIpPool : STRING
|  | The BigIP load balancer pool this server is a member of
|  | bigIpPort : INTEGER
|  | The port of the service of this server that is load balanced by the BigIP load balancer
|  | disableInLoadBalancer : BOOLEAN = true
|  | Whether this server should be disabled in the load balancer when it is being deployed to
|  | managedServers : SET_OF_CI<udm.Container>
|  | The servers managed by this load balancer
|  | tags : SET_OF_STRING
|  | If set, only deployables with the same tag will be automatically mapped to this container.

|  | Hidden Properties
--- | --- | ---
|  | addToPoolOrder : INTEGER = 94
|  | Add To Pool Order
|  | addToPoolScript : STRING = big-ip/enable-pool-member.py.ftl
|  | Add To Pool Script
|  | removeFromPoolOrder : INTEGER = 8
|  | Remove From Pool Order
|  | removeFromPoolScript : STRING = big-ip/disable-pool-member.py.ftl
|  | Remove From Pool Script

#### lb.LoadBalancer

Virtual Type
Type Hierarchy | udm.BaseContainer >> udm.BaseConfigurationItem
Interfaces | udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

The Load Balancer super type.

|  | Public Properties
--- | --- | ---
|  | bigIpAddress : STRING
|  | The address this server is registered under in the BigIP load balancer
|  | bigIpPool : STRING
|  | The BigIP load balancer pool this server is a member of
|  | bigIpPort : INTEGER
|  | The port of the service of this server that is load balanced by the BigIP load balancer
|  | disableInLoadBalancer : BOOLEAN = true
|  | Whether this server should be disabled in the load balancer when it is being deployed to
|  | managedServers : SET_OF_CI<udm.Container>
|  | The servers managed by this load balancer
|  | tags : SET_OF_STRING
|  | If set, only deployables with the same tag will be automatically mapped to this container.