Forum Discussion

Chris_Phillips's avatar
Icon for Nimbostratus rankNimbostratus
Feb 23, 2012

single vs multi element classes in irules






I wrote a bit of code on 10.2.0 which looped through a class and used scan to extract three variables:




foreach limit_element [class get ${static::limit_prefix}_dgl] {


scan $limit_element {%[^ ] %d/%d} limit_uri conn_limit conn_timeout








etc. With a class with ONE element, this chokes, as the $limit_element value is only the value itself, e.g. "200/1", not the attribute name as well. With MORE elements in the list, it works great, and $limit_element is "/login 200/1" . Similarly this looks to be reflected in bigip.conf contents, as extra brackets exist etc.:




class http_request_limit_dgl {




"/login" { "200/1" }


"/sample_uri" { "5/10" }








class t1_http_request_limit_dglxx {


"/login" { "200/1" }






Can anyone comment on this?


4 Replies

  • If you need to loop through the datagroup to perform an operation with the key or value, you can use a class loop:

        Save a class name to search through
       set class_name t1_http_request_limit_dglxx2
        Save a search ID for the datagroup
       set id [class startsearch $class_name]
        Loop through the class row by row
       while {[class anymore $class_name $id]}{
    set element [class nextelement $class_name $id]
    log local0. "\[class nextelement $class_name $id\]: $element"
     Perform some operation against the current datagroup key and/or value
    scan $element {%[^ ] %d/%d} a b c
    log local0. "scanned $element: $a, $b, $c"
        Clean up the search
       class donesearch $class_name $id

    This works for a single line or multiple line data group. I think the reason your original rule isn't working as expected is that the name and value returned using class get against a single line data group is interpreted as a two element TCL list: {name} {value}, whereas a multiple line data group is interpreted as {name1 value1} {name2 value2}.

  • Yes, absolutely. I think the issue I have is how this is at all acceptable..? It's massively inconsistent.



    But you say that method will always present the data in a consistent way, whether it's one or more elements on a class? Worth a go... thanks
  • That does seem a bit buggy. If you are interested in finding out more about you could open a case with Support. If you do, can you reply with the case number so I can follow it?



    The class startsearch option worked as expected though so you should have a workaround.



    Thanks, Aaron
  • Yep, that does work, thanks for that. I'll see if I can something raised, that does seem pretty bizarre to me.