Create and Deploy an Application Using a Service-Template from the Service Catalog

Overview

This document describes how to create and deploy a new application on a BIG-IP using a service-template and the BIG-IQ 6.0.1 API. An application is a collection of config objects in the BIG-IP which can be created and managed by BIG-IQ. Service-templates for approved applications can be added to the Service Catalog by your engineering organization responsible for determining which applications to use and the best practices for each application. Your application can conform to the approved practices of your organization by using the service-template and the BIG-IQ API to create and deploy application updates. This can also help make it easier to automate application management on the BIG-IP.

NOTE: If you need to create an AWS SSG with per-app licensed VEs, then you should use the AWS specific default template or a clone of that template. That is, you should use the Default-AWS-f5-HTTPS-WAF-lb-template and Default-AWS-f5-HTTPS-offload-lb-template instead of using the Default-f5-HTTPS-WAF-lb-template and Default-f5-HTTPS-offload-lb-template.

Prerequisites

  • The BIG-IQ is operational, has completed setup and has all system-level configuration in place.
  • All BIG-IPs are operational and have the services provisioned that will be managed by the BIG-IQ.
  • Trust has been established between the BIG-IP and the BIG-IQ, and the current configuration of the BIG-IP has been discovered and imported on the BIG-IQ.
  • Your engineering or operations team have added an applicable service-template to the BIG-IQ Service Catalog.
  • There is an existing Service Scaling Group (SSG), or a single BIG-IP on which to deploy the application.
  • The network engineer has setup RBAC to provide the application owner with the role resources required to create and destroy applications, use service templates, and deploy to the SSG. BIG-IQ creates associated RBAC configuration as part of the application creation process.
  • When performing the tasks in this example, review the listed IP addresses and change them as appropriate for your environment. For example, if you are not running the script directly on the BIG-IQ system, you should change localhost to be the IP address of the BIG-IQ.

Required Information

In addition to meeting the prerequisites, the application owner will need to provide the following information for the application. When you use a service-template from the Service Catalog to create and deploy a new application, you must also provide all the information required by the application which has not already been specified in the service-template by your engineering or operations teams. To create a new application you may also need to provide specific information required for the application to work, for example the node IP addresses and ports. Although you can use the BIG-IQ to deploy new applications based upon the Service Catalog, if you prefer you can reference the service-template to deploy your application with a common configuration. The BIG-IQ provides an API that enables you to automate the creation of the application.

  • A service template for the application.
  • The application’s name and a description.
  • Input values for variables in the template which define the application.
  • A SSG or a single BIG-IP where the application can be deployed.

Actions

Using the BIG-IQ API, the application owner can perform the following actions to collect information and create the application.

  • Retrieve a specific Service-Template
  • Retrieve a specific Service Scaling Group (SSG)

or

  • Retrieve a specific BIG-IP
  • Create and deploy an application using apply-template task
  • List the create and deploy task status
  • List Applications

Retrieve a Specific Service-Template

After you have determined the correct service-template is available in the Service Catalog, you can retrieve the template-state by sending a GET request to the collection and filtering by its name. Note that the published property for the template must be true to create an application from it.

GET https://{ip_address}/mgmt/cm/global/templates?$filter=name eq 'myTemplate'

Alternatively, you can retrieve the template-state by sending a GET request to the resource identified by it’s id.

GET https://{ip_address}/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88

If you want to view all service templates you can list the entire collection and choose which template to use.

GET https://{ip_address}/mgmt/cm/global/templates

The JSON returned in the response of a successful request is shown below

