F5Networks / f5-appsvcs-extension

F5 BIG-IP Application Services 3 Extension
Apache License 2.0
163 stars 52 forks source link

All pool member statuses reset to unknown when new member is added to the pool #758

Closed m-kratochvil closed 4 months ago

m-kratochvil commented 9 months ago

Environment

Summary

I have a pool with some pool members. The pool has a monitor assigned. Each pool member also has its own monitor assigned (using specific targetPort). When I add new pool member to this pool, again with its own monitor, nothing else is changed, all the existing pool members have their operational status reset to "unknown". This should not happen, as there was no change to the existing pool members in the declaration.

Steps To Reproduce

  1. Submit the following declaration to configure the baseline:

    {
    "action": "deploy",
    "class": "AS3",
    "persist": false,
    "declaration": {
      "test_tenant": {
        "class": "Tenant",
        "test_loadbalancer": {
          "template": "generic",
          "class": "Application",
          "test_monitor_poolbased": {
            "monitorType": "tcp-half-open",
            "interval": 5,
            "timeout": 16,
            "class": "Monitor"
          },
          "test_monitor_member1": {
            "monitorType": "tcp-half-open",
            "interval": 5,
            "timeout": 16,
            "targetAddress": "10.180.0.1",
            "targetPort": 8000,
            "class": "Monitor"
          },
          "test_monitor_member2": {
            "monitorType": "tcp-half-open",
            "interval": 5,
            "timeout": 16,
            "targetAddress": "10.180.0.2",
            "targetPort": 8000,
            "class": "Monitor"
          },
          "test_pool": {
            "loadBalancingMode": "round-robin",
            "members": [
              {
                "enable": true,
                "servicePort": 443,
                "serverAddresses": [
                  "10.180.0.1"
                ],
                "adminState": "enable",
                "ratio": 1,
                "monitors": [
                  {
                    "use": "test_monitor_member1"
                  }
                ]
              },
              {
                "enable": true,
                "servicePort": 443,
                "serverAddresses": [
                  "10.180.0.2"
                ],
                "adminState": "enable",
                "ratio": 1,
                "monitors": [
                  {
                    "use": "test_monitor_member2"
                  }
                ]
              }
            ],
            "monitors": [
              {
                "use": "test_monitor_poolbased"
              }
            ],
            "class": "Pool"
          }
        }
      },
      "schemaVersion": "3.36.0",
      "updateMode": "selective",
      "id": "urn:uuid:0241c3de-b3f5-43ee-9906-a3a62a982316",
      "class": "ADC"
    }
    }
  2. Submit the following declaration to add a pool member to the pool:

    {
    "action": "deploy",
    "class": "AS3",
    "persist": false,
    "declaration": {
    "test_tenant": {
      "class": "Tenant",
      "test_loadbalancer": {
        "template": "generic",
        "class": "Application",
        "test_monitor_poolbased": {
          "monitorType": "tcp-half-open",
          "interval": 5,
          "timeout": 16,
          "class": "Monitor"
        },
        "test_monitor_member1": {
          "monitorType": "tcp-half-open",
          "interval": 5,
          "timeout": 16,
          "targetAddress": "10.180.0.1",
          "targetPort": 8000,
          "class": "Monitor"
        },
        "test_monitor_member2": {
          "monitorType": "tcp-half-open",
          "interval": 5,
          "timeout": 16,
          "targetAddress": "10.180.0.2",
          "targetPort": 8000,
          "class": "Monitor"
        },
        "test_monitor_member3": {
          "monitorType": "tcp-half-open",
          "interval": 5,
          "timeout": 16,
          "targetAddress": "10.180.0.3",
          "targetPort": 8000,
          "class": "Monitor"
        },
        "test_pool": {
          "loadBalancingMode": "round-robin",
          "members": [
            {
              "enable": true,
              "servicePort": 443,
              "serverAddresses": [
                "10.180.0.1"
              ],
              "adminState": "enable",
              "ratio": 1,
              "monitors": [
                {
                  "use": "test_monitor_member1"
                }
              ]
            },
            {
              "enable": true,
              "servicePort": 443,
              "serverAddresses": [
                "10.180.0.2"
              ],
              "adminState": "enable",
              "ratio": 1,
              "monitors": [
                {
                  "use": "test_monitor_member2"
                }
              ]
            },
            {
              "enable": true,
              "servicePort": 443,
              "serverAddresses": [
                "10.180.0.3"
              ],
              "adminState": "enable",
              "ratio": 1,
              "monitors": [
                {
                  "use": "test_monitor_member3"
                }
              ]
            }
          ],
          "monitors": [
            {
              "use": "test_monitor_poolbased"
            }
          ],
          "class": "Pool"
        }
      }
    },
    "schemaVersion": "3.36.0",
    "updateMode": "selective",
    "id": "urn:uuid:0241c3de-b3f5-43ee-9906-a3a62a982316",
    "class": "ADC"
    }
    }
  3. Observe the operational status of the pool members on the Big-IP.

Expected Behavior

Since the declaration should be idempotent, there should be no changes done to the existing pool members and therefore their operational status should remain the same (whatever it was before the new pool member was added).

Actual Behavior

All the existing, untouched pool members are reset to operational status "Unknown" and start receiving traffic.

sunitharonan commented 9 months ago

Thank you for reaching out. In order to prioritize and understand the issue better, please reach out to us at automation_toolchain_pm@f5.com

m-kratochvil commented 9 months ago

@sunitharonan done. Just sent out an email.

sunitharonan commented 4 months ago

This has been fixed in AS3 3.49