Example declarations

The following examples show you some AS3 declarations and the BIG-IP LTM objects they create. For more example declarations, see Appendix B: Additional Example Declarations. If you missed it, we recommend you first read Composing an AS3 Declaration for a breakdown of some of the components of a declaration.

Note: If you do not specify certain parameters in your declaration, the system supplies default values. For example, if you do not specify a persistence method (or specify none), the system uses Cookie persistence by default.

Example 1: Simple HTTP application

Example 1 is the same declaration as in the Composing the Declaration section, though here you can see the system-supplied default values in the second code block. This example creates the following objects on the BIG-IP:

  • Partition (tenant) named Sample_01.
  • Virtual server (HTTP) named serviceMain (called _A1 in the BIG-IP GUI).
  • Pool named web_pool with 2 members monitored by the default HTTP health monitor.
{
   "class": "AS3",
   "action": "deploy",
   "persist": true,
   "declaration": {
      "class": "ADC",
      "schemaVersion": "3.0.0",
      "id": "urn:uuid:33045210-3ab8-4636-9b2a-c98d22ab915d",
      "label": "Sample 1",
      "remark": "Simple HTTP application with RR pool",
      "Sample_01": {
         "class": "Tenant",
         "A1": {
            "class": "Application",
            "template": "http",
            "serviceMain": {
               "class": "Service_HTTP",
               "virtualAddresses": [
                  "10.0.1.10"
               ],
               "pool": "web_pool"
            },
            "web_pool": {
               "class": "Pool",
               "monitors": [
                  "http"
               ],
               "members": [{
                  "servicePort": 80,
                  "serverAddresses": [
                     "192.0.1.10",
                     "192.0.1.11"
                  ]
               }]
            }
         }
      }
   }
}

This declaration creates a virtual server and a pool. But if you are familiar with creating objects on the BIG-IP system you know there are properties required that are not included in our declaration. As part of the validation process, AS3 includes defaults for required values if they are not specified in the declaration. For example, the following is the declaration after the system adds the defaults (you can see these defaults by POSTing to /mgmt/shared/appsvcs/declare?show=full).

{
   "class": "AS3",
   "action": "deploy",
   "persist": true,
   "declaration": {
      "class": "ADC",
      "schemaVersion": "3.0.0",
      "id": "urn:uuid:33045210-3ab8-4636-9b2a-c98d22ab915d",
      "label": "Sample 1",
      "remark": "Simple HTTP application with RR pool",
      "controls": {},
      "Sample_01": {
         "class": "Tenant",
         "verifiers": {
            "13.1.0.2.0.0.6": "3a605a6479b6880b70502b14d5345552ce9f6daf128a76e5ec675ef2c8638bc1"
         },
         "A1": {
            "class": "Application",
            "template": "http",
            "serviceMain": {
               "class": "Service_HTTP",
               "virtualAddresses": [
                  "203.0.113.10"
               ],
               "pool": "/T1/A1/web_pool",
               "virtualPort": 80,
               "persistenceMethods": [
                  "cookie"
               ],
               "layer4": "tcp",
               "enable": true,
               "maxConnections": 0,
               "addressStatus": true,
               "mirroring": "none",
               "translateClientPort": false,
               "translateServerAddress": true,
               "translateServerPort": true
            },
            "web_pool": {
               "class": "Pool",
               "monitors": [
                  "http"
               ],
               "members": [{
                  "servicePort": 80,
                  "serverAddresses": [
                     "192.0.2.10",
                     "192.0.2.11"
                  ],
                  "enable": true,
                  "connectionLimit": 0,
                  "rateLimit": -1,
                  "dynamicRatio": 1,
                  "ratio": 1,
                  "priorityGroup": 0,
                  "addressDiscovery": "static",
                  "portDiscovery": "none"
               }],
               "loadBalancingMode": "round-robin",
               "minimumMembersActive": 1,
               "reselectTries": 0,
               "serviceDownAction": "none",
               "slowRampTime": 10,
               "minimumMonitors": 1
            },
            "enable": true
         },
         "enable": true
      },
      "family": ""
   }
}

Example 2: HTTPS application