{
    "selfLink": "https://localhost/mgmt/cm/global/templates",
    "totalItems": 1,
    "items": [
        {
            "generation": 14,
            "id": "923a0063-665a-3c90-b52b-66b4b920ea88",
            "kind": "cm:global:templates:templatestate",
            "lastUpdateMicros": 1506035448465574,
            "name": "myTemplate",
            "resources": {
                "virtual_resource_1": {
                    "prompt": "Add object of type: ltm virtual",
                    "prototypeReference": {
                        "id": "69d71e6f-a382-374f-b215-0d2d4b2ce1eb",
                        "name": "myTemplate_v",
                        "kind": "cm:adc-core:template-config:ltm:virtual:adcvirtualstate",
                        "partition": "Common",
                        "description": "",
                        "link": "https://localhost/mgmt/cm/adc-core/template-config/ltm/virtual/69d71e6f-a382-374f-b215-0d2d4b2ce1eb"
                    },
                    "parameters": {
                        "name": {},
                        "destinationAddress": {},
                        "mask": {},
                        "destinationPort": {}
                    },
                    "shadowPrototypeReferences": [
                        {
                            "link": "https://localhost/mgmt/cm/asm/template-config/virtual-servers/fd3aa20b-91d0-3b50-a5ff-c13b6e0ec77d"
                        },
                        {
                            "link": "https://localhost/mgmt/cm/firewall/template-config/firewalls/a71249da-4ebc-3c3b-ad96-4b9595cbe955"
                        }
                    ],
                    "subcollectionResources": {
                        "virtual_profile_tcp_resource_2": {
                            "prompt": "Attach a profile with context: all",
                            "prototypeReference": {
                                "link": "https://localhost/mgmt/cm/adc-core/template-config/ltm/virtual/69d71e6f-a382-374f-b215-0d2d4b2ce1eb/profiles/febe580f-b151-3c8d-95a0-43ce8df2147c"
                            },
                            "parameters": {},
                            "allowMultiple": true
                        }
                    },
                    "allowMultiple": true
                },
                "pool_resource_1": {
                    "prompt": "Add object of type: ltm pool",
                    "prototypeReference": {
                        "id": "a920a4e5-9f06-3342-97cc-402a15321087",
                        "name": "myTemplate_p",
                        "kind": "cm:adc-core:template-config:ltm:pool:adcpoolstate",
                        "partition": "Common",
                        "description": "",
                        "link": "https://localhost/mgmt/cm/adc-core/template-config/ltm/pool/a920a4e5-9f06-3342-97cc-402a15321087"
                    },
                    "parameters": {
                        "name": {}
                    },
                    "subcollectionResources": {
                        "node_resource_1": {
                            "prompt": "Add object of type: ltm pool members",
                            "prototypeReference": {
                                "link": "https://localhost/mgmt/cm/adc-core/template-config/ltm/pool/a920a4e5-9f06-3342-97cc-402a15321087/members/78d1456c-bae4-3d10-a8c8-16dbb58afd47"
                            },
                            "parameters": {
                                "port": {},
                                "nodeReference": {}
                            },
                            "allowMultiple": true
                        }
                    },
                    "allowMultiple": false
                },
                "node_resource_1": {
                    "prompt": "Add a node",
                    "prototypeReference": {
                        "link": "https://localhost/mgmt/cm/adc-core/template-config/ltm/node/f0be52a6-2c3a-313f-8fec-22b241227cf8"
                    },
                    "parameters": {
                        "name": {},
                        "address": {}
                    },
                    "allowMultiple": true
                }
            },
            "isDefault": false,
            "addressSharing": false,
            "selfLink": "https://localhost/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88",
            "userScripts": [
                {
                    "type": "PostCreation",
                    "userScriptReference": {
                        "link": "https://localhost/mgmt/shared/user-scripts/8eaa2fb3-7a36-4450-a331-0b564095b90c"
                    },
                    "scriptParameters": []
                },
                {
                    "type": "PostUpdate",
                    "userScriptReference": {
                        "link": "https://localhost/mgmt/shared/user-scripts/2dbf7a17-fdae-48cc-9391-ab04d28d9c47"
                    },
                    "scriptParameters": []
                },
                {
                    "type": "PostDelete",
                    "userScriptReference": {
                        "link": "https://localhost/mgmt/shared/user-scripts/1b852977-2ad0-4b72-9596-82901708475b"
                    },
                    "scriptParameters": []
                }
            ]
        }
    ],
    "generation": 2,
    "kind": "cm:global:templates:templatecollectionstate",
    "lastUpdateMicros": 1506035448474989
}

