Expression Language

    Mixer configuration uses an expression language (CEXL) to specify match expressions and mapping expressions. CEXL expressions map a set of typed and constants to a typed value.

    Syntax

    CEXL accepts a subset of Go expressions, which defines the syntax. CEXL implements a subset of the Go operators that constrains the set of accepted Go expressions. CEXL also supports arbitrary parenthesization.

    Type checking

    CEXL variables are attributes from the typed attribute vocabulary, constants are implicitly typed and, functions are explicitly typed.

    Mixer validates a CEXL expression and resolves it to a type during configuration validation. Selectors must resolve to a boolean value and mapping expressions must resolve to the type they are mapping into. Configuration validation fails if a selector fails to resolve to a boolean or if a mapping expression resolves to an incorrect type.

    If an expression uses an attribute that is not available during request processing, the expression evaluation fails. Use the | operator to provide a default value if an attribute may be missing.

    For example, the expression request.auth.principal == "user1" fails evaluation if the request.auth.principal attribute is missing. The | (OR) operator addresses the problem: (request.auth.principal | "nobody" ) == "user1".

    Examples

    ExpressionReturn TypeDescription
    request.size | 200intrequest.size if available, otherwise 200.
    request.headers[“x-forwarded-host”] == “myhost”boolean
    (request.headers[“x-user-group”] == “admin”) || (request.auth.principal == “admin”)booleanTrue if the user is admin or in the admin group.
    (request.auth.principal | “nobody” ) == “user1”booleanTrue if request.auth.principal is “user1”, The expression will not error out if request.auth.principal is missing.
    source.labels[“app”]==”reviews” && source.labels[“version”]==”v3”booleanTrue if app label is reviews and version label is v3, false otherwise.