In this example, the declaration results in the configuration for a an HTTPS application. It creates the following objects on the BIG-IP:

  • Partition (tenant) named Sample_02.
  • Virtual server (HTTPS) named serviceMain (called _A1 in the BIG-IP GUI).
  • TLS/SSL profile (including certificate and private key) named TLS_Server. In the BIG-IP UI, this is a Client SSL profile.
  • Pool named web_pool using the predictive (node) load balancing method, with 2 members monitored by the default HTTP health monitor.
{
     "class": "AS3",
     "action": "deploy",
     "persist": true,
     "declaration": {
       "class": "ADC",
       "schemaVersion": "3.0.0",
       "id": "123abc",
       "label": "Sample 2",
       "remark": "HTTPS with predictive-node pool",
       "Sample_02": {
           "class": "Tenant",
           "A1": {
               "class": "Application",
               "template": "https",
               "serviceMain": {
                   "class": "Service_HTTPS",
                   "virtualAddresses": [
                     "198.19.192.11"
                   ],
                   "pool": "web_pool",
                   "serverTLS": "webtls"
                 },
                 "web_pool": {
                   "class": "Pool",
                   "loadBalancingMode": "predictive-node",
                   "monitors": [
                     "http"
                   ],
                   "members": [
                     {
                       "servicePort": 80,
                       "serverAddresses": [
                         "198.19.192.12",
                         "198.19.192.13"
                       ]
                     }
                   ]
                 },
                 "webtls": {
                   "class": "TLS_Server",
                   "certificates": [
                     {
                       "certificate": "webcert"
                     }
                   ]
                 },
                 "webcert": {
                     "class": "Certificate",
                     "remark": "in practice we recommend using a passphrase",
                     "certificate": "-----BEGIN CERTIFICATE-----\nMIICnDCCAgWgAwIBAgIJAJ5n2b0OCEjwMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMRQwEgYDVQQKDAtmNV9OZXR3b3JrczEbMBkGA1UEAwwSc2FtcGxlLmV4YW1wbGUubmV0MB4XDTE3MTEyNjE5NTAyNFoXDTE4MDIyNTE5NTAyNFowZzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFDASBgNVBAoMC2Y1X05ldHdvcmtzMRswGQYDVQQDDBJzYW1wbGUuZXhhbXBsZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALEsuXmSXVQpYjrZPW+WiTBjn491mwZYT7Q92V1HlSBtM6WdWlK1aZN5sovfKtOX7Yrm8xa+e4o/zJ2QYLyyv5O+t2EGN/4qUEjEAPY9mwJdfzRQy6Hyzm84J0QkTuUJ/EjNuPji3D0QJRALUTzu1UqqDCEtiN9OGyXEkh7uvb7BAgMBAAGjUDBOMB0GA1UdDgQWBBSVHPNrGWrjWyZvckQxFYWO59FRFjAfBgNVHSMEGDAWgBSVHPNrGWrjWyZvckQxFYWO59FRFjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAJeJ9SEckEwPhkXOm+IuqfbUS/RcziifBCTmVyE+Fa/j9pKSYTgiEBNdbJeBEa+gPMlQtbV7Y2dy8TKx/8axVBHiXC5geDML7caxOrAyHYBpnx690xJTh5OIORBBM/a/NvaR+P3CoVebr/NPRh9oRNxnntnqvqD7SW0U3ZPe3tJc\n-----END CERTIFICATE-----",
                     "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,D8FFCE6B255601587CB54EC29B737D31\n\nkv4Fc3Jn0Ujkj0yRjt+gQQfBLSNF2aRLUENXnlr7Xpzqu0Ahr3jS1bAAnd8IWnsR\nyILqVmKsYF2DoHh0tWiEAQ7/y/fe5DTFhK7N4Wml6kp2yVMkP6KC4ssyYPw27kjK\nDBwBZ5O8Ioej08A5sgsLCmglbmtSPHJUn14pQnMTmLOpEtOsu6S+2ibPgSNpdg0b\nCAJNG/KHe+Vkx59qNDyDeKb7FZOlsX30+y67zUq9GQqJEDuysPJ2BUNP0IJXAjst\nFIt1qNoZew+5KDYs7u/lPxcMGTirUhgI84Jy4WcDvSOsP/tKlxj04TbIE3epmSKy\n+TihHkwY7ngIGtcm3Sfqk5jz2RXoj1/Ac3SW8kVTYaOUogBhn7zAq4Wju6Et4hQG\nRGapsJp1aCeZ/a4RCDTxspcKoMaRa97/URQb0hBRGx3DGUhzpmX9zl7JI2Xa5D3R\nmdBXtjLKYJTdIMdd27prBEKhMUpae2rz5Mw4J907wZeBq/wu+zp8LAnecfTe2nGY\nE32x1U7gSEdYOGqnwxsOexb1jKgCa67Nw9TmcMPV8zmH7R9qdvgxAbAtwBl1F9OS\nfcGaC7epf1AjJLtaX7krWmzgASHl28Ynh9lmGMdv+5QYMZvKG0LOg/n3m8uJ6sKy\nIzzvaJswwn0j5P5+czyoV5CvvdCfKnNb+3jUEN8I0PPwjBGKr4B1ojwhogTM248V\nHR69D6TxFVMfGpyJhCPkbGEGbpEpcffpgKuC/mEtMqyDQXJNaV5HO6HgAJ9F1P6v\n5ehHHTMRvzCCFiwndHdlMXUjqSNjww6me6dr6LiAPbejdzhL2vWx1YqebOcwQx3G\n-----END RSA PRIVATE KEY-----",
                     "passphrase": {
                         "ciphertext": "ZjVmNQ==",
                         "protected": "eyJhbGciOiJkaXIiLCJlbmMiOiJub25lIn0"
                     }
                 }
             }
         }
     }

The following is the declaration after the system adds the defaults.

{
     "class": "AS3",
     "action": "deploy",
     "persist": true,
     "declaration": {
     "class": "ADC",
     "schemaVersion": "3.0.0",
     "id": "123abc",
     "label": "Sample 2",
     "remark": "HTTPS with predictive-node pool",
     "updateMode": "selective",
     "Sample_02": {
         "class": "Tenant",
         "A1": {
             "class": "Application",
             "template": "https",
             "serviceMain": {
                 "class": "Service_HTTPS",
                 "virtualAddresses": [
                     "198.19.192.11"
                 ],
                 "pool": "/Sample_02/A1/web_pool",
                 "serverTLS": "/Sample_02/A1/webtls",
                 "virtualPort": 443,
                 "redirect80": true,
                 "persistenceMethods": [
                     "cookie"
                 ],
                 "layer4": "tcp",
                 "enable": true,
                 "maxConnections": 0,
                 "addressStatus": true,
                 "mirroring": "none",
                 "translateClientPort": false,
                 "translateServerAddress": true,
                 "translateServerPort": true
           },
           "web_pool": {
               "class": "Pool",
               "loadBalancingMode": "predictive-node",
               "monitors": [
                   "http"
               ],
               "members": [
                 {
                   "servicePort": 80,
                   "serverAddresses": [
                     "198.19.192.12",
                     "198.19.192.13"
                   ],
                   "enable": true,
                   "connectionLimit": 0,
                   "rateLimit": -1,
                   "dynamicRatio": 1,
                   "ratio": 1,
                   "priorityGroup": 0,
                   "addressDiscovery": "static",
                   "portDiscovery": "none"
                 }
               ],
               "minimumMembersActive": 1,
               "reselectTries": 0,
               "serviceDownAction": "none",
               "slowRampTime": 10,
               "minimumMonitors": 1
           },
           "webtls": {
             "class": "TLS_Server",
             "certificates": [
               {
                 "certificate": "/Sample_02/A1/webcert"
               }
             ],
             "requireSNI": false,
             "ciphers": "DEFAULT",
             "authenticationMode": "ignore",
             "authenticationFrequency": "one-time"
           },
           "webcert": {
             "class": "Certificate",
             "remark": "in practice we recommend using a passphrase",
             "certificate": "-----BEGIN CERTIFICATE-----\nMIICnDCCAgWgAwIBAgIJAJ5n2b0OCEjwMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMRQwEgYDVQQKDAtmNV9OZXR3b3JrczEbMBkGA1UEAwwSc2FtcGxlLmV4YW1wbGUubmV0MB4XDTE3MTEyNjE5NTAyNFoXDTE4MDIyNTE5NTAyNFowZzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFDASBgNVBAoMC2Y1X05ldHdvcmtzMRswGQYDVQQDDBJzYW1wbGUuZXhhbXBsZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALEsuXmSXVQpYjrZPW+WiTBjn491mwZYT7Q92V1HlSBtM6WdWlK1aZN5sovfKtOX7Yrm8xa+e4o/zJ2QYLyyv5O+t2EGN/4qUEjEAPY9mwJdfzRQy6Hyzm84J0QkTuUJ/EjNuPji3D0QJRALUTzu1UqqDCEtiN9OGyXEkh7uvb7BAgMBAAGjUDBOMB0GA1UdDgQWBBSVHPNrGWrjWyZvckQxFYWO59FRFjAfBgNVHSMEGDAWgBSVHPNrGWrjWyZvckQxFYWO59FRFjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAJeJ9SEckEwPhkXOm+IuqfbUS/RcziifBCTmVyE+Fa/j9pKSYTgiEBNdbJeBEa+gPMlQtbV7Y2dy8TKx/8axVBHiXC5geDML7caxOrAyHYBpnx690xJTh5OIORBBM/a/NvaR+P3CoVebr/NPRh9oRNxnntnqvqD7SW0U3ZPe3tJc\n-----END CERTIFICATE-----",
             "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,D8FFCE6B255601587CB54EC29B737D31\n\nkv4Fc3Jn0Ujkj0yRjt+gQQfBLSNF2aRLUENXnlr7Xpzqu0Ahr3jS1bAAnd8IWnsR\nyILqVmKsYF2DoHh0tWiEAQ7/y/fe5DTFhK7N4Wml6kp2yVMkP6KC4ssyYPw27kjK\nDBwBZ5O8Ioej08A5sgsLCmglbmtSPHJUn14pQnMTmLOpEtOsu6S+2ibPgSNpdg0b\nCAJNG/KHe+Vkx59qNDyDeKb7FZOlsX30+y67zUq9GQqJEDuysPJ2BUNP0IJXAjst\nFIt1qNoZew+5KDYs7u/lPxcMGTirUhgI84Jy4WcDvSOsP/tKlxj04TbIE3epmSKy\n+TihHkwY7ngIGtcm3Sfqk5jz2RXoj1/Ac3SW8kVTYaOUogBhn7zAq4Wju6Et4hQG\nRGapsJp1aCeZ/a4RCDTxspcKoMaRa97/URQb0hBRGx3DGUhzpmX9zl7JI2Xa5D3R\nmdBXtjLKYJTdIMdd27prBEKhMUpae2rz5Mw4J907wZeBq/wu+zp8LAnecfTe2nGY\nE32x1U7gSEdYOGqnwxsOexb1jKgCa67Nw9TmcMPV8zmH7R9qdvgxAbAtwBl1F9OS\nfcGaC7epf1AjJLtaX7krWmzgASHl28Ynh9lmGMdv+5QYMZvKG0LOg/n3m8uJ6sKy\nIzzvaJswwn0j5P5+czyoV5CvvdCfKnNb+3jUEN8I0PPwjBGKr4B1ojwhogTM248V\nHR69D6TxFVMfGpyJhCPkbGEGbpEpcffpgKuC/mEtMqyDQXJNaV5HO6HgAJ9F1P6v\n5ehHHTMRvzCCFiwndHdlMXUjqSNjww6me6dr6LiAPbejdzhL2vWx1YqebOcwQx3G\n-----END RSA PRIVATE KEY-----",
             "passphrase": {
                 "ciphertext": "JE0kaEMkTHlpaDBaRVVqNkRtNm16YXh5RktyZz09",
                 "protected": "eyJhbGciOiJkaXIiLCJlbmMiOiJmNXN2In0=",
                 "miniJWE": true,
                 "allowReuse": false
             },
           },
           "enable": true
         },
         "enable": true
       }
   }
}

Example 3: TCP virtual server to ICAP with custom monitor

In this example, we show a declaration that creates a TCP virtual server. This virtual server contains a custom health monitor for ICAP.

This example creates the following objects on the BIG-IP:

  • Partition (tenant) named Sample_05.
  • A TCP virtual server named serviceMain on port 1344 (called _A1 in the BIG-IP GUI).
  • A TCP profile using the mptcp-mobile-optimized parent.
  • A pool named svc_pool containing two members (also using port 1344).
  • A custom TCP health monitor with custom Send and Receive strings for ICAP.
{
   "class": "AS3",
   "action": "deploy",
   "persist": true,
   "declaration": {
      "class": "ADC",
      "schemaVersion": "3.0.0",
      "id": "789ghi",
      "label": "Sample 3",
      "remark": "TCP load-balanced to ICAP with custom monitor",
      "Sample_03": {
         "class": "Tenant",
         "A1": {
            "class": "Application",
            "template": "tcp",
            "serviceMain": {
               "class": "Service_TCP",
               "virtualAddresses": [
                  "10.0.5.10"
               ],
               "virtualPort": 1344,
               "pool": "svc_pool"
            },
            "svc_pool": {
               "class": "Pool",
               "monitors": [{
                  "use": "icap_monitor"
               }],
               "members": [{
                  "servicePort": 1344,
                  "serverAddresses": [
                     "192.0.5.10",
                     "192.0.5.11"
                  ]
               }]
            },
            "icap_monitor": {
               "class": "Monitor",
               "monitorType": "tcp",
               "send": "OPTIONS icap://icap.example.net/ ICAP/1.0\r\nUser-Agent: f5-ADC\r\n\r\n",
               "receive": "ICAP/1.0 200 OK",
               "adaptive": false
            }
         }
      }
   }
}

The following is the declaration after the system adds the defaults.

{
     "class": "AS3",
     "action": "deploy",
     "persist": true,
     "declaration": {
             "class": "ADC",
             "schemaVersion": "3.0.0",
             "id": "789ghi",
             "label": "Sample 3",
             "remark": "TCP load-balanced to ICAP with custom monitor",
             "Sample_03": {
                     "class": "Tenant",
                     "A1": {
                             "class": "Application",
                             "template": "tcp",
                             "serviceMain": {
                                     "class": "Service_TCP",
                                     "virtualAddresses": [
                                             "10.0.5.10"
                                     ],
                                     "virtualPort": 1344,
                                     "pool": "svc_pool",
                                     "persistenceMethods": [
                                             "source-address"
                                     ],
                                     "layer4": "tcp",
                                     "enable": true,
                                     "maxConnections": 0,
                                     "addressStatus": true,
                                     "mirroring": "none",
                                     "translateClientPort": false,
                                     "translateServerAddress": true,
                                     "translateServerPort": true
                             },
                             "svc_pool": {
                                     "class": "Pool",
                                     "monitors": [{
                                             "use": "icap_monitor"
                                     }],
                                     "members": [{
                                             "servicePort": 1344,
                                             "serverAddresses": [
                                                     "192.0.5.10",
                                                     "192.0.5.11"
                                             ],
                                             "enable": true,
                                             "connectionLimit": 0,
                                             "rateLimit": -1,
                                             "dynamicRatio": 1,
                                             "ratio": 1,
                                             "priorityGroup": 0,
                                             "addressDiscovery": "static",
                                             "portDiscovery": "none"
                                     }],
                                     "enable": true,
                                     "connectionLimit": 0,
                                     "rateLimit": -1,
                                     "dynamicRatio": 1,
                                     "ratio": 1,
                                     "priorityGroup": 0,
                                     "addressDiscovery": "static",
                                     "portDiscovery": "none"
                             },
                             "icap_monitor": {
                                     "class": "Monitor",
                                     "monitorType": "tcp",
                                     "send": "OPTIONS icap://icap.example.net/ ICAP/1.0\r\nUser-Agent: f5-ADC\r\n\r\n",
                                     "receive": "ICAP/1.0 200 OK",
                                     "adaptive": false,
                                     "targetAddress": "",
                                     "interval": 5,
                                     "upInterval": 0,
                                     "timeUntilUp": 0,
                                     "timeout": 16,
                                     "targetPort": 0,
                                     "dscp": 0,
                                     "receiveDown": "",
                                     "reverse": false,
                                     "transparent": false,
                                     "adaptiveDivergenceType": "relative",
                                     "adaptiveDivergenceMilliseconds": 500,
                                     "adaptiveDivergencePercentage": 100,
                                     "adaptiveLimitMilliseconds": 1000,
                                     "adaptiveWindow": 180
                             },
                             "enable": true
                     },
                     "enable": true
             }
  }
}

Example 4: Calling resources from a URL source

In this example, we show how AS3 can fetch an external resource value from a URL using HTTP or HTTPS. This is useful if you have a bulky configuration resource (such as an F5 WAF security policy or an iRule); you can store the resource on a webserver under your control, then include a URL reference to it in the declaration. In this example, our declaration includes an “under maintenance” iRule from a URL source. In this example, we also set the historyLimit, which sets the number of previously-deployed declarations AS3 saves for review using GET (for example using ?age=list) and for use with POST action redeploy and redeployAge=N.

{
   "class": "AS3",
   "action": "deploy",
   "persist": true,
   "historyLimit": 10,
   "declaration": {
     "class": "ADC",
     "schemaVersion": "3.0.0",
     "id": "8316914",
     "label": "Sample 4",
     "remark": "Simple HTTP application referencing an externally hosted iRule",
     "TenantA": {
       "class": "Tenant",
       "ApplicationA": {
         "class": "Application",
         "template": "http",
         "serviceMain": {
           "class": "Service_HTTP",
           "iRules": ["Maintenance_iRule"],
           "virtualAddresses": [
             "10.0.1.170"
           ],
           "pool": "web_pool"
         },

         "web_pool": {
           "class": "Pool",
           "monitors": [
             "http"
           ],
           "members": [{
             "servicePort": 80,
             "serverAddresses": [
               "192.0.1.170",
               "192.0.1.171"
             ]
           }]

         },
         "Maintenance_iRule": {
           "class": "iRule",
           "iRule": {
             "url": "https://raw.githubusercontent.com/f5devcentral/f5-automation-labs/master/files/irules/maintenance-page.irule"
           }
         }

       }
     }
   }
 }

The following is the declaration after the system adds the defaults. In this example, we use the GET method with ?show=expanded, to show the iRule that AS3 retrieved.

{
   "class": "ADC",
   "schemaVersion": "3.0.0",
   "id": "8316914",
   "label": "Sample 4",
   "remark": "Simple HTTP application referencing an externally hosted iRule",
   "TenantA": {
       "class": "Tenant",
       "ApplicationA": {
           "class": "Application",
           "template": "http",
           "serviceMain": {
               "class": "Service_HTTP",
               "iRules": [
                   "/TenantA/ApplicationA/Maintenance_iRule"
               ],
               "virtualAddresses": [
                   "10.0.1.172"
               ],
               "pool": "/TenantA/ApplicationA/web_pool",
               "virtualPort": 80,
               "persistenceMethods": [
                   "cookie"
               ],
               "layer4": "tcp",
               "enable": true,
               "maxConnections": 0,
               "addressStatus": true,
               "mirroring": "none",
               "translateClientPort": false,
               "translateServerAddress": true,
               "translateServerPort": true
           },
           "web_pool": {
               "class": "Pool",
               "monitors": [
                   "http"
               ],
               "members": [
                   {
                       "servicePort": 80,
                       "serverAddresses": [
                           "192.0.1.174",
                           "192.0.1.175"
                       ],
                       "enable": true,
                       "connectionLimit": 0,
                       "rateLimit": -1,
                       "dynamicRatio": 1,
                       "ratio": 1,
                       "priorityGroup": 0,
                       "addressDiscovery": "static",
                       "portDiscovery": "none"
                   }
               ],
               "loadBalancingMode": "round-robin",
               "minimumMembersActive": 1,
               "reselectTries": 0,
               "serviceDownAction": "none",
               "slowRampTime": 10,
               "minimumMonitors": 1
           },
           "Maintenance_iRule": {
               "class": "iRule",
               "iRule": "when HTTP_REQUEST {\n   HTTP::respond 200 content {\n      <html>\n         <head>\n            <title>Blocked Page</title>\n         </head>\n         <body>\n            We are sorry, but the site you are looking for is currently under Maintenance<br>\n            If you feel you have reached this page in error, please try again. Thanks for coming\n         </body>\n      </html>\n   } noserver Cache-Control no-cache Connection Close\n}\n",
               "expand": true
           },
           "enable": true
       },
       "enable": true,
       "defaultRouteDomain": 0
   },
   "controls": {
       "archiveTimestamp": "2018-05-02T20:12:06.639Z",
       "class": "Controls",
       "logLevel": "error",
       "trace": false
   },
   "updateMode": "selective"
 }

Again, see Appendix B: Additional Example Declarations for more example declarations.