The JSON returned in the response of a successful request contains only those fields of the template which have been approved for you to use. Each template shows which resources can be created in your application, for each resource you can see the list of parameters you need to provide specifically for your application. In this example to create the virtual server resource, you must provide name, destinationAddress, mask, destinationPort. The rest of the virtual server fields are pre-defined in the service template and cannot be modified during application creation. In the case of a virtual server, those values are defined in prototype template-config https://localhost/mgmt/cm/adc-core/template-config/ltm/virtual/69d71e6f-a382-374f-b215-0d2d4b2ce1eb. Once we found the service template and retrieve it, we will need to take the selfLink of the template state and set it as the templateReference in the apply-task, discussed below.

Retrieve a Specific Service Scaling Group (SSG)

After selecting a sevice-template, select a target for your application, which can be an SSG or a single BIG-IP. In this section, we will list all the existing SSG and get the link for each.

If you know the name of you SSG you can filter the collection

GET https://{ip_address}/mgmt/cm/cloud/service-scaling-groups?$filter=name eq 'mySSG'

Alternatively, you can retrieve the SSG by sending a GET request to the resource identified by its id.

GET https://{ip_address}/mgmt/cm/cloud/service-scaling-groups/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac

If you want to view all of the SSG in the BIG-IQ you can retrieve the entire collection and choose which SSG to use.

GET https://{ip_address}/mgmt/cm/cloud/service-scaling-groups

The JSON returned in the response of a successful request is shown below

{
    "items": [
        {
            "activeEvents": [],
            "activityLogCollectionReference": {
                "link": "https://localhost/mgmt/cm/cloud/service-scaling-groups/601e8cae-aeff-3558-8a1e-ca59ceedee78/activity-log",
                "isSubcollection": true
            },
            "dataProtectionReference": {
                "link": "https://localhost/mgmt/cm/asm/working-config/data-protection/63eafb48-9846-3e3c-9bd5-89bb614eca4a"
            },
            "dataSyncReference": {
                "link": "https://localhost/mgmt/cm/security-shared/working-config/datasync/fb2435dd-dc2f-38fb-a03d-e592a19eb2ac"
            },
            "desiredSize": 3,
            "devices": [
                {
                    "deviceReference": {
                        "hostname": "kahana-1-vm.f5.com",
                        "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/4cf78f96-1e7f-43cd-b209-b3b5480312bc"
                    },
                    "providerGuestReference": {
                        "link": "https://localhost/mgmt/cm/cloud/vmware/guests/6c5a02b4-5acd-444d-b2f6-6f6795a08ff7"
                    },
                    "status": "READY"
                },
                {
                    "deviceReference": {
                        "hostname": "kahana-2-vm.f5.com",
                        "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/094366d3-122f-4004-a58e-6d769bdc74c9"
                    },
                    "providerGuestReference": {
                        "link": "https://localhost/mgmt/cm/cloud/vmware/guests/cef5740b-077d-4dcd-8806-5012dd5b986c"
                    },
                    "status": "READY"
                },
                {
                    "deviceReference": {
                        "hostname": "kahana-3-vm.f5.com",
                        "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/b861868e-9049-4351-ae69-a98da63d570d"
                    },
                    "providerGuestReference": {
                        "link": "https://localhost/mgmt/cm/cloud/vmware/guests/c3d1b64e-b986-4398-97df-77fe71ef8fbf"
                    },
                    "status": "READY"
                }
            ],
            "environmentReference": {
                "link": "https://localhost/mgmt/cm/cloud/environments/8f67c04e-7792-34a8-b66a-03effc7f68dd"
            },
            "eventLogCollectionReference": {
                "link": "https://localhost/mgmt/cm/cloud/service-scaling-groups/601e8cae-aeff-3558-8a1e-ca59ceedee78/event-log",
                "isSubcollection": true
            },
            "generation": 849,
            "id": "601e8cae-aeff-3558-8a1e-ca59ceedee78",
            "kind": "cm:cloud:service-scaling-groups:servicescalinggroupstate",
            "lastCompletedActivity": {
                "workflowReference": {
                    "link": "https://localhost/mgmt/cm/cloud/tasks/vmware/scaling/15822320-586b-4d96-b92d-9906141c73a3"
                },
                "correlationUuid": "0935e606-aef7-425d-8a6a-a784852d2128",
                "reason": "Scale-out 2 and scale-in 0 device(s) in response to 1 event(s)",
                "keepAliveDateTime": "2018-05-19T20:18:44.060Z",
                "id": "125a956f-585c-4da1-9efd-17bb86af9db9",
                "generation": 1,
                "lastUpdateMicros": 1526761583784211,
                "kind": "cm:cloud:service-scaling-groups:activity-log:scalingactivitystate",
                "selfLink": "https://localhost/mgmt/cm/cloud/service-scaling-groups/601e8cae-aeff-3558-8a1e-ca59ceedee78/activity-log/125a956f-585c-4da1-9efd-17bb86af9db9"
            },
            "lastUpdateMicros": 1526761583790527,
            "loadBalancerDeviceReferences": [
                {
                    "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/27502393-347c-4211-b046-b4146111d82a"
                },
                {
                    "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/c5e3146f-f412-471a-87d2-4b0a7ddcc9e8"
                }
            ],
            "maxSize": 5,
            "maxSupportedApplications": 3,
            "minSize": 1,
            "name": "mySSG",
            "providerType": "VMware",
            "scalingPolicies": [
                {
                    "name": "scale-out",
                    "cooldown": 15,
                    "direction": "ADD",
                    "type": "ChangeCount",
                    "value": 1
                },
                {
                    "name": "scale-in",
                    "cooldown": 15,
                    "direction": "REMOVE",
                    "type": "ChangeCount",
                    "value": 1
                }
            ],
            "selfLink": "https://localhost/mgmt/cm/cloud/service-scaling-groups/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac",
            "status": "READY"
        }
    ],
    "generation": 12,
    "kind": "cm:cloud:service-scaling-groups:servicescalinggroupcollectionstate",
    "lastUpdateMicros": 1526761583794296,
    "selfLink": "https://localhost/mgmt/cm/cloud/service-scaling-groups"
}

