Last updated on: 2024-05-14 02:50:40.

Example Playbook and Setup with F5 Declarative Collection

Follow this tutorial to create a virtual service, pool, monitor, and pool members using the F5 Automation Toolchain’s AS3 extension.

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


You must have AS3 installed on your target BIG-IP for this example to work. If you are not familiar with AS3, see the AS3 documentation.

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 are specifying our BIG-IP connection information within the playbook itself.

First, put the following text in a new file located at inventory/hosts.


Create the AS3 Declaration file

The AS3 declaration file is the configuration definition for what you want setup on your BIG-IP.

Create a file called as3.json in your current working directory, and place the following content in it.

  "class": "AS3",
  "action": "deploy",
  "persist": true,
  "declaration": {
    "class": "ADC",
    "schemaVersion": "3.22.0",
    "id": "id",
    "label": "WebApp",
    "ansible": {
      "class": "Tenant",
      "A1": {
        "class": "Application",
        "web": {
          "class": "Service_HTTP",
          "virtualAddresses": [""],
          "virtualPort": 80,
          "pool": "web_pool"
        "web_pool": {
          "class": "Pool",
          "monitors": [{"use": "http_mon"}],
          "members": [
              "servicePort": 8080,
              "serverAddresses": [
        "http_mon": {
            "class": "Monitor",
            "monitorType": "http",
            "receive": "I AM UP"

The Playbook

The following playbook will: * Run the bigip_as3_deploy module using the AS3 declaration you created in the previous step.

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

- name: AS3
  hosts: bigip
  connection: httpapi
  gather_facts: false

  # Connection Info
    ansible_host: bigip-hostname
    ansible_user: admin
    ansible_httpapi_password: SuperSecret
    ansible_httpapi_port: 443
    ansible_network_os: f5networks.f5_bigip.bigip
    ansible_httpapi_use_ssl: yes
    ansible_httpapi_validate_certs: no


    - name: Deploy or Update AS3
          content: "{{ lookup('file', 'as3.json') }}"
      tags: [ deploy ]

Run the playbook

Now you can run the playbook using the following command:

ansible-playbook -i inventory/hosts playbook.yaml

If you followed the steps correctly, you should see output similar to the following.


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


Since AS3 is declarative, updating your application is as easy as modifying the JSON file and running the playbook again. You do not need to maintain logic in Ansible anymore for dependency mapping of pools to virtuals to profiles, etc. AS3 handles this logic for you.

Additional Examples

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