Generate, edit, and deploy F5 AS3 (Application Services 3) declarations for a virtual server straight to a BIG-IP's REST endpoint — no Ansible — with a form or code editor, git-backed source of truth, dry-run validation, and collector-routed delivery for on-prem devices.
AS3 — F5's Application Services 3 Extension — lets you describe an application service (a virtual server, its pool, members, monitors, and TLS) as a single JSON declaration and POST it to the BIG-IP, which reconciles the box to match. Versus turns each virtual server in your inventory into an AS3 declaration you can review, edit, version in git, and push to the device — declaratively, without generating or running Ansible.
This is the lightest-weight of the three F5 deploy paths in Versus. There is no playbook and no site build: the declaration goes straight to the BIG-IP's AS3 REST endpoint (/mgmt/shared/appsvcs/declare). The same delivery is collector-aware, so an on-prem F5 on a private LAN is reached the same way a cloud-reachable one is.
An AS3 deployment has three moving parts: generation (turning a VS into a declaration), the declaration itself (versioned in git), and delivery (the AS3 REST call to the device).
Versus builds the declaration from the VS and its pool records already in inventory. The generator maps database fields onto AS3 constructs:
Service_UDP; port 443 or an ssl/https name → Service_HTTPS; port 80 → Service_HTTP; otherwise Service_Generic.round-robin, least-connections-member, ratio-member, fastest-app-response, and the other standard BIG-IP methods), and pool members are grouped by service port.bigip references (e.g. /Common/http); an HTTPS service gets a default serverTLS of /Common/clientssl.device/vs-name — so re-deploying the same VS updates the same AS3 application rather than creating a duplicate.The result is a standard AS3 document pinned to schema version 3.56.0:
{
"class": "AS3",
"action": "deploy",
"persist": true,
"declaration": {
"class": "ADC",
"schemaVersion": "3.56.0",
"id": "urn:uuid:…",
"label": "web_vs",
"remark": "Generated by Versus v2 — bigip-01 — 2026-08-19T12:00:00Z",
"Common": {
"class": "Tenant",
"web_vs": {
"class": "Application",
"template": "generic",
"serviceMain": {
"class": "Service_HTTPS",
"virtualAddresses": ["10.0.0.10"],
"virtualPort": 443,
"pool": "web_pool",
"serverTLS": { "bigip": "/Common/clientssl" }
},
"web_pool": {
"class": "Pool",
"monitors": [{ "bigip": "/Common/http" }],
"loadBalancingMode": "round-robin",
"members": [
{ "servicePort": 8080, "serverAddresses": ["10.0.1.11", "10.0.1.12"], "enable": true }
]
}
}
}
}
}
Deployment POSTs the declaration to /mgmt/shared/appsvcs/declare on the target BIG-IP. Versus reads the per-tenant results array the AS3 extension returns and reports each tenant's outcome; a deploy succeeds only when every tenant result carries a 2xx code. Because AS3 is declarative, the extension itself works out the create/modify/delete operations needed to make the device match the declaration.
Delivery is collector-aware. For a collector-managed (site-bound, private-LAN) F5, the call is routed through the collector tunnel rather than reaching across the internet; where a collector-side credential mapping exists, the collector terminates TLS and injects the device credential locally, so no device password leaves your network. A cloud-reachable device is called directly over REST. Either way the operator experience is identical.
Open a virtual server and switch to the AS3 / JSON or AS3 / YAML tab. The tab loads the current declaration: if the VS has already been saved to a repo file, you see the committed content (source: git); otherwise you see freshly generated content (source: generated) with a note that it hasn't been saved yet.
You work with it two ways:
Three actions run left to right across the tab, and they are gated in order — you cannot deploy a declaration that isn't committed to git:
| Action | What it does |
|---|---|
| Save to Repo | Writes the declaration to a git-backed file for this VS ({group}/{vs_name}.as3.json or .as3.yaml). If the repo can't be inferred, Versus prompts you to pick one. |
| Git Push | Pushes the committed file to the repo's remote. Disabled while there are unsaved edits. |
| Run Workflow | Runs the AS3 deploy workflow against the committed file. Disabled until the file is saved to a repo. |
Run Workflow offers two modes:
Both modes open the resulting workflow run so you can watch it execute step by step.
The Run Workflow button doesn't call the device directly. It launches a seeded workflow (f5-as3-from-file) that takes the change through the git flow so the applied configuration is recorded, not just pushed:
At the center is a single workflow step, f5.as3_deploy — an F5 AS3 Deploy action you can also drop into any workflow you build yourself. It resolves the declaration from one of three sources, in priority order:
| Source | How it's supplied |
|---|---|
| Inline | A raw AS3 declaration passed directly in the step config (declaration). Overrides the others. |
| Repo file | A committed .as3.json / .as3.yaml pulled and read from git (repo_id + file path). YAML is converted to JSON for the REST call. |
| Generated | Built on the fly from a VS id (generate_vs_id). |
The step's other inputs are the target device (an explicit device_id, or the first F5 in the run's device group) and check_mode. With check_mode on, Versus sets the declaration's action to dry-run before sending it, so AS3 evaluates the change without applying it — the same "dry run" the UI exposes.
Because it's an ordinary workflow step, AS3 deploys can be composed with pre-checks, approvals, and back-outs, scheduled, or triggered from the API like any other automation.
Versus offers three ways to push F5 configuration, and each virtual server exposes tabs for all of them. AS3 is the right choice when you want a declarative, idempotent application definition delivered with the least machinery:
All three share the same git-backed, collector-routed foundation, so you can standardize on AS3 for application delivery and fall back to the others where you need them. See the F5 BIG-IP Integration guide for the wider picture.
f5.as3_deploy step into larger changes.