Once we found the desired SSG target and retrieve it, we will need to take the selfLink of the SSG and set it as the ssgReference in the apply-task, discussed below.

Retrieve a Specific BIG-IP

In this section we would show how to pick a single BIG-IP and get its link.

If you know the domain name of your BIG-IP you can filter the collection

GET https://{ip_address}/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices?$filter=hostname eq 'bigip01.example.com'

Alternatively, you can retrieve the device by sending a GET request to the resource identified by its id.

GET https://{ip_address}/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac

If you want to view all of the BIG-IP managed by the BIG-IQ you can retrieve the entire collection and choose which device to use.

GET https://{ip_address}/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/

The JSON returned in the response of a successful request is shown below

{
    "selfLink": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices",
    "totalItems": 1,
    "items": [
        {
            "address": "10.144.74.96",
            "build": "0.0.1958",
            "deviceUri": "https://10.144.74.96:443",
            "edition": "Final",
            "generation": 123,
            "groupName": "cm-bigip-allBigIpDevices",
            "hostname": "bigip01.example.com",
            "httpsPort": 443,
            "isClustered": false,
            "isLicenseExpired": false,
            "isVirtual": true,
            "kind": "shared:resolver:device-groups:restdeviceresolverdevicestate",
            "lastUpdateMicros": 1526783239080504,
            "machineId": "7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac",
            "managementAddress": "10.144.74.96",
            "mcpDeviceName": "/Common/bigip96.kahana.f5net.com",
            "product": "BIG-IP",
            "properties": {
                "shared:resolver:device-groups:discoverer": "1f293e7a-d12d-4142-a498-4b53bd4f749e",
                "clusterName": "c1"
            },
            "restFrameworkVersion": "14.0.0-0.0.1958",
            "selfLink": "https://localhost/mgmt/shared/resolver/device-groups/cm-bigip-allBigIpDevices/devices/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac",
            "slots": [
                {
                    "volume": "HD1.1",
                    "product": "BIG-IP",
                    "version": "14.0.0",
                    "build": "0.0.1958",
                    "isActive": true
                },
                {
                    "volume": "HD1.2",
                    "product": "BIG-IP",
                    "version": "14.0.0",
                    "build": "0.0.1847",
                    "isActive": false
                }
            ],
            "state": "ACTIVE"
            "uuid": "7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac",
            "version": "13.1.0"
        }
    ],
    "generation": 5,
    "kind": "shared:resolver:device-groups:devicegroupdevicecollectionstate",
    "lastUpdateMicros": 1526783239146164
}

