mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-21 19:01:00 +01:00
MINOR: server: Make 'default-server' support 'disabled' keyword.
Before this patch, only 'server' directives could support 'disabled' setting.
This patch makes also 'default-server' directives support this setting.
It is used to disable a list of servers declared after a 'defaut-server' directive.
'enabled' new keyword has been added, both supported as 'default-server' and
'server' setting, to enable again a list of servers (so, declared after a
'default-server enabled' directive) or to explicitly enable a specific server declared
after a 'default-server disabled' directive.
For instance provided this configuration:
default-server disabled
server srv1...
server srv2...
server srv3... enabled
server srv4... enabled
srv1 and srv2 are disabled and srv3 and srv4 enabled.
This is equivalent to this configuration:
default-server disabled
server srv1...
server srv2...
default-server enabled
server srv3...
server srv4...
even if it would have been preferable/shorter to declare:
server srv3...
server srv4...
default-server disabled
server srv1...
server srv2...
as 'enabled' is the default server state.
This commit is contained in:
parent
6e5e0d8f9e
commit
2a0d061a60
39
src/server.c
39
src/server.c
@ -305,6 +305,28 @@ static int srv_parse_cookie(char **args, int *cur_arg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Parse the "disabled" server keyword */
|
||||
static int srv_parse_disabled(char **args, int *cur_arg,
|
||||
struct proxy *curproxy, struct server *newsrv, char **err)
|
||||
{
|
||||
newsrv->admin |= SRV_ADMF_CMAINT | SRV_ADMF_FMAINT;
|
||||
newsrv->state = SRV_ST_STOPPED;
|
||||
newsrv->check.state |= CHK_ST_PAUSED;
|
||||
newsrv->check.health = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Parse the "enabled" server keyword */
|
||||
static int srv_parse_enabled(char **args, int *cur_arg,
|
||||
struct proxy *curproxy, struct server *newsrv, char **err)
|
||||
{
|
||||
newsrv->admin &= ~SRV_ADMF_CMAINT & ~SRV_ADMF_FMAINT;
|
||||
newsrv->state = SRV_ST_RUNNING;
|
||||
newsrv->check.state &= ~CHK_ST_PAUSED;
|
||||
newsrv->check.health = newsrv->check.rise;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* parse the "id" server keyword */
|
||||
static int srv_parse_id(char **args, int *cur_arg, struct proxy *curproxy, struct server *newsrv, char **err)
|
||||
{
|
||||
@ -1323,6 +1345,8 @@ static struct srv_kw_list srv_kws = { "ALL", { }, {
|
||||
{ "check", srv_parse_check, 0, 1 }, /* enable health checks */
|
||||
{ "check-send-proxy", srv_parse_check_send_proxy, 0, 1 }, /* enable PROXY protocol for health checks */
|
||||
{ "cookie", srv_parse_cookie, 1, 1 }, /* Assign a cookie to the server */
|
||||
{ "disabled", srv_parse_disabled, 0, 1 }, /* Start the server in 'disabled' state */
|
||||
{ "enabled", srv_parse_enabled, 0, 1 }, /* Start the server in 'enabled' state */
|
||||
{ "id", srv_parse_id, 1, 0 }, /* set id# of server */
|
||||
{ "namespace", srv_parse_namespace, 1, 1 }, /* Namespace the server socket belongs to (if supported) */
|
||||
{ "no-backup", srv_parse_no_backup, 0, 1 }, /* Flag as non-backup server */
|
||||
@ -1755,6 +1779,13 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
newsrv->check.rise = curproxy->defsrv.check.rise;
|
||||
newsrv->check.fall = curproxy->defsrv.check.fall;
|
||||
newsrv->check.health = newsrv->check.rise; /* up, but will fall down at first failure */
|
||||
/* Here we check if 'disabled' is the default server state */
|
||||
if (curproxy->defsrv.admin & (SRV_ADMF_CMAINT | SRV_ADMF_FMAINT)) {
|
||||
newsrv->admin |= SRV_ADMF_CMAINT | SRV_ADMF_FMAINT;
|
||||
newsrv->state = SRV_ST_STOPPED;
|
||||
newsrv->check.state |= CHK_ST_PAUSED;
|
||||
newsrv->check.health = 0;
|
||||
}
|
||||
newsrv->check.server = newsrv;
|
||||
newsrv->check.tcpcheck_rules = &curproxy->tcpcheck_rules;
|
||||
|
||||
@ -2096,14 +2127,6 @@ int parse_server(const char *file, int linenum, char **args, struct proxy *curpr
|
||||
newsrv->slowstart = (val + 999) / 1000;
|
||||
cur_arg += 2;
|
||||
}
|
||||
else if (!defsrv && !strcmp(args[cur_arg], "disabled")) {
|
||||
newsrv->admin |= SRV_ADMF_CMAINT;
|
||||
newsrv->admin |= SRV_ADMF_FMAINT;
|
||||
newsrv->state = SRV_ST_STOPPED;
|
||||
newsrv->check.state |= CHK_ST_PAUSED;
|
||||
newsrv->check.health = 0;
|
||||
cur_arg += 1;
|
||||
}
|
||||
else if (!strcmp(args[cur_arg], "on-error")) {
|
||||
if (!strcmp(args[cur_arg + 1], "fastinter"))
|
||||
newsrv->onerror = HANA_ONERR_FASTINTER;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user