ltm rule command matchclassΒΆ

iRule(1)		      BIG-IP TMSH Manual		      iRule(1)



matchclass
       Performs comparison against the contents of data group.

SYNOPSIS
       matchclass CLASS_OR_VALUE KEYWORDS VALUE_OR_CLASS

DESCRIPTION
       Performs comparisons against the contents of data group. Typically used
       for conditional logic control.

       Note: matchclass has been deprecated in v10 in favor of the new class
       commands. The class command offers better functionality and performance
       than matchclass.

       Note that you should not use a $:: or :: prefix on the datagroup name
       when using the matchclass command (or in any datagroup reference on
       9.4.4 or later).

       In v9.4.4 - 10, using $::datagroup_name will work but demote the
       virtual server from running on all TMMs. For details, see the CMP
       compatibility page.

       In v11, using $::datagroup_name will result in a TCL runtime error and
       reset being sent to the client!

       Syntax

       matchclass   

	    * Compares each member of a data group with the specified value.
	      Returns index of match if found, 0 if no match is found.

       matchclass   

	    * Compares the specified value with each member of a data group.
	      Returns index of match if found, 0 if no match is found.

	  How the match is performed depends on the operator you use with the
	  matchclass command. Consider the following...
	  For the equals operator, either form of the command will produce
	  the same results. Both of the following examples will perform a full
	  string comparison and return the index of the first data group item
	  that is exactly "green":

	[matchclass my_data_group equals "green"]
	[matchclass "green" equals my_data_group]

	  However, when using a partial comparison operator, such as
	  contains, starts_with or ends_with, the order of
	  comparison does matter. This example will return the index of the first
	  row that has the string "green" anywhere in it:

	[matchclass my_data_group contains "green"]

	  And this example will will return the index of the first row containing
	  any of contiguous characters in the string "green" (g, r, e, n, gr, re,
	  ee, en, gre, ree, een, gree, reen, and green will all match):

	[matchclass "green" contains my_data_group]

	  Note: For v10 users: Classes (data groups) used to be accessible as a
	  global TCL list. Starting in v10, accessing a data group as a global
	  variable ($::class_name) simply returns the name of the data group and
	  is no longer a TCL list. You should now use the "class" command for all
	  data group access as matchclass/findclass have been deprecated in v10.

	  Note: The terms Data Group List and Class are synonymous when referring
	  to matchclass. Data Group Lists are hashed tcl lists containing data
	  for comparison with live traffic conditions. They may be created in the
	  admin web interface under Local Traffic/iRules/Data Group Lists. See
	  Examples below.

	  Note: The value of the matched item is NOT returned by matchclass. If
	  you need to return a value for a specific match, the findclass command
	  might be what you need. (Link below)

RETURN VALUE
VALID DURING
       ANY_EVENT

EXAMPLES
	To redirect any request whose URI starts with any of the listed strings
	defined in the redirectURIs data group (class), first define the class
	   (Local Traffic >> iRules >> Data Groups). This is how the object
	definition appears in the bigip.conf file:

	class redirectURIs {
	  /my/application/directory
	  /another/appdir
	  /yet/another
	}

	Now create a rule which references the class:

	when HTTP_REQUEST {
	  if { [matchclass [HTTP::uri] starts_with redirectURIs] } {
	     HTTP::redirect "http://www.domain.com/unavailable.html"
	 }
	}

	To send AOL-sourced connections to a specific pool. (Note: Use the
	   "equals" operator for address comparison with matchclass):

	when CLIENT_ACCEPTED {
	  if { [matchclass [IP::remote_addr] equals aol] } {
	     pool aol_pool
	  } else {
	     pool all_pool
	 }
	}

	Use matchclass with the TCL "lindex" command to extract the value of
	the matched item. (Matchclass index starts at 1, while lindex uses a 0
	based index, thus the expr {$var - 1} adjustment):
	As noted above, use the class get command instead of matchclass
	and lindex for this example!

	when HTTP_REQUEST {
	  set idx [matchclass [HTTP::uri] contains color]
	  if { -1 != $idx } {
	    set val [lindex $::color [expr {$idx - 1}]]
	    log local0. "Found match index = $idx; value = $val"
	  } else {
	    log local0. "Didn't find a match"
	  }
	}

	As matchclass doesn't support wildcards, you can use a foreach loop to
	go through the class, element by element. Use string compare as it
	supports glob style (wildcard) matching:

	when RULE_INIT {
	   # Create a test class (actually a list in this case).  This could also be defined as a class/datagroup.
	set ::test_class [list abcd abcde abcdef* abcdefg*]

	   # Loop through the datagroup line by line.
	foreach element $::test_class {

	      # Log the current line.
	      log local0. "Current \$element: $element"

	      # Compare the element against the string.
	      # If the datagroup entry has a wildcard, it should be listed first in thestring compare statement.
	      if {[string match -nocase $element "ABCDEFG"]}{

		 # Found a match, so log it and break out of the foreach loop.
		 log local0. "Matched \$element: $element.  Exiting loop."
		 break
	      }
	   }
	}

HINTS
SEE ALSO
CHANGE LOG
       @BIGIP-9.0.0 --First introduced the command.



BIG-IP				  2017-01-31			      iRule(1)