Once we found the desired BIG-IP target and retrieve it, we will need to take the selfLink of the BIG-IP and set it as the defaultDeviceReference in the apply-task, discussed below.

Create an application

To create a new application from a service-template and deploy it to a BIG-IP or SSG, send a POST request to apply-template. The task modifies the prototypes based on the parameter input you provide and create working-config objects and mark them as part of the newly created application. Those working config are then deployed to the device(s) as a single application by the task.

The following example shows an example of a POST request to create an application named myApp on a single BIG-IP.

POST http://{ip_address}/mgmt/cm/global/tasks/apply-template

{
    "resources": {
        "virtual_resource_1": [
            {
                "parameters": {
                    "name": "myApp_vs1",
                    "destinationAddress": "3.2.2.6",
                    "mask": "255.255.255.255",
                    "destinationPort": "80"
                },
                "subcollectionResources": {
                    "virtual_profile_tcp_resource_2": [
                        {
                            "parameters": {}
                        }
                    ]
                }
            }
        ],
        "pool_resource_1": [
            {
                "parameters": {
                    "name": "myApp_p"
                },
                "subcollectionResources": {
                    "node_resource_1": [
                        {
                            "parameters": {
                                "port": 80,
                                "nodeReference": {
                                    "link": "#/resources/node_resource_1/myApp_5.5.4.4"
                                }
                            }
                        }
                    ]
                }
            }
        ],
        "node_resource_1": [
            {
                "parameters": {
                    "name": "myApp_5.5.4.4",
                    "address": "5.5.4.4"
                }
            }
        ]
    },
    "configSetName": "myApp",
    "deploy:"true",
    "addAnalytics": true,
    "domains": [
        {
            "domainName": "exampleDomain.com"
        }
    ],
    "defaultDeviceReference": {
        "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-adccore-allbigipDevices/devices/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac"
    },
    "templateReference": {
        "link": "https://localhost/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88"
    }
}

You can also create and deploy an application to a Service Scaling Group (SSG) by sending a POST request to apply-template. The following example shows an example of a POST request to instantiate an application named testApp on a Service Scaling Group.

POST http://{ip_address}/mgmt/cm/global/tasks/apply-template

{
    "resources": {
        "virtual_resource_1": [
            {
                "parameters": {
                    "name": "testApp_vs1",
                    "mask": "255.255.255.255",
                    "destinationPort": "80"
                },
                "subcollectionResources": {
                    "virtual_profile_tcp_resource_2": [
                        {
                            "parameters": {}
                        }
                    ]
                }
            }
        ],
        "pool_resource_1": [
            {
                "parameters": {
                    "name": "testApp_p"
                },
                "subcollectionResources": {
                    "node_resource_1": [
                        {
                            "parameters": {
                                "port": 80,
                                "nodeReference": {
                                    "link": "#/resources/node_resource_1/testApp_5.3.4.4"
                                }
                            }
                        }
                    ]
                }
            }
        ],
        "node_resource_1": [
            {
                "parameters": {
                    "name": "testApp_5.3.4.4",
                    "address": "5.3.4.4"
                }
            }
        ]
    },
    "configSetName": "testApp",
    "subPath": "testApp",
    "addAnalytics": false,
    "domains": [],
    "ssgReference": {
        "link": "https://localhost/mgmt//cm/cloud/service-scaling-groups/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac"
    },
    "templateReference": {
        "link": "https://localhost/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88"
    }
}

