Example Playbook and Setup in F5 Imperative Collection

Follow this tutorial to create a pool, add two members to that pool, and assign a virtual server to serve requests to the members in the pool.

You can create your own yaml file to use as a playbook, or follow along with this yaml file.

Creating an inventory file

All Ansible work starts with an inventory file.

For the purposes of this tutorial, it is not necessary to have anything special in the inventory file because we will be specifying our BIG-IP connection information within the playbook itself.

If you want to see more thorough examples of inventory in Ansible, we recommend you refer to inventory documentation found on Ansible’s website.

Let’s put the following text in a new file located at inventory/hosts.


The Playbook

Create a file called playbook.yaml in your current working directory and place the following content within it.

- name: Create a VIP, pool and pool members
  hosts: all
  connection: local

         password: admin
         user: admin
         validate_certs: no
         server_port: 443


     - name: Create a pool
         provider: "{{ provider }}"
         lb_method: ratio-member
         name: web
         slow_ramp_time: 120
       delegate_to: localhost

     - name: Add members to pool
         provider: "{{ provider }}"
         description: "webserver {{ item.name }}"
         host: "{{ item.host }}"
         name: "{{ item.name }}"
         pool: web
         port: 80
         - host:
           name: web01
         - host:
           name: web02
       delegate_to: localhost

     - name: Create a VIP
         provider: "{{ provider }}"
         description: foo-vip
         name: vip-1
         pool: web
         port: 80
         snat: Automap
           - http
           - clientssl
       delegate_to: localhost

Run the playbook

We can now run our playbook. We will run this from the top-level ansible directory. Refer to the command below.

ansible-playbook -i inventory/hosts playbook.yaml

If you followed the above steps correctly, you should see output similar to what is shown below.

PLAY [Create a VIP, pool and pool members] ***********************************************

TASK [Gathering Facts] *******************************************************************
ok: [localhost]

TASK [Create a pool] *********************************************************************
changed: [localhost -> localhost]

TASK [Add members to pool] ***************************************************************
changed: [localhost -> localhost] => (item={u'host': u'', u'name': u'web01'})
changed: [localhost -> localhost] => (item={u'host': u'', u'name': u'web02'})

TASK [Create a VIP] **********************************************************************
changed: [localhost -> localhost]

PLAY RECAP *******************************************************************************
localhost                  : ok=4    changed=3    unreachable=0    failed=0    skipped=0

Additional Examples

You can find additional examples for leveraging this collection in this Example Repo.