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
2 Comments
- ManiGadde
Employee
@kernelPanic bigsuds & f5sdk
pip install bigsuds
pip install f5-sdk
for more details - including solution overview & technical White-paper:
- KernelPanic
Nimbostratus
What are the various software compatibility dependencies for getting ansible f5 to work?
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)