f5-appsvcs-extension icon indicating copy to clipboard operation
f5-appsvcs-extension copied to clipboard

Rollback error when declaration failed because port 0 pool member and TCP monitor

Open stanislaspiron opened this issue 3 years ago • 1 comments
trafficstars

Environment

  • Application Services Version: 3.34
  • BIG-IP Version: 15.1.4.1

Summary

When a pool member is created with a TCP port and changed to port 0, AS3 obviously respond with 422. But when an existing pool is changed from port X to port 0 (Any), the rollback process failed to recreate the pool member with previous configuration

Steps To Reproduce

Steps to reproduce the behavior:

  1. Submit the following declaration:
{
    "Check_member_port_0": {
        "myApp": {
            "class": "Application",
            "enable": true,
            "MyMonitor": {
                "class": "Monitor",
                "interval": 20,
                "monitorType": "tcp",
                "receive": "none",
                "send": "none",
                "timeout": 61
            },
            "MyPool": {
                "class": "Pool",
                "loadBalancingMode": "least-connections-member",
                "members": [
                    {
                        "addressDiscovery": "static",
                        "enable": true,
                        "priorityGroup": 0,
                        "serverAddresses": [
                            "2.3.4.5"
                        ],
                        "servicePort": 80,
                        "shareNodes": true
                    }
                ],
                "minimumMonitors": "all",
                "monitors": [
                    {
                        "use": "MyMonitor"
                    }
                ],
                "serviceDownAction": "none"
            }
        },
        "class": "Tenant",
        "defaultRouteDomain": 0,
        "enable": true
    },
    "class": "ADC",
    "schemaVersion": "3.26.0",
    "id": "autogen_11607319-c00f-4796-890c-49d53715654d",
    "updateMode": "selective",
    "controls": {
        "class": "Controls",
        "userAgent": "vscode-f5/3.5.0",
        "archiveTimestamp": "2022-03-11T08:45:21.703Z"
    }
}
  1. Observe the following success response:
        {
            "code": 200,
            "message": "success",
            "lineCount": 20,
            "host": "localhost",
            "tenant": "Check_member_port_0",
            "runTime": 5261
        }
  1. check the pool members in tmsh.
# list ltm pool /Check_member_port_0/myApp/MyPool 
ltm pool /Check_member_port_0/myApp/MyPool {
    load-balancing-mode least-connections-member
    members {
        2.3.4.5:http {
            address 2.3.4.5
            session monitor-enabled
            state down
            metadata {
                source {
                    value declaration
                }
            }
        }
    }
    min-active-members 1
    monitor /Check_member_port_0/myApp/MyMonitor
    partition Check_member_port_0
}
  1. Update the declaration by changing the pool member serviceport to 0.
{
    "Check_member_port_0": {
        "myApp": {
            "class": "Application",
            "enable": true,
            "MyMonitor": {
                "class": "Monitor",
                "interval": 20,
                "monitorType": "tcp",
                "receive": "none",
                "send": "none",
                "timeout": 61
            },
            "MyPool": {
                "class": "Pool",
                "loadBalancingMode": "least-connections-member",
                "members": [
                    {
                        "addressDiscovery": "static",
                        "enable": true,
                        "priorityGroup": 0,
                        "serverAddresses": [
                            "2.3.4.5"
                        ],
                        "servicePort": 0,
                        "shareNodes": true
                    }
                ],
                "minimumMonitors": "all",
                "monitors": [
                    {
                        "use": "MyMonitor"
                    }
                ],
                "serviceDownAction": "none"
            }
        },
        "class": "Tenant",
        "defaultRouteDomain": 0,
        "enable": true
    },
    "class": "ADC",
    "schemaVersion": "3.26.0",
    "id": "autogen_11607319-c00f-4796-890c-49d53715654d",
    "updateMode": "selective",
    "controls": {
        "class": "Controls",
        "userAgent": "vscode-f5/3.5.0",
        "archiveTimestamp": "2022-03-11T08:45:21.703Z"
    }
}
  1. Observe the following error response:
        {
            "code": 422,
            "message": "declaration failed",
            "response": "01070622:3: The monitor /Check_member_port_0/myApp/MyMonitor has a wildcard destination service and cannot be associated with a node that has a zero service.",
            "host": "localhost",
            "tenant": "Check_member_port_0",
            "runTime": 5058
        }
  1. check the pool members in tmsh.
# list ltm pool /Check_member_port_0/myApp/MyPool
ltm pool /Check_member_port_0/myApp/MyPool {
    load-balancing-mode least-connections-member
    min-active-members 1
    monitor /Check_member_port_0/myApp/MyMonitor
    partition Check_member_port_0
}

Expected Behavior

The configuration of previous successful declaration must be restored. the pool member must still be with initial servicePort.

Actual Behavior

The pool member disappeared in the pool.

stanislaspiron avatar Mar 11 '22 08:03 stanislaspiron

Thank you for your feedback. I have added this issue to our internal product backlog as AUTOTOOL-3055.

dstokesf5 avatar Mar 30 '22 17:03 dstokesf5

Please reach out to us at [email protected] in order for us to prioritize. Thanks.

sunitharonan avatar Nov 07 '22 19:11 sunitharonan

This has been resolved in the 3.42.0 release of AS3.

sunitharonan avatar Jan 13 '23 18:01 sunitharonan