Read this in other languages: English, 日本語.
Demonstrate use of the BIG-IP irule module to add iRules to a BIG-IP and then attach the iRules to a virtual server.
Using VSCode create a new file called bigip-irule.yml
by clicking the new file icon in the left pane.
Ansible playbooks are YAML files. YAML is a structured encoding format that is also extremely human readable (unlike it's subset - the JSON format).
Enter the following play definition into bigip-irule.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: f5
, indicates the play is run only on the F5 BIG-IP device connection: local
tells the Playbook to run locally (rather than SSHing to itself)gather_facts: no
disables facts gathering. We are not using any fact variables for this playbook.
Save and Exit out of editor.
Create two dummy irules with the names 'irule1' and 'irule2'
Content for irule1
when HTTP_REQUEST {
log local0. "Accessing iRule1"
}
Save the file
Content for irule2
when HTTP_REQUEST {
log local0. "Accessing iRule2"
}
Save the file
Next, re-open bigip-irule.yml
and add the task
. This task will use the bigip-irule
to add irules to the BIG-IP.
{% raw %}
vars:
irules: ['irule1', 'irule2']
tasks:
- name: ADD iRules
f5networks.f5_modules.bigip_irule:
provider:
server: "{{private_ip}}"
user: "{{ansible_user}}"
password: "{{ansible_password}}"
server_port: 8443
validate_certs: false
module: "ltm"
name: "{{item}}"
content: "{{lookup('file','{{item}}')}}"
with_items: "{{irules}}"
{% endraw %}
A play is a list of tasks. Tasks and modules have a 1:1 correlation. Ansible modules are reusable, standalone scripts that can be used by the Ansible API, or by the ansible or ansible-playbook programs. They return information to ansible by printing a JSON string to stdout before exiting.
A variable 'irules'
is a list defined with two irules => 'irule1' and irule2'name: ADD iRules
is a user defined description that will display in the terminal output.bigip_irule:
tells the task which module to use.- The
server: "{{private_ip}}"
parameter tells the module to connect to the F5 BIG-IP IP address, which is stored as a variableprivate_ip
in inventory - The
provider:
parameter is a group of connection details for the BIG-IP. - The
user: "{{ansible_user}}"
parameter tells the module the username to login to the F5 BIG-IP device with - The
password: "{{ansible_password}}"
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 - The
module: ltm
paramters tells the module which BIG-IP module(ltm) the iRule is for - The
name: "{{item}}"
parameter tells the module to create an iRule with the name 'irule1' and 'irule2' - The
content: "{{lookup('file','{{item}}')}}"
parameter tells the module what content to add to the iRule using the lookup plugin - The
validate_certs: "no"
parameter tells the module to not validate SSL certificates. This is just used for demonstration purposes since this is a lab. loop:
tells the task to loop over the provided list. The list in this case is the list of iRules.
Next, append the task
to above playbook. This task will use the bigip_virtual_server
to add attach the iRules to a Virtual Server on the BIG-IP.
{% raw %}
- name: ATTACH iRules TO VIRTUAL SERVER
f5networks.f5_modules.bigip_virtual_server:
provider:
server: "{{private_ip}}"
user: "{{ansible_user}}"
password: "{{ansible_password}}"
server_port: 8443
validate_certs: false
name: "vip"
irules: "{{irules}}"
{% endraw %}
irules: "{{irules}}
is a list of irules to be attached to the virtual server 'irule1' and 'irule2'
Details of BIG-IP virtual_Server module or reference Exercise 1.5
Save the file.
Run the playbook - Go back to the Terminal on VS Code server and execute the following:
[student1@ansible ~]$ ansible-navigator run bigip-irule.yml --mode stdout
[student1@ansible]$ ansible-navigator run bigip-irule.yml --mode stdout
PLAY [BIG-IP SETUP] ***********************************************************
TASK [ADD iRules] *******************************************************************************
changed: [f5] => (item=irule1)
changed: [f5] => (item=irule2)
TASK [ATTACH iRules TO VIRTUAL SERVER] ****************************************
changed: [f5]
PLAY RECAP *******************************************************************************
f5 : ok=2 changed=2 unreachable=0 failed=0
The finished Ansible Playbook is provided here for an Answer key. Click here: bigip-irule.yml.
To see the configured iRules and Virtual Server, login to the F5 load balancer with your web browser.
Grab the IP information for the F5 load balancer from the
/home/studentX/networking_workshop/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: provided by instructor defaults to ansible
The list of iRules can be found by navigating the menu on the left. Click on Local Traffic-> iRules -> iRules List.
To view the Virtual Server click on Local Traffic-> Virtual Servers, click on the Virtual Server then click on the 'resoruces' tab and view the iRules attached to the Virtual Server
You have finished this exercise. Click here to return to the lab guide