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
|
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
|
list of several values separated by spaces, it can be expanded as individual
|
||||||
arguments by enclosing the variable with braces and appending the suffix '[*]'
|
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:
|
Example:
|
||||||
|
|
||||||
bind "fd@${FD_APP1}"
|
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"
|
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 (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 */
|
/* unmatched brace */
|
||||||
err |= PARSE_ERR_BRACE;
|
err |= PARSE_ERR_BRACE;
|
||||||
if (errptr)
|
if (errptr)
|
||||||
*errptr = brace;
|
*errptr = brace;
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* brace found, skip it */
|
||||||
in++;
|
in++;
|
||||||
brace = NULL;
|
brace = NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user