AS3 will not allow changes to the Service_Address class' virtualAddress value
Environment
- Application Services Version: 3.44.0 (also tested on 3.36.0 with BIG-IQ 8.2)
- BIG-IP Version: 8.3.0
Summary
When I deploy an application with a custom virtualAddress, the deployment works fine. If I change the IP address in the Service_Address class under virtualAddress, I receive the following error:
status: 422: /declare failed with status of 422, Failed to send declaration: /declare failed with status of 422, declaration failed The Service Address virtualAddress property cannot be modified. Please delete /CaaS-Clusters_iten/custom-address and recreate it.
If I send in the same declaration with the modified IP address AND also modify the virtual-address name, the configuration is updated properly.
Steps To Reproduce
Steps to reproduce the behavior:
- Submit the following declaration:
{
"$schema": "https://raw.githubusercontent.com/F5Networks/f5-appsvcs-extension/master/schema/latest/as3-schema.json",
"applicationDescription": "github_bug_report",
"applicationName": "my_test_app",
"appSvcsDeclaration": {
"class": "AS3",
"declaration": {
"class": "ADC",
"label": "LAB",
"remark": "Deployment using http",
"target": {
"address": "10.1.1.7"
},
"schemaVersion": "3.36.0",
"id": "93249234923-42349239523",
"my_test_tenant": {
"class": "Tenant",
"my_test_app": {
"class": "Application",
"my_test_pool": {
"class": "Pool",
"monitors": [
"http"
],
"members": [
{
"servicePort": 80,
"serverAddresses": [
"192.168.1.100"
]
}
]
},
"my_test_vs": {
"pool": "my_test_pool",
"class": "Service_HTTP",
"snat": "auto",
"virtualPort": 80,
"redirect80": true,
"profileHTTP": {
"use": "Custom_HTTP_Profile"
},
"profileAnalyticsTcp": {
"bigip": "/Common/tcp-analytics"
},
"virtualAddresses": [
{
"use": "custom-address"
}
],
"persistenceMethods": [
"source-address"
]
},
"custom-address": {
"class": "Service_Address",
"virtualAddress": "10.1.1.100",
"arpEnabled": false,
"icmpEcho": "disable",
"routeAdvertisement": "selective"
},
"Custom_HTTP_Profile": {
"class": "HTTP_Profile",
"remark": "An HTTP Profile",
"insertHeader": {
"name": "X-Forwarded-IP",
"value": "[expr {[IP::client_addr] }]"
}
}
}
}
}
}
}
- Observe the following successful response:
{
"id": "198ca36b-b2b4-453e-b31f-808237e0e523",
"kind": "cm:global:tasks:deploy-to-application:deploycomponentapptoglobalapptaskstate",
"status": "FINISHED",
"selfLink": "https://localhost/mgmt/cm/global/tasks/deploy-to-application/198ca36b-b2b4-453e-b31f-808237e0e523",
"username": "admin",
"generation": 9,
"currentStep": "DONE",
"endDateTime": "2024-02-06T13:59:40.758-0800",
"startDateTime": "2024-02-06T13:59:17.757-0800",
"userReference": {
"link": "https://localhost/mgmt/shared/authz/users/admin"
},
"ownerMachineId": "e8b6a888-24e4-426c-8088-542f69f6f78d",
"applicationName": "my_test_app",
"lastUpdateMicros": 1707256780808599,
"appSvcsDeclaration": {
"generation": 0,
"declaration": {
"id": "93249234923-42349239523",
"class": "ADC",
"label": "LAB",
"remark": "Deployment using http",
"target": {
"address": "10.1.1.7"
},
"schemaVersion": "3.36.0",
"my_test_tenant": {
"class": "Tenant",
"my_test_app": {
"class": "Application",
"my_test_vs": {
"pool": "my_test_pool",
"snat": "auto",
"class": "Service_HTTP",
"redirect80": true,
"profileHTTP": {
"use": "Custom_HTTP_Profile"
},
"virtualPort": 80,
"virtualAddresses": [
{
"use": "custom-address"
}
],
"persistenceMethods": [
"source-address"
],
"profileAnalyticsTcp": {
"bigip": "/Common/tcp-analytics"
}
},
"my_test_pool": {
"class": "Pool",
"members": [
{
"servicePort": 80,
"serverAddresses": [
"192.168.1.100"
]
}
],
"monitors": [
"http"
]
},
"custom-address": {
"class": "Service_Address",
"icmpEcho": "disable",
"arpEnabled": false,
"virtualAddress": "10.1.1.100",
"routeAdvertisement": "selective"
},
"Custom_HTTP_Profile": {
"class": "HTTP_Profile",
"remark": "An HTTP Profile",
"insertHeader": {
"name": "X-Forwarded-IP",
"value": "[expr {[IP::client_addr] }]"
}
}
}
}
},
"lastUpdateMicros": 0
},
"identityReferences": [
{
"link": "https://localhost/mgmt/shared/authz/users/admin"
}
],
"applicationDescription": "github_bug_report",
"requiredNewApplication": false
}
- Now, change the virtualAddress value and re-submit.
{
"$schema": "https://raw.githubusercontent.com/F5Networks/f5-appsvcs-extension/master/schema/latest/as3-schema.json",
"applicationDescription": "github_bug_report",
"applicationName": "my_test_app",
"appSvcsDeclaration": {
"class": "AS3",
"declaration": {
"class": "ADC",
"label": "LAB",
"remark": "Deployment using http",
"target": {
"address": "10.1.1.7"
},
"schemaVersion": "3.36.0",
"id": "93249234923-42349239523",
"my_test_tenant": {
"class": "Tenant",
"my_test_app": {
"class": "Application",
"my_test_pool": {
"class": "Pool",
"monitors": [
"http"
],
"members": [
{
"servicePort": 80,
"serverAddresses": [
"192.168.1.100"
]
}
]
},
"my_test_vs": {
"pool": "my_test_pool",
"class": "Service_HTTP",
"snat": "auto",
"virtualPort": 80,
"redirect80": true,
"profileHTTP": {
"use": "Custom_HTTP_Profile"
},
"profileAnalyticsTcp": {
"bigip": "/Common/tcp-analytics"
},
"virtualAddresses": [
{
"use": "custom-address"
}
],
"persistenceMethods": [
"source-address"
]
},
"custom-address": {
"class": "Service_Address",
"virtualAddress": "10.1.1.101",
"arpEnabled": false,
"icmpEcho": "disable",
"routeAdvertisement": "selective"
},
"Custom_HTTP_Profile": {
"class": "HTTP_Profile",
"remark": "An HTTP Profile",
"insertHeader": {
"name": "X-Forwarded-IP",
"value": "[expr {[IP::client_addr] }]"
}
}
}
}
}
}
}
- Observe the following error response:
{
"id": "678f2140-874c-428b-8323-ab89efbec84d",
"kind": "cm:global:tasks:deploy-to-application:deploycomponentapptoglobalapptaskstate",
"status": "FAILED",
"selfLink": "https://localhost/mgmt/cm/global/tasks/deploy-to-application/678f2140-874c-428b-8323-ab89efbec84d",
"username": "admin",
"generation": 3,
"currentStep": "GET_APP_SVCS",
"endDateTime": "2024-02-06T14:02:00.315-0800",
"errorMessage": "status: 422: /declare failed with status of 422, Failed to send declaration: /declare failed with status of 422, declaration failed The Service Address virtualAddress property cannot be modified. Please delete /my_test_tenant/custom-address and recreate it. ",
"startDateTime": "2024-02-06T14:01:41.226-0800",
"userReference": {
"link": "https://localhost/mgmt/shared/authz/users/admin"
},
"ownerMachineId": "e8b6a888-24e4-426c-8088-542f69f6f78d",
"applicationName": "my_test_app",
"lastUpdateMicros": 1707256920365591,
"appSvcsDeclaration": {
"generation": 0,
"declaration": {
"id": "93249234923-42349239523",
"class": "ADC",
"label": "LAB",
"remark": "Deployment using http",
"target": {
"address": "10.1.1.7"
},
"schemaVersion": "3.36.0",
"my_test_tenant": {
"class": "Tenant",
"my_test_app": {
"class": "Application",
"my_test_vs": {
"pool": "my_test_pool",
"snat": "auto",
"class": "Service_HTTP",
"redirect80": true,
"profileHTTP": {
"use": "Custom_HTTP_Profile"
},
"virtualPort": 80,
"virtualAddresses": [
{
"use": "custom-address"
}
],
"persistenceMethods": [
"source-address"
],
"profileAnalyticsTcp": {
"bigip": "/Common/tcp-analytics"
}
},
"my_test_pool": {
"class": "Pool",
"members": [
{
"servicePort": 80,
"serverAddresses": [
"192.168.1.100"
]
}
],
"monitors": [
"http"
]
},
"custom-address": {
"class": "Service_Address",
"icmpEcho": "disable",
"arpEnabled": false,
"virtualAddress": "10.1.1.101",
"routeAdvertisement": "selective"
},
"Custom_HTTP_Profile": {
"class": "HTTP_Profile",
"remark": "An HTTP Profile",
"insertHeader": {
"name": "X-Forwarded-IP",
"value": "[expr {[IP::client_addr] }]"
}
}
}
}
},
"lastUpdateMicros": 0
},
"identityReferences": [
{
"link": "https://localhost/mgmt/shared/authz/users/admin"
}
],
"applicationDescription": "github_bug_report",
"requiredNewApplication": false
}
Expected Behavior
AS3 should realize that, in order to fulfill this request, the virtual server needs to be deleted, the virtual address needs to be deleted, and then both objects added back. The workaround is to either change the Service_Address class' name (for example, custom-address-new) or delete the application and re-deploy.
Actual Behavior
The error above is received and no updates are made to the configuration.
Please reach out to us at [email protected] in order for us to prioritize. Thanks.