For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

cbioley's avatar
cbioley
Icon for Nimbostratus rankNimbostratus
Feb 08, 2021

Associate Port List to virtual server (REST API)

Hello,

 

We would like to take advantage of the BIG-IP `Port List` feature to reduce the number of virtual servers.

 

Unfortunately I couldn’t find a way to associate an existing `Port List` with a virtual server through the REST API.

 

Could someone point me to the right endpoint?

2 Replies

  • I'm not a REST API expert but I did some experimenting by creating a virtual server that uses a port list. The virtual server's definition looks like this when extracted via a REST API call, as follows (look for the start and end of "IMPORTANT STUFF"):

    curl -sku admin:f5trn4 https://X.X.X.X/mgmt/tm/ltm/virtual/https_vs
     
    {
        "kind":"tm:ltm:virtual:virtualstate",
        "name":"https_vs",
        "fullPath":"https_vs",
        "generation":884,
        "selfLink":"https://localhost/mgmt/tm/ltm/virtual/https_vs?ver=14.1.0",
        "addressStatus":"yes",
        "autoLasthop":"default",
        "cmpEnabled":"yes",
        "connectionLimit":0,
        "creationTime":"2020-12-18T17:30:42Z",
        "destination":":0",
        "enabled":true,
        "gtmScore":0,
        "ipProtocol":"tcp",
        "lastModifiedTime":"2021-02-08T23:31:41Z","mask":"255.255.255.255",
        "mirror":"disabled",
        "mobileAppTunnel":"disabled",
        "nat64":"disabled",
        "pool":"/Common/https_pool",
        "poolReference":{
            "link":"https://localhost/mgmt/tm/ltm/pool/~Common~https_pool?ver=14.1.0"
        },
        "rateLimit":"disabled",
        "rateLimitDstMask":0,
        "rateLimitMode":"object",
        "rateLimitSrcMask":0,
        "serviceDownImmediateAction":"none",
        "source":"0.0.0.0/0",
        "sourceAddressTranslation":{
            "type":"automap"
        },
        "sourcePort":"preserve",
        "synCookieStatus":"not-activated",
     
    ******* START IMPORTANT STUFF *******
        "trafficMatchingCriteria":"/Common/https_vs_VS_TMC_OBJ",
        "trafficMatchingCriteriaReference":{
            "link":"https://localhost/mgmt/tm/ltm/traffic-matching-criteria/~Common~https_vs_VS_TMC_OBJ?ver=14.1.0"
        },
    ******* END IMPORTANT STUFF *******
     
        "translateAddress":"enabled",
        "translatePort":"enabled",
        "vlansDisabled":true,"vsIndex":4,
        "policiesReference":{
            "link":"https://localhost/mgmt/tm/ltm/virtual/~Common~https_vs/policies?ver=14.1.0",
            "isSubcollection":true
        },
        "profilesReference":{
            "link":"https://localhost/mgmt/tm/ltm/virtual/~Common~https_vs/profiles?ver=14.1.0",
            "isSubcollection":true
        }
    }

    The key seems to be the traffic-matching-criteria option on the virtual server's configuration and also the fact that the virtual server's destination setting has no IP address and port is any.

    I checked the reference link on the traffic-matching-criteria and came up with the following:

    curl -sku admin:f5trn4 https://X.X.X.X/mgmt/tm/ltm/traffic-matching-criteria/~Common~https_vs_VS_TMC_OBJ?ver=14.1.0
     
    {
        "kind":"tm:ltm:traffic-matching-criteria:traffic-matching-criteriastate",
        "name":"https_vs_VS_TMC_OBJ",
        "partition":"Common",
        "fullPath":"/Common/https_vs_VS_TMC_OBJ","generation":884,
        "selfLink":"https://localhost/mgmt/tm/ltm/traffic-matching-criteria/~Common~https_vs_VS_TMC_OBJ?ver=14.1.0",
     
    ******* START IMPORTANT STUFF *******
        "destinationAddressInline":"10.10.4.100",
        "destinationPortInline":"0",
        "destinationPortList":"/Common/my_port_list",
        "destinationPortListReference":{
            "link":"https://localhost/mgmt/tm/net/port-list/~Common~my_port_list?ver=14.1.0"},
    ******* END IMPORTANT STUFF *******
        "protocol":"any",
        "routeDomain":"any",
        "sourceAddressInline":"0.0.0.0",
        "sourcePortInline":0
    }

    One last thread to follow, and that's the referenced port list:

    curl -sku admin:f5trn4 https://X.X.X.X/mgmt/tm/net/port-list/~Common~my_port_list?ver=14.1.0
     
    {
        "kind":"tm:net:port-list:port-liststate",
        "name":"my_port_list",
        "partition":"Common","fullPath":"/Common/my_port_list",
        "generation":882,
        "selfLink":"https://localhost/mgmt/tm/net/port-list/~Common~my_port_list?ver=14.1.0",
        "ports":[{
            "name":"443"},{"name":"8443"
        }]
    }

    I hope this helps point you in the right direction.

  • Dear Cathy,

    You know what? For what it's worth, I declare you are a REST expert now :)

    I wasn't expecting the config to be buried so deep and since it was my first day with the product, I reckon `vs_tmc_obj` ring no bell at all (but who am I to judge, right?)

     

    Anyway, thank you very much!