[comment]: # ({73d3f62e-73d3f62e})
# 3 Macro utente con contesto

[comment]: # ({/73d3f62e-73d3f62e})

[comment]: # ({d01ca156-4232eb11})
#### Panoramica

È possibile utilizzare un contesto opzionale nelle [macro
utente](/manual/config/macros/user_macros), che consente di sovrascrivere il
valore predefinito con uno specifico per il contesto.

Il contesto viene aggiunto al nome della macro; la sintassi dipende dal fatto che
il contesto sia un valore di testo statico:

    {$MACRO:"testo statico"}

oppure un'espressione regolare:

    {$MACRO:regex:"espressione regolare"} 

Si noti che una macro con contesto basato su espressione regolare può essere definita solo nella
configurazione delle macro utente. Se il prefisso `regex:` viene utilizzato altrove come
contesto della macro utente, ad esempio in un'espressione di trigger, verrà trattato come
contesto statico.

Le virgolette nel contesto sono facoltative (vedere anche le [note
importanti](#important-notes)).

Esempi di contesto macro:

|Example|Description|
|-------|-----------|
|`{$LOW_SPACE_LIMIT}`|Macro utente senza contesto.|
|`{$LOW_SPACE_LIMIT:/tmp}`|Macro utente con contesto (stringa statica).|
|`{$LOW_SPACE_LIMIT:regex:"^/tmp$"}`|Macro utente con contesto (espressione regolare). Equivale a `{$LOW_SPACE_LIMIT:/tmp}`.|
|`{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"}`|Macro utente con contesto (espressione regolare). Corrisponde a tutte le stringhe con prefisso /var/log/.|

[comment]: # ({/d01ca156-4232eb11})

[comment]: # ({2a65d6fe-d403a5a0})
#### Casi d'uso

Le macro utente con contesto possono essere definite per ottenere soglie più flessibili
nelle espressioni dei trigger (in base ai valori recuperati dal
low-level discovery). Ad esempio, è possibile definire le seguenti macro:

-   {$LOW\_SPACE\_LIMIT} = 10
-   {$LOW\_SPACE\_LIMIT:/home} = 20
-   {$LOW\_SPACE\_LIMIT:regex:"\^/\[a-z\]+$"} = 30

Quindi una macro di low-level discovery può essere utilizzata come contesto macro in un
prototipo di trigger per il rilevamento dei file system montati:

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

Dopo il rilevamento, nei
trigger verranno applicate soglie di spazio libero differenti a seconda dei punti di mount o dei tipi di file system rilevati.
Gli eventi di problema verranno generati se:

-   la cartella /home ha meno del 20% di spazio libero su disco
-   le cartelle che corrispondono al pattern regexp (come /etc, /tmp o /var) hanno
    meno del 30% di spazio libero su disco
-   le cartelle che non corrispondono al pattern regexp e non sono /home hanno
    meno del 10% di spazio libero su disco

[comment]: # ({/2a65d6fe-d403a5a0})

[comment]: # ({4d28ca51-4d28ca51})
#### Note importanti

-   Se esiste più di una macro utente con contesto, Zabbix proverà prima a
    far corrispondere le macro con contesto semplice e poi le macro con
    contesto basato su espressioni regolari in un ordine non definito.

::: notewarning
Non creare macro di contesto diverse che corrispondano alla
stessa stringa, per evitare un comportamento non definito.
:::

-   Se una macro con il relativo contesto non viene trovata su host, nei template
    collegati o a livello globale, allora viene cercata la macro senza contesto.
-   Nel contesto sono supportate solo le macro di low-level discovery. Qualsiasi
    altra macro viene ignorata e trattata come testo normale.

Tecnicamente, il contesto della macro viene specificato usando regole simili ai parametri della [chiave item](/manual/config/items/item/key), tranne per il fatto che il contesto della macro non viene analizzato come più parametri se è presente un carattere `,`:

-   Il contesto della macro deve essere racchiuso tra virgolette `"` se il contesto contiene un
    carattere `}` o inizia con un carattere `"`. Le virgolette all'interno di un
    contesto tra virgolette devono essere precedute dal carattere di escape `\`.
-   Il carattere `\` stesso non viene sottoposto a escape, il che significa che è impossibile avere un
    contesto tra virgolette che termini con il carattere `\` - la macro
    {$MACRO:"a:\\b\\c\\"} non è valida.
-   Gli spazi iniziali nel contesto vengono ignorati, quelli finali no:
    -   Ad esempio {$MACRO:A} è uguale a {$MACRO: A}, ma non a
        {$MACRO:A }.
-   Tutti gli spazi prima delle virgolette iniziali e dopo quelle finali vengono
    ignorati, ma tutti gli spazi all'interno delle virgolette no:
    -   Le macro {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } e {$MACRO:
        "A" } sono uguali, ma le macro {$MACRO:"A"} e {$MACRO:" A "}
        non lo sono.

Le seguenti macro sono tutte equivalenti, perché hanno lo stesso
contesto: {$MACRO:A}, {$MACRO: A} e {$MACRO:"A"}. Questo è in contrasto
con le chiavi item, dove 'key\[a\]', 'key\[ a\]' e 'key\["a"\]' hanno lo
stesso significato semantico, ma sono diverse ai fini dell'univocità.

[comment]: # ({/4d28ca51-4d28ca51})
