Exercise 1.2 - Adding nodes to F5 BIG-IP

Objective

Demonstrate use of the BIG-IP node module to add two RHEL (Red Hat Enterprise Linux) web servers as nodes for the BIG-IP load balancer.

Guide

Step 1

Using your text editor of choice create a new file called bigip-node.yml.

[student1@ansible ~]$ nano bigip-node.yml

``vim`` and ``nano`` are available on the control node

Step 2

Enter the following play definition into bigip-node.yml:

---
- name: BIG-IP SETUP
  hosts: lb
  connection: local
  gather_facts: false
  • The --- at the top of the file indicates that this is a YAML file.
  • The hosts: lb, indicates the play is run only on the lb group.Technically there only one F5 device but if there were multiple they would be configured simultaneously.
  • connection: local tells the Playbook to run locally (rather than SSHing to itself)
  • gather_facts: false disables facts gathering. We are not using any fact variables for this playbook.

Step 3

Next, add the first task. This task will use the set_fact module to set a parameter called ‘provider’.

This parameter will hold all the connection details to the BIG-IP and will be used in subsequent tasks

---
- name: BIG-IP SETUP
  hosts: lb
  connection: local
  gather_facts: false

  tasks:

  - set_fact:
     provider:
      server: "{{private_ip}}"
      user: "{{ansible_user}}"
      password: "{{ansible_ssh_pass}}"
      server_port: 8443
      validate_certs: no
  • The server: "{{private_ip}}" parameter tells the module to connect to the F5 BIG-IP IP address, which is stored as a variable private_ip in inventory
  • The user: "{{ansible_user}}" parameter tells the module the username to login to the F5 BIG-IP device with
  • The password: "{{ansible_ssh_pass}}" parameter tells the module the password to login to the F5 BIG-IP device with
  • The server_port: 8443 parameter tells the module the port to connect to the F5 BIG-IP device with

Step 4

Next, add task bigip_node module to configure the two RHEL web servers as nodes on the BIG-IP F5 load balancer.

---
- name: BIG-IP SETUP
  hosts: lb
  connection: local
  gather_facts: false

  tasks:

  - set_fact:
     provider:
      server: "{{private_ip}}"
      user: "{{ansible_user}}"
      password: "{{ansible_ssh_pass}}"
      server_port: 8443
      validate_certs: no

  - name: CREATE NODES
    bigip_node:
      provider: "{{provider}}"
      host: "{{hostvars[item].ansible_host}}"
      name: "{{hostvars[item].inventory_hostname}}"
    loop: "{{ groups['webservers'] }}"

A loop will repeat a task on a list provided to the task. In this case itwill loop twice, once for each of the two web servers.

  • name: CREATE NODES is a user defined description that will display in the terminal output.
  • bigip_node: tells the task which module to use. Everything except loop is a module parameter defined on the module documentation page.
  • The name: "{{hostvars[item].inventory_hostname}}" parameter tells the module to use the inventory_hostname as the name (which will be host1 and host2).
  • loop: tells the task to loop over the provided list. The list in this case is the group webservers which includes two RHEL hosts.

Step 5

Run the playbook - exit back into the command line of the control host and execute the following:

[student1@ansible ~]$ ansible-playbook bigip-node.yml

Playbook Output

The output will look as follows.

[student1@ansible]$ ansible-playbook bigip-node.yml

PLAY [BIG-IP SETUP] ************************************************************

TASK [CREATE NODES] ************************************************************
changed: [f5] => (item=host1)
changed: [f5] => (item=host2)

PLAY RECAP *********************************************************************
f5                         : ok=1    changed=1    unreachable=0    failed=0

Solution

The finished Ansible Playbook is provided here for an Answer key. Click here: bigip-node.yml.

Verifying the Solution

Login to the F5 with your web browser to see what was configured. Grab the IP information for the F5 load balancer from the lab_inventory/hosts file, and type it in like so: https://X.X.X.X:8443/

Login information for the BIG-IP: - username: admin - password: ansible OR what is provided at the time of spinning up the infrastruture

The list of nodes can be found by navigating the menu on the left. Click on Local Traffic-> then click on Nodes.

You have finished this exercise