Áú»¢¶Ä²©

#3 Macros de usuario con contexto

Visi¨®n general

Se puede usar un contexto opcional en usuario macros, lo que permite anular el valor predeterminado con uno espec¨ªfico del contexto.

El contexto se agrega al nombre de la macro; la sintaxis depende de si el contexto es un valor de texto est¨¢tico:

{$MACRO:"texto est¨¢tico"}

o una expresi¨®n regular:

{$MACRO:regex:"expresi¨®n regular"}

Tenga en cuenta que una macro con contexto de expresi¨®n regular solo se puede definir en configuraci¨®n de macros de usuario. Si el prefijo regex: se usa en otro lugar como contexto de macro de usuario, como en una expresi¨®n de activaci¨®n, se tratar¨¢ como contexto est¨¢tico.

Las citas contextuales son opcionales (ver tambi¨¦n important notas).

Ejemplos de macro contexto:

Ejemplo ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
{$LOW_SPACE_LIMIT} Macro de usuario sin contexto.
{$LOW_SPACE_LIMIT:/tmp} Macro de usuario con contexto (cadena est¨¢tica).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Macro de usuario con contexto (expresi¨®n regular). Igual que {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Macro de usuario con contexto (expresi¨®n regular). Coincide con todas las cadenas con el prefijo /var/log/.

Casos de uso

Se pueden definir macros de usuario con contexto para lograr umbrales m¨¢s flexibles en expresiones de activaci¨®n (seg¨²n los valores recuperados por la detecci¨®n de bajo nivel). Por ejemplo, puede definir las siguientes macros:

  • {$LOW_SPACE_LIMIT} = 10
  • {$LOW_SPACE_LIMIT:/home} = 20
  • {$LOW_SPACE_LIMIT:regex:"^/[a-z]+$"} = 30

Luego, se puede utilizar una macro de detecci¨®n de bajo nivel como contexto de macro en un prototipo de iniciador para la detecci¨®n de sistemas de archivos montados:

last(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}

Despu¨¦s de la detecci¨®n, se aplicar¨¢n diferentes umbrales de espacio reducido en los iniciadores seg¨²n los puntos de montaje o los tipos de sistemas de archivos detectados. Se generar¨¢n eventos problem¨¢ticos si:

  • La carpeta /home tiene menos del 20 % de espacio libre en disco
  • Las carpetas que coinciden con el patr¨®n de expresiones regulares (como /etc, /tmp o /var) tienen menos del 30 % de espacio libre en disco
  • Las carpetas que no coinciden con el patr¨®n de expresiones regulares y no son /home tienen menos del 10 % de espacio libre en disco

Notas importantes

  • Si existe m¨¢s de una macro de usuario con contexto, Áú»¢¶Ä²© intentar¨¢ haga coincidir las macros de contexto simples primero y luego las macros de contexto con expresiones regulares en un orden indefinido.

::: nota de advertencia No cree macros de contexto diferentes que coincidan con el misma cadena para evitar un comportamiento indefinido. :::

  • Si una macro con su contexto no se encuentra en el host, las plantillas vinculadas o globalmente, entonces se busca la macro sin contexto.
  • Solo se admiten macros de descubrimiento de bajo nivel en el contexto. Ning¨²n otras macros se ignoran y se tratan como texto sin formato.

T¨¦cnicamente, el contexto macro se especifica usando reglas similares a item key par¨¢metros, excepto que el contexto macro es no se analiza como varios par¨¢metros si hay un car¨¢cter ,:

  • El macro contexto debe citarse con " si el contexto contiene un } o comienza con un car¨¢cter ". Comillas dentro de comillas El contexto debe escaparse con el car¨¢cter \.
  • El car¨¢cter \ en s¨ª mismo no se escapa, lo que significa que es imposible tener un contexto citado que termine con el car¨¢cter \ - la macro {$MACRO:"a:\b\c\"} no es v¨¢lido.
  • Los espacios iniciales en contexto se ignoran, los espacios finales se no:
    • Por ejemplo, {$MACRO:A} es lo mismo que {$MACRO:A}, pero no {$MACRO:A}.
  • Todos los espacios antes de las comillas iniciales y despu¨¦s de las comillas finales son ignorado, pero todos los espacios dentro de las comillas no son:
    • Macros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } y {$MACRO: "A" } son iguales, pero las macros {$MACRO:"A"} y {$MACRO:" A "} no son.

Las siguientes macros son todas equivalentes, porque tienen el mismo contexto: {$MACRO:A}, {$MACRO: A} y {$MACRO:"A"}. esto es en contraste con claves de elemento, donde 'clave[a]', 'clave[ a]' y 'clave["a"]' son las mismo sem¨¢nticamente, pero diferente para prop¨®sitos de unicidad.