To create an application, the following properties can be provided.

Name Type Description
configSetName string Name of the application to be created.
partition string Name of the partition where the application will be created. Default is ‘Common’.
subPath string Name of the folder where the application will be created. Optional field, if not provided the configSetName is used.
addAnalytics boolean If true, analytics http profile will be created and associated with the application virtual servers, AVR must be provisioned on the target device.
templateReference object Reference to the template which will be used to create the application.
defaultDeviceReference object Reference to the device where the application will be deployed. You must provide a ssgReference or a defaultDeviceReference in the POST body.
ssgReference object Reference to the Service Scaling Group (SSG) where the application will be deployed. You must provide a ssgReference or a defaultDeviceReference in the POST body.
deploy boolean If true, the application will be deployed to the device or the SSG after it is created. Default is true.
domains string The application default domain name.
mode string The value of mode must be “CREATE” to create an application.
resources object Defines which resources in the template will be created in the application.
awsLoadBalancer object AWS elastic load balancing (ELB) specific configuration.
azureLoadBalancer object Azure elastic load balancing (ALB) specific configuration.

The resources section defines config items that will be created in working-config when the template is instantiated as an application. The resources field has resource names from the template and defines an array of items, each item in the array will create an configuration object in working-config based on the prototype of the resource (defined in the template) and parameters provided in this item which will be overridden when the application is created. Note, that the array can contain more than one item only if the resource allowMultiple flag is set in the template The resources array item can contain the following fields.

Name Type Description
parameters object This field enables you to modify the template object for the application. Each config item includes a parameters field having a value which will be set in the working-config.
parametersToRemove object This fields includes a list of key-value pairs that defines which properties will be removed from the working-config item.
subcollectionResources object This details the subcollection resources to instantiate with the parent resource when the config item has a subcollection. The key is a subcollection resource name. The value is a list of subResources providing details on how to instantiate the subcollection resource.

The subcollectionResources can contain the following fields.

Name Type Description
parameters object This field enables you to modify the template object for the application. Each config item includes a parameters field having a value which will be set in the working-config.
parametersToRemove object This fields includes a list of key-value pairs that defines which properties will be removed from the working-config item.

The parameters object has fields for values which are used to modify the prototype of the resource during application creation. In the example, parameters includes the following fields.

Name Type Description
address string An IP address.
destinationAddress string The destination IP address. If you want to use an IpPool to dynamically allocate the IP address for a virtual server’s destinationAddress, you should provide the IpPool name or IpPool Alias in the template and don’t provide any value in the apply-template request body.
destinationPort number The well-known port number associated with address.
mask string A network mask.
name string A name that identifies this parameter.

