# Construtor de if / switch / class para iRules

> Descreva uma decisão como regras e receba-a escrita como uma cadeia if / elseif, um switch e um class match com seus data groups em tmsh, e veja qual pool cada forma escolhe para um valor de teste. Mostra onde o primeiro casamento e o casamento mais longo divergem. Local, sem rede.

- Tool: https://ronutz.com/pt-BR/tools/f5-irules-conditional-builder
- Family: Redes

---

## O que faz

Descreva uma decisão como regras em ordem ("caminhos que começam com /api vão para api_pool, /login vai para login_pool, o resto para web_pool") e a ferramenta a escreve de três jeitos:

- uma cadeia `if` / `elseif`,
- um `switch` (com `-glob` quando alguma regra precisa e `--` antes do valor),
- uma consulta `class match` a data groups, com as definições dos data groups em `tmsh`.

Em seguida, um valor de teste passa por cada regra gerada no interpretador didático, e a página mostra qual pool cada forma escolheu.

## Por que as formas podem discordar

`if` e `switch` pegam a **primeira** regra que casa, na ordem escrita. `class match` com `starts_with` ou `ends_with` devolve a entrada **mais longa** que casar, seja qual for a ordem (a referência de `class` da F5 diz isso). Com as regras `/api` e `/api/v2`, o valor de teste `/api/v2/users` vai para `api_pool` por `if` e `switch`, mas para `api_v2_pool` por `class match`. A ferramenta também sinaliza uma regra que nunca pode disparar porque uma regra anterior sempre casa antes.

## Vale saber

- Passar o valor para minúsculas (`string tolower`) torna a comparação indiferente à caixa, mas então um valor de regra com maiúsculas nunca casa; a ferramenta avisa sobre isso.
- `class match` não tem comparação glob, então uma regra glob impede a forma com data group.
- Um valor de regra com uma chave sem par é escrito com uma barra invertida na frente (`\{`). O Tcl conta as chaves dentro de um corpo entre chaves mesmo entre aspas duplas (regra 5 da página de sintaxe do Tcl 8.4), então uma chave sozinha quebraria a regra; o Tcl 8.4.6 real para com `missing close-brace`.
- Para `HTTP::path`, o valor de teste é cortado no primeiro ponto de interrogação: `HTTP::path` não inclui a query string (referência de `HTTP::path` da F5), então as regras comparam só a parte anterior a ele.
- Nomes de registro com caracteres além de letras, dígitos e `_ . / : -` são escritos entre aspas duplas nas definições em `tmsh`. Essas aspas não foram testadas num BIG-IP: depois de criar o data group, liste-o no `tmsh` e confira os registros.
- O código gerado segue o iRules Style Guide do DevCentral (indentação de 4 espaços, prioridade no evento, expressões entre chaves, nomes de variáveis entre chaves, `--` em `switch` e `class`) e passa no verificador de estilo deste site sem nenhum apontamento.

## Fontes

- [Referência de iRules da F5: class](https://clouddocs.f5.com/api/irules/class.html) (lido em 2026-10-02)
- [Referência de iRules da F5: Operators](https://clouddocs.f5.com/api/irules/Operators.html) (lido em 2026-10-02)
- [Manual do Tcl 8.4: switch](https://www.tcl-lang.org/man/tcl8.4/TclCmd/switch.htm) (lido em 2026-10-03)
- [F5 K15650046: Tcl code injection security exposure](https://my.f5.com/manage/s/article/K15650046) (lido em 2026-10-03)
- [F5 DevCentral: iRules Style Guide](https://community.f5.com/t/irules-style-guide/71151) (lido em 2026-10-03)
- [Referência de iRules da F5: priority](https://clouddocs.f5.com/api/irules/priority.html) (lido em 2026-10-03)
- [Referência de iRules da F5: HTTP::path](https://clouddocs.f5.com/api/irules/HTTP__path.html) (lido em 2026-10-03)
- [Manual do Tcl 8.4: Tcl (as regras de substituição)](https://www.tcl-lang.org/man/tcl8.4/TclCmd/Tcl.htm) (lido em 2026-10-03)

## Standards and references

- [F5 iRules reference: class](https://clouddocs.f5.com/api/irules/class.html) - class match and class search operators and options; starts_with and ends_with return the longest matching entry
- [F5 iRules reference: Operators](https://clouddocs.f5.com/api/irules/Operators.html) - the Tcl operators by precedence and the operators F5 adds: contains, ends_with, equals, matches_glob, matches_regex, starts_with, and, not, or
- [Tcl 8.4 manual: switch](https://www.tcl-lang.org/man/tcl8.4/TclCmd/switch.htm) - the -exact, -glob, -regexp and -- options, fall-through bodies, default, and comments only inside bodies
- [F5 K15650046: Tcl code injection security exposure](https://my.f5.com/manage/s/article/K15650046) - always brace expressions; always put -- before the switch string; the bad option error a value starting with - produces
- [F5 DevCentral: iRules Style Guide (JRahm with Jim_Deucker, 2022-12-22)](https://community.f5.com/t/irules-style-guide/71151) - the editor settings and the numbered rules R1 to R20 the checker reads an iRule against
- [F5 iRules reference: priority](https://clouddocs.f5.com/api/irules/priority.html) - event priority runs from 0 to 1000, defaults to 500, and lower numbers run first
- [F5 K6091: The version of Tcl used to develop iRules](https://my.f5.com/manage/s/article/K6091) - the iRules command set was developed from Tcl base version 8.4.6, which is used in all BIG-IP versions; the engine models that version
- [F5 iRules reference: HTTP::path](https://clouddocs.f5.com/api/irules/HTTP__path.html) - HTTP::path returns the path part of the request and does not include the query string
- [Tcl 8.4 manual: Tcl (the substitution rules)](https://www.tcl-lang.org/man/tcl8.4/TclCmd/Tcl.htm) - quotes allow substitution, braces prevent it, brackets run a command, and each character is processed exactly once; inside braces, braces nest and a brace quoted with a backslash is not counted, even between double quotes

## Related reading

- [iRules: como escolher entre if, switch, class match e arrays static](https://ronutz.com/pt-BR/learn/irules-branching-and-lookups.md): Quando um iRule precisa comparar um valor com muitos e agir, há quatro ferramentas comuns: if encadeado, switch, um data group com class match, e um array static:: indexado diretamente. A F5 de fato ordenou essas opções por velocidade. Aqui está essa ordem, e as duas perguntas que decidem qual usar.
- [O iRules Style Guide do DevCentral, regra por regra, com os motivos](https://ronutz.com/pt-BR/learn/irules-style-guide-explained.md): O DevCentral da F5 publicou em 2022 um iRules Style Guide: configurações de editor e vinte regras numeradas. Algumas são questão de gosto, mas várias evitam falhas reais: um iRule que não carrega, um switch que um atacante consegue manipular, uma expressão que roda dados da requisição como código, uma tempestade de log. Veja as regras agrupadas pelo que protegem, com o motivo de cada uma, o que os comentários do guia corrigiram e o que mudou desde que ele foi escrito.
