mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-27 23:22:09 +00:00
MINOR: config: support default values for environment variables
Sometimes it is really useful to be able to specify a default value for an optional environment variable, like the ${name-value} construct in shell. In fact we're really missing this for a number of settings in reg tests, starting with timeouts. This commit simply adds support for the common syntax above. Other common forms like '+' to replace existing variables, or ':-' and ':+' to act on empty variables, were not implemented at this stage, as they are less commonly needed.
This commit is contained in:
parent
002e2068cc
commit
ec347b1239
@ -727,13 +727,16 @@ shell. Variable names can contain alphanumerical characters or the character
|
||||
underscore ("_") but should not start with a digit. If the variable contains a
|
||||
list of several values separated by spaces, it can be expanded as individual
|
||||
arguments by enclosing the variable with braces and appending the suffix '[*]'
|
||||
before the closing brace.
|
||||
before the closing brace. It is also possible to specify a default value to
|
||||
use when the variable is not set, by appending that value after a dash '-'
|
||||
next to the variable name. Note that the default value only replaces non
|
||||
existing variables, not empty ones.
|
||||
|
||||
Example:
|
||||
|
||||
bind "fd@${FD_APP1}"
|
||||
|
||||
log "${LOCAL_SYSLOG}:514" local0 notice # send to local server
|
||||
log "${LOCAL_SYSLOG-127.0.0.1}:514" local0 notice # send to local server
|
||||
|
||||
user "$HAPROXY_USER"
|
||||
|
||||
|
16
src/tools.c
16
src/tools.c
@ -5440,13 +5440,27 @@ uint32_t parse_line(char *in, char *out, size_t *outlen, char **args, int *nbarg
|
||||
}
|
||||
|
||||
if (brace) {
|
||||
if (*in != '}') {
|
||||
if (*in == '-') {
|
||||
/* default value starts just after the '-' */
|
||||
if (!value)
|
||||
value = in + 1;
|
||||
|
||||
while (*in && *in != '}')
|
||||
in++;
|
||||
if (!*in)
|
||||
goto no_brace;
|
||||
*in = 0; // terminate the default value
|
||||
}
|
||||
else if (*in != '}') {
|
||||
no_brace:
|
||||
/* unmatched brace */
|
||||
err |= PARSE_ERR_BRACE;
|
||||
if (errptr)
|
||||
*errptr = brace;
|
||||
goto leave;
|
||||
}
|
||||
|
||||
/* brace found, skip it */
|
||||
in++;
|
||||
brace = NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user