The awsLoadBalancer can have properties such as name, description, and listeners. listeners is a list of objects containing ELB listener configuration parameters. The ELB listener configuration parameters can have properties such as loadBalancerPort, loadBalancerProtocol`, instancePort, instanceProtocol, sslCipher, and sslCertificate. The azureLoadBalancer can have properties such as appName and listeners. listeners is a list of objects containing ALB listener configuration parameters. The ALB listener configuration parameters can have properties such as loadBalancerPort and instancePort.

List the create and deploy task status

The body of the response to the POST to apply-template contains a selfLink for the apply-template task. The selfLink will look like this: "http://localhost/mgmt/cm/global/tasks/apply-tempalte/<id>". To check the apply-template task’s status, send a GET request to this selfLink.

GET https://{ip_address}/mgmt/cm/global/tasks/apply-template/<id>

The response can look similar to the following.

{
    "addAnalytics": true,
    "appDeployConfigTaskReference": {
        "link": "https://localhost/mgmt/cm/global/tasks/app-deploy/8a801e28-0f9a-4951-993f-4699c7864616"
    }
    "configSetName": "testApp",
    "configSetReference": {
        "link": "https://localhost/mgmt/cm/global/config-sets/1ff680d5-ea6a-3223-8511-66a9d473f49a"
    },
    "currentStep": "DONE",
    "deploy": true,
    "domains": [],
    "endDateTime": "2018-04-30T21:08:51.463Z",
    "generation": 4,
    "identityReferences": [
        {
            "link": "https://localhost/mgmt/shared/authz/users/admin"
        }
    ],
    "id":"b206b508-e3e2-4a75-8378-7cb5de1eba54",
    "kind": "cm:global:tasks:apply-template:applytemplatetaskstate",
    "lastUpdateMicros": 1525933301719023,
    "mode": "CREATE",
    "ownerMachineId": "0dd198e9-aa1a-4514-bdf2-0d45f1a89700",
    "partition": "Common",
    "protectionMode": "Transparent",
    "resources": {
        "virtual_resource_1": [
            {
                "parameters": {
                    "name": "testApp_vs1",
                    "mask": "255.255.255.255",
                    "destinationPort": "80"
            },
                "subcollectionResources": {
                    "virtual_profile_tcp_resource_2": [
                        {
                             "parameters": {}
                        }
                    ]
                }
            }
        ],
        "pool_resource_1": [
            {
                "parameters": {
                    "name": "testApp_p"
                },
                "subcollectionResources": {
                    "node_resource_1": [
                        {
                            "parameters": {
                                "port": 80,
                                "nodeReference": {
                                     "link": "#/resources/node_resource_1/testApp_5.3.4.4"
                                }
                            }
                        }
                    ]
                }
            }
        ],
        "node_resource_1": [
            {
                "parameters": {
                    "name": "testApp_5.3.4.4",
                    "address": "5.3.4.4"
                }
            }
        ]
    },
    "scriptParameters": {
        "partition": "Common",
        "subPath": "testApp"
    },
    "selfLink": "https://localhost/mgmt/cm/global/tasks/apply-template/b206b508-e3e2-4a75-8378-7cb5de1eba54",
    "ssgReference": {
        "link": "link": "https://localhost/mgmt/cm/cloud/service-scaling-groups/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac"
    },
    "startDateTime": "2018-04-30T21:08:51.463Z",
    "status": "FINISHED",
    "subPath": "testApp",
    "templateReference": {
        "link": "https://localhost/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88"
    },
    "published": true,
    "userReference": {
        "link": "https://localhost/mgmt/shared/authz/users/admin"
    },
    "username": "admin"
}

List all application states

A successful task completion will create a new application’s entry in the config set’s collection of BIG-IQ. To list the applications on BIG-IQ, you can send a GET to the config set collection.

GET https://{ip_address}/mgmt/cm/global/config-sets

The response can look similar to the following, which lists config-sets for testApp and myApp.

{
"items": [
    {
        "alertRuleName": "testApp-health",
        "appDeployConfigTaskReference": {
            "link": "https://localhost/mgmt/cm/global/tasks/app-deploy/8a801e28-0f9a-4951-993f-4699c7864616"
        },
        "configSetName": "testApp",
        "createDateTime": "2018-04-30T21:08:51.463Z",
        "ssgReference": {
            "link": "https://localhost/mgmt/cm/cloud/service-scaling-groups/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac"
        },
        "domains": [],
        "generation": 4,
        "id": "1ff680d5-ea6a-3223-8511-66a9d473f49a",
        "kind": "cm:global:config-sets:configsetstate",
        "lastConfigTime": "2018-04-30T21:08:51.463Z",
        "lastDeploymentTime": "2018-04-30T21:09:00.269Z",
        "lastUpdateMicros": 1525122565109570,
        "partition": "Common",
        "protectionMode": "Not Protected",
        "resources": {
            "virtual_resource_1": [
                {
                    "parameters": {
                        "name": "testApp_vs1",
                        "mask": "255.255.255.255",
                        "destinationPort": "80"
                    },
                    "subcollectionResources": {
                        "virtual_profile_tcp_resource_2": [
                            {
                                "parameters": {}
                            }
                        ]
                    }
                }
            ],
            "pool_resource_1": [
                {
                    "parameters": {
                        "name": "testApp_p"
                    },
                    "subcollectionResources": {
                        "node_resource_1": [
                            {
                                "parameters": {
                                    "port": 80,
                                    "nodeReference": {
                                        "link": "#/resources/node_resource_1/testApp_5.3.4.4"
                                    }
                                }
                            }
                        ]
                    }
                }
            ],
            "node_resource_1": [
                {
                    "parameters": {
                        "name": "testApp_5.3.4.4",
                        "address": "5.3.4.4"
                    }
                }
            ]
        },
        "selfLink": "https://localhost/mgmt/cm/global/config-sets/1ff680d5-ea6a-3223-8511-66a9d473f49a",
        "status": "DONE",
        "subPath": "testApp",
        "templateReference": {
            "link": "https://localhost/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88"
        }
    },
    {
        "alertRuleName": "myApp-health",
        "appDeployConfigTaskReference": {
            "link": "https://localhost/mgmt/cm/global/tasks/app-deploy/2a5def28-fd7c-44e0-ba6e-ced1f572c26d"
        },
        "configSetName": "myApp",
        "createDateTime": "2018-04-30T21:32:00.366Z",
        "deviceReference": {
            "link": "https://localhost/mgmt/shared/resolver/device-groups/cm-adccore-allbigipDevices/devices/7c7fcedb-45e2-4f7d-b2de-5ff2c52053ac"
        },
        "domains": [
            {
                "domainName": "example.com"
            }
        ],
        "generation": 5,
        "id": "cb3282f2-d095-392d-9a31-0207dbdd3d74",
        "kind": "cm:global:config-sets:configsetstate",
        "lastConfigTime": "2018-04-30T21:32:00.366Z",
        "lastDeploymentTime": "2018-04-30T21:32:06.257Z",
        "lastUpdateMicros": 1525123945051276,
        "partition": "Common",
        "protectionMode": "Not Protected",
        "resources": {
            "virtual_resource_1": [
                {
                    "parameters": {
                        "name": "myApp_vs1",
                        "destinationAddress": "3.2.2.6",
                        "mask": "255.255.255.255",
                        "destinationPort": "80"
                    },
                    "subcollectionResources": {
                        "virtual_profile_tcp_resource_2": [
                            {
                                "parameters": {}
                            }
                        ]
                    }
                }
            ],
            "pool_resource_1": [
                {
                    "parameters": {
                        "name": "myApp_p"
                    },
                    "subcollectionResources": {
                        "node_resource_1": [
                            {
                                "parameters": {
                                    "port": 80,
                                    "nodeReference": {
                                        "link": "#/resources/node_resource_1/myApp_5.5.4.4"
                                    }
                                }
                            }
                        ]
                    }
                }
            ],
            "node_resource_1": [
                {
                    "parameters": {
                        "name": "myApp_5.5.4.4",
                        "address": "5.5.4.4"
                    }
                }
            ]
        },
        "selfLink": "https://localhost/mgmt/cm/global/config-sets/cb3282f2-d095-392d-9a31-0207dbdd3d74",
        "status": "DONE",
        "subPath": "myApp",
        "templateReference": {
            "link": "https://localhost/mgmt/cm/global/templates/923a0063-665a-3c90-b52b-66b4b920ea88"
        }
    }
],
"generation": 1,
"kind": "cm:global:config-sets:configsetcollectionstate",
"lastUpdateMicros": 1505867486428397,
"selfLink": "https://localhost/mgmt/cm/global/config-sets"
}

Result

Creates a new application in BIG-IQ and deploys the new application to a SSG or BIG-IP.

By default BIG-IQ configures the following RBAC items as part of the application creation process.

  • A RBAC resource group with the list of application resources.
  • A new manager role for the application which references the applications RBAC resource group.
  • Assign the application owner the manager role for the new application
  • If the application has chosen the option to create a viewer role, it is created but left unassigned until later.