Forum Discussion

Rene_C_'s avatar
Rene_C_
Icon for Nimbostratus rankNimbostratus
Jun 04, 2014

Proc Calls in different partitions

Hi,

 

in our Environment we got our Development and Quality/Staging Environment on one F5 BigIP, but on different partitions.

 

As we rely on iRules for our SSO-integration this leads to a strange problem when using proc calls.

 

Lets say i got a Library - iRule called UTILS. This Library of proc-functions may be different for Development and Quality Environment, since we want to stage development for iRules too over the environments. So i got /Dev/UTILS and /Qual/UTILS

 

Now i have 2 virtuals, one in each environment, with one iRule assigned where i just call a single proc of the library: call UTILS::log_test

 

When used without a partition, according to documentation, the call statement should look into the current partition for the Rule Namespace.

 

When opening the Dev-Virtual in the browser, i see my log-statement from Dev-Library in LTM-Log -> so far fine. When opening the Qual-Virtual, i see my log-statement from Dev-Library in LTM-Log -> not ok

 

It seems completely undeterministic on which Library actually gets called, sometimes it's the first one that was initiated, sometimes it just works correctly, and sometimes it seems like round-robin.

 

Any idea what i could do to get the desired behaviour?

 

Please note that i cant just call the Library with the partition included, since we got around 30 iRules, and if one integration is tested we want to just copy it over to the next stage, without the need to change every single call for the library. I know it would work with using something like eval "call $partition/UTILS::log_test", though adding evals for each single library call is a bit cumbersome and produces much boilerplate code, especially when cascading library calls.

 

Thanks for your help, Rene

 

5 Replies

  • It seems completely undeterministic on which Library actually gets called, sometimes it's the first one that was initiated, sometimes it just works correctly, and sometimes it seems like round-robin.

     

    mine is always wrong (i.e. rule2 calls proc of rule1). i think you may open a support case to verify if it is expected behavior or bug.

     

    • Rene_C_'s avatar
      Rene_C_
      Icon for Nimbostratus rankNimbostratus
      Thanks for the time to test; Its a different story if one library version is in /Common - Partition, since this is more or less a default for calls without partition. Though its still undeterministic. I guess i will open a support case then and post the results here once we got a solutions. Cheers, Rene
  • It seems completely undeterministic on which Library actually gets called, sometimes it's the first one that was initiated, sometimes it just works correctly, and sometimes it seems like round-robin.

     

    mine is always wrong (i.e. rule2 calls proc of rule1). i think you may open a support case to verify if it is expected behavior or bug.

     

    • Rene_C_'s avatar
      Rene_C_
      Icon for Nimbostratus rankNimbostratus
      Thanks for the time to test; Its a different story if one library version is in /Common - Partition, since this is more or less a default for calls without partition. Though its still undeterministic. I guess i will open a support case then and post the results here once we got a solutions. Cheers, Rene
  • this is my testing.

     version
    
    root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) show sys version|grep -A 6 Package
    Main Package
      Product  BIG-IP
      Version  11.5.1
      Build    0.0.110
      Edition  Final
      Date     Wed Mar 12 15:44:53 PDT 2014
    
     config
    
    root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm virtual /p1/v1
    ltm virtual /p1/v1 {
        destination /p1/172.28.24.201:80
        ip-protocol tcp
        mask 255.255.255.255
        partition p1
        profiles {
            http { }
            tcp { }
        }
        rules {
            /p1/r1
        }
        source 0.0.0.0/0
        vs-index 42
    }
    root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm rule /p1/r1
    ltm rule /p1/r1 {
        partition p1
        proc pcure {} {
      log local0. "p1"
    }
    when HTTP_REQUEST {
      call pcure
      HTTP::respond 200
    }
    }
    root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm virtual /p2/v2
    ltm virtual /p2/v2 {
        destination /p2/172.28.24.202:80
        ip-protocol tcp
        mask 255.255.255.255
        partition p2
        profiles {
            http { }
            tcp { }
        }
        rules {
            /p2/r2
        }
        source 0.0.0.0/0
        vs-index 43
    }
    root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm rule /p2/r2
    ltm rule /p2/r2 {
        partition p2
        proc pcure {} {
      log local0. "p2"
    }
    when HTTP_REQUEST {
      call pcure
      HTTP::respond 200
    }
    }
    
     test (10 requests to /p1/v1 and another 10 requests to /p2/v2)
    
    [root@ve11a:Active:In Sync] config  tail -f /var/log/ltm
    Jun  4 03:00:14 ve11a info tmm[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm1[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm1[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm1[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm1[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:14 ve11a info tmm1[9801]: Rule /p1/r1 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm1[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm1[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm1[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm1[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm[9801]: Rule /p2/r2 HTTP_REQUEST: p1
    Jun  4 03:00:17 ve11a info tmm1[9801]: Rule /p2/r2 HTTP_REQUEST: p1