BIG-IP deployments using Ansible in private and public cloud
F5 has been actively developing Ansible modules that help in deploying an application on the BIG-IP. For a list of candidate modules for Ansible 2.4 release refer to the Github link. These modules can be used to configure any BIG-IP (physical/virtual) in any environment (Public/Private or Hybrid cloud)
Before we can use the BIG-IP to deploy an application, we need to spin up a virtual edition of the BIG. Let’s look at some ways to spin up a BIG-IP in the Public and Private cloud
Private cloud
Create a BIG-IP guest VM through VMware vSphere
For more details on the ansible module refer to Ansible documentation
Pre-condition: On the VMware a template of the BIG-IP image has been created
Example Playbook:
- name: Create VMware guest |
|
hosts: localhost |
|
connection: local |
|
become: true |
|
tasks: |
|
- name: Deploy BIG-IP VE |
|
vsphere_guest: |
|
vcenter_hostname: 10.192.73.100 |
//vCenter hostname or IP address |
esxi: |
|
datacenter: F5 BD Lab |
//Datacenter name |
hostname: 10.192.73.22 |
//esxi hostname or IP address |
username: root |
//vCenter username |
password: ***** |
//vCenter password |
guest: “BIGIP-VM” |
//Name of the BIG-IP to be created |
from_template: yes |
|
template_src: "BIG-IP VE 12.1.2.0.0.249-Template" |
//Name of the template |
Spin up a BIG-IP VM in VMWARE using govc
For more details on the govc refer to govc github and vmware github
Pre-condition: govc has been installed on the ansible host
Example Playbook:
- name: Create VMware guest |
|
hosts: localhost |
|
connection: local |
|
tasks: |
|
- name: Import OVA and deploy BIG-IP VM |
|
command: "/usr/local/bin/govc import.ova -name=newVM BIGIP005 /tmp/BIGIP-12.1.2.0.0.249.LTM-scsi.ova" |
//Command to import the BIG-IP ova file |
environment: |
|
GOVC_HOST: "10.192.73.100" |
//vCenter hostname or IP address |
GOVC_URL: "https://10.192.73.100/sdk" |
|
GOVC_USERNAME: "root" |
//vCenter username |
GOVC_PASSWORD: "*******" |
//vCenter password |
GOVC_INSECURE: "1" |
|
GOVC_DATACENTER: "F5 BD Lab" |
//Datacenter name |
GOVC_DATASTORE: "datastore1 (5)" |
//Datastore on where to store the ova file |
GOVC_RESOURCE_POOL: "Testing" |
//Resource pool to use |
|
|
- name: Power on the VM |
|
command: "/usr/local/bin/govc vm.power -on newVM-BIGIP005" |
|
environment: |
|
GOVC_HOST: "10.192.73.100" |
|
GOVC_URL: "https://10.192.73.100/sdk" |
|
GOVC_USERNAME: "root" |
|
GOVC_PASSWORD: "vmware" |
|
GOVC_INSECURE: "1" |
|
GOVC_DATACENTER: "F5 BD Lab" |
|
GOVC_DATASTORE: "datastore1 (5)" |
|
GOVC_RESOURCE_POOL: "Testing" |
|
Public Cloud
Spin up a BIG-IP using cloud formation templates in AWS
For more details on the BIG-IP cloud formation templates, refer to the following Github Page
Pre-condition: Cloud formation JSON template has been downloaded to the Ansible host
Example Playbook:
- name: Launch BIG-IP CFT in AWS |
|
hosts: localhost |
|
gather_facts: false |
|
|
|
tasks: |
|
- name: Launch BIG-IP CFT |
|
cloudformation: |
|
aws_access_key: "******************" |
//AWS access key |
aws_secret_key: "******************" |
//AWS secret key |
stack_name: "StandaloneBIGIP-1nic-experimental-Ansible" |
|
state: "present" |
|
region: "us-west-2" |
|
disable_rollback: true |
|
template: "standalone-hourly-1nic-experimental.json" |
//JSON blob for the CFT |
template_parameters: |
//template parameters |
availabilityZone1: "us-west-2a" |
|
sshKey: "bigip-test" |
|
validate_certs : false |
|
register: stack |
|
- name: Get facts(IP-address) from a cloud formation stack |
|
cloudformation_facts: |
|
aws_access_key: "*****************" |
|
aws_secret_key: "*****************" |
|
region: "us-west-2" |
|
stack_name: "StandaloneBIGIP-1nic-experimental-Ansible" |
|
register: bigip_ip_address |
|
|
|
- set_fact: |
//Extract the BIG-IP MGMT IP address |
ip_address: "{{ bigip_ip_address['ansible_facts']['cloudformation']['StandaloneBIGIP-1nic-experimental-Ansible']['stack_outputs']['Bigip1subnet1Az1SelfEipAddress']}}" |
|
|
|
- copy: |
//Copy the BIG-IP MGMT IP address to a file |
content: "bigip_ip_address: {{ ip_address}}" |
|
dest: "aws_var_file.yaml" |
//Copied IP address can be be referenced from file |
mode: 0644 |
|
Above mentioned are few ways to spin up a BIG-IP Virtual edition in your private/public cloud environment. Once the BIG-IP is installed then use the F5 ansible modules to deploy the application on the BIG-IP.
Refer to DevCentral article to learn more about ansible roles and how we can use roles to onboard and network a BIG-IP.
Included is a simple playbook that you can download and run against the BIG-IP.
- name: Onboarding BIG-IP |
|
hosts: bigip |
//bigip variable should be present in the ansible inventory file |
gather_facts: false |
|
|
|
tasks: |
|
|
|
- name: Configure NTP server on BIG-IP |
|
bigip_device_ntp: |
|
server: "<bigip_ip_address>" |
|
user: "admin" |
|
password: "admin" |
|
ntp_servers: "172.2.1.1" |
|
validate_certs: False |
|
delegate_to: localhost |
|
|
|
- name: Configure BIG-IP hostname |
|
bigip_hostname: |
|
server: "<bigip_ip_address>" |
|
user: "admin" |
|
password: "admin" |
|
validate_certs: False |
|
hostname: "bigip1.local.com" |
|
delegate_to: localhost |
|
|
|
- name: Manage SSHD setting on BIG-IP |
|
bigip_device_sshd: |
|
server: "<bigip_ip_address>" |
|
user: "admin" |
|
password: "admin" |
|
banner: "enabled" |
|
banner_text: "Welcome- CLI username/password to login " |
|
validate_certs: False |
|
delegate_to: localhost |
|
|
|
- name: Manage BIG-IP DNS settings |
|
bigip_device_dns: |
|
server: "<bigip_ip_address>" |
|
user: "admin" |
|
password: "admin" |
|
name_servers: "172.2.1.1" |
|
search: "localhost" |
|
ip_version: "4" |
|
validate_certs: False |
|
delegate_to: localhost |
|
For more information on BIG-IP ansible playbooks visit the following github link
- ManiGaddeEmployee
@kernelPanic bigsuds & f5sdk
pip install bigsuds
pip install f5-sdk
for more details - including solution overview & technical White-paper:
- KernelPanicNimbostratus
What are the various software compatibility dependencies for getting ansible f5 to work?