Skip to content
This repository was archived by the owner on Sep 1, 2025. It is now read-only.

Commit 065a985

Browse files
snorwinoktalz
authored andcommitted
MINOR: add new options flag to allow listen parsers
Signed-off-by: Norwin Schnyder norwin.schnyder+github@gmail.com
1 parent b8de5ee commit 065a985

4 files changed

Lines changed: 155 additions & 110 deletions

File tree

options/options.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ import (
2323
)
2424

2525
type Parser struct {
26-
Path string
27-
Reader io.Reader
28-
Logger logger.Format // we always will have p.Options.LogPrefix
29-
UseV2HTTPCheck bool
30-
UseMd5Hash bool
31-
DisableUnProcessed bool
32-
Log bool
33-
LogPrefix string
26+
Path string
27+
Reader io.Reader
28+
Logger logger.Format // we always will have p.Options.LogPrefix
29+
UseV2HTTPCheck bool
30+
UseMd5Hash bool
31+
UseListenSectionParsers bool
32+
DisableUnProcessed bool
33+
Log bool
34+
LogPrefix string
3435
}
3536

3637
type ParserOption interface {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
Copyright 2021 HAProxy Technologies
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package options
18+
19+
type useListenSectionParsers struct{}
20+
21+
func (u useListenSectionParsers) Set(p *Parser) error {
22+
p.UseListenSectionParsers = true
23+
return nil
24+
}
25+
26+
// UseListenSectionParsers sets flag to use listen section parser
27+
var UseListenSectionParsers = useListenSectionParsers{} //nolint:gochecknoglobals

section-parsers.go

Lines changed: 104 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -428,109 +428,111 @@ func (p *configParser) getBackendParser() *Parsers {
428428
func (p *configParser) getListenParser() *Parsers {
429429
parser := map[string]ParserInterface{}
430430
sequence := []Section{}
431-
addParser(parser, &sequence, &parsers.Mode{})
432-
addParser(parser, &sequence, &parsers.HashType{})
433-
addParser(parser, &sequence, &parsers.Balance{})
434-
addParser(parser, &sequence, &parsers.MaxConn{})
435-
addParser(parser, &sequence, &simple.Number{Name: "backlog"})
436-
addParser(parser, &sequence, &parsers.Bind{})
437-
addParser(parser, &sequence, &parsers.ACL{})
438-
addParser(parser, &sequence, &parsers.ForcePersist{})
439-
addParser(parser, &sequence, &parsers.MonitorURI{})
440-
addParser(parser, &sequence, &parsers.MonitorFail{})
441-
addParser(parser, &sequence, &parsers.BindProcess{})
442-
addParser(parser, &sequence, &simple.Word{Name: "log-tag"})
443-
addParser(parser, &sequence, &simple.String{Name: "log-format"})
444-
addParser(parser, &sequence, &simple.String{Name: "log-format-sd"})
445-
addParser(parser, &sequence, &parsers.Log{})
446-
addParser(parser, &sequence, &simple.Option{Name: "httpclose"})
447-
addParser(parser, &sequence, &simple.Option{Name: "forceclose"})
448-
addParser(parser, &sequence, &simple.Option{Name: "http-buffer-request"})
449-
addParser(parser, &sequence, &simple.Option{Name: "http-server-close"})
450-
addParser(parser, &sequence, &simple.Option{Name: "http-keep-alive"})
451-
addParser(parser, &sequence, &simple.Option{Name: "http-pretend-keepalive"})
452-
addParser(parser, &sequence, &simple.Option{Name: "http-use-htx"})
453-
addParser(parser, &sequence, &simple.Option{Name: "http-no-delay"})
454-
addParser(parser, &sequence, &simple.Option{Name: "http-proxy"})
455-
addParser(parser, &sequence, &parsers.OptionForwardFor{})
456-
addParser(parser, &sequence, &simple.Option{Name: "ssl-hello-chk"})
457-
addParser(parser, &sequence, &parsers.OptionSmtpchk{})
458-
addParser(parser, &sequence, &simple.Option{Name: "ldap-check"})
459-
addParser(parser, &sequence, &parsers.OptionMysqlCheck{})
460-
addParser(parser, &sequence, &simple.Option{Name: "abortonclose"})
461-
addParser(parser, &sequence, &parsers.OptionPgsqlCheck{})
462-
addParser(parser, &sequence, &simple.Option{Name: "redis-check"})
463-
addParser(parser, &sequence, &parsers.OptionRedispatch{})
464-
addParser(parser, &sequence, &simple.Option{Name: "external-check"})
465-
addParser(parser, &sequence, &simple.Option{Name: "tcplog"})
466-
addParser(parser, &sequence, &simple.Option{Name: "dontlognull"})
467-
addParser(parser, &sequence, &simple.Option{Name: "contstats"})
468-
addParser(parser, &sequence, &simple.Option{Name: "log-separate-errors"})
469-
addParser(parser, &sequence, &simple.Option{Name: "tcpka"})
470-
addParser(parser, &sequence, &simple.Option{Name: "clitcpka"})
471-
addParser(parser, &sequence, &simple.Option{Name: "splice-auto"})
472-
addParser(parser, &sequence, &simple.Option{Name: "splice-request"})
473-
addParser(parser, &sequence, &simple.Option{Name: "splice-response"})
474-
addParser(parser, &sequence, &simple.Option{Name: "log-health-checks"})
475-
addParser(parser, &sequence, &simple.String{Name: "log-tag"})
476-
addParser(parser, &sequence, &simple.Option{Name: "tcpka"})
477-
addParser(parser, &sequence, &simple.Option{Name: "srvtcpka"})
478-
addParser(parser, &sequence, &simple.Option{Name: "allbackups"})
479-
addParser(parser, &sequence, &simple.Option{Name: "accept-invalid-http-request"})
480-
addParser(parser, &sequence, &simple.Option{Name: "h1-case-adjust-bogus-client"})
481-
addParser(parser, &sequence, &simple.Option{Name: "disable-h2-upgrade"})
482-
addParser(parser, &sequence, &simple.Option{Name: "logasap"})
483-
addParser(parser, &sequence, &parsers.OptionHTTPLog{})
484-
addParser(parser, &sequence, &simple.Option{Name: "accept-invalid-http-response"})
485-
addParser(parser, &sequence, &simple.Option{Name: "h1-case-adjust-bogus-server"})
486-
addParser(parser, &sequence, &simple.Option{Name: "tcp-check"})
487-
addParser(parser, &sequence, &tcp.Checks{})
488-
addParser(parser, &sequence, &parsers.OptionHttpchk{})
489-
if p.Options.UseV2HTTPCheck {
490-
addParser(parser, &sequence, &parsers.HTTPCheckV2{})
491-
} else {
492-
addParser(parser, &sequence, &http.Checks{Mode: "listen"})
431+
if p.Options.UseListenSectionParsers {
432+
addParser(parser, &sequence, &parsers.Mode{})
433+
addParser(parser, &sequence, &parsers.HashType{})
434+
addParser(parser, &sequence, &parsers.Balance{})
435+
addParser(parser, &sequence, &parsers.MaxConn{})
436+
addParser(parser, &sequence, &simple.Number{Name: "backlog"})
437+
addParser(parser, &sequence, &parsers.Bind{})
438+
addParser(parser, &sequence, &parsers.ACL{})
439+
addParser(parser, &sequence, &parsers.ForcePersist{})
440+
addParser(parser, &sequence, &parsers.MonitorURI{})
441+
addParser(parser, &sequence, &parsers.MonitorFail{})
442+
addParser(parser, &sequence, &parsers.BindProcess{})
443+
addParser(parser, &sequence, &simple.Word{Name: "log-tag"})
444+
addParser(parser, &sequence, &simple.String{Name: "log-format"})
445+
addParser(parser, &sequence, &simple.String{Name: "log-format-sd"})
446+
addParser(parser, &sequence, &parsers.Log{})
447+
addParser(parser, &sequence, &simple.Option{Name: "httpclose"})
448+
addParser(parser, &sequence, &simple.Option{Name: "forceclose"})
449+
addParser(parser, &sequence, &simple.Option{Name: "http-buffer-request"})
450+
addParser(parser, &sequence, &simple.Option{Name: "http-server-close"})
451+
addParser(parser, &sequence, &simple.Option{Name: "http-keep-alive"})
452+
addParser(parser, &sequence, &simple.Option{Name: "http-pretend-keepalive"})
453+
addParser(parser, &sequence, &simple.Option{Name: "http-use-htx"})
454+
addParser(parser, &sequence, &simple.Option{Name: "http-no-delay"})
455+
addParser(parser, &sequence, &simple.Option{Name: "http-proxy"})
456+
addParser(parser, &sequence, &parsers.OptionForwardFor{})
457+
addParser(parser, &sequence, &simple.Option{Name: "ssl-hello-chk"})
458+
addParser(parser, &sequence, &parsers.OptionSmtpchk{})
459+
addParser(parser, &sequence, &simple.Option{Name: "ldap-check"})
460+
addParser(parser, &sequence, &parsers.OptionMysqlCheck{})
461+
addParser(parser, &sequence, &simple.Option{Name: "abortonclose"})
462+
addParser(parser, &sequence, &parsers.OptionPgsqlCheck{})
463+
addParser(parser, &sequence, &simple.Option{Name: "redis-check"})
464+
addParser(parser, &sequence, &parsers.OptionRedispatch{})
465+
addParser(parser, &sequence, &simple.Option{Name: "external-check"})
466+
addParser(parser, &sequence, &simple.Option{Name: "tcplog"})
467+
addParser(parser, &sequence, &simple.Option{Name: "dontlognull"})
468+
addParser(parser, &sequence, &simple.Option{Name: "contstats"})
469+
addParser(parser, &sequence, &simple.Option{Name: "log-separate-errors"})
470+
addParser(parser, &sequence, &simple.Option{Name: "tcpka"})
471+
addParser(parser, &sequence, &simple.Option{Name: "clitcpka"})
472+
addParser(parser, &sequence, &simple.Option{Name: "splice-auto"})
473+
addParser(parser, &sequence, &simple.Option{Name: "splice-request"})
474+
addParser(parser, &sequence, &simple.Option{Name: "splice-response"})
475+
addParser(parser, &sequence, &simple.Option{Name: "log-health-checks"})
476+
addParser(parser, &sequence, &simple.String{Name: "log-tag"})
477+
addParser(parser, &sequence, &simple.Option{Name: "tcpka"})
478+
addParser(parser, &sequence, &simple.Option{Name: "srvtcpka"})
479+
addParser(parser, &sequence, &simple.Option{Name: "allbackups"})
480+
addParser(parser, &sequence, &simple.Option{Name: "accept-invalid-http-request"})
481+
addParser(parser, &sequence, &simple.Option{Name: "h1-case-adjust-bogus-client"})
482+
addParser(parser, &sequence, &simple.Option{Name: "disable-h2-upgrade"})
483+
addParser(parser, &sequence, &simple.Option{Name: "logasap"})
484+
addParser(parser, &sequence, &parsers.OptionHTTPLog{})
485+
addParser(parser, &sequence, &simple.Option{Name: "accept-invalid-http-response"})
486+
addParser(parser, &sequence, &simple.Option{Name: "h1-case-adjust-bogus-server"})
487+
addParser(parser, &sequence, &simple.Option{Name: "tcp-check"})
488+
addParser(parser, &sequence, &tcp.Checks{})
489+
addParser(parser, &sequence, &parsers.OptionHttpchk{})
490+
if p.Options.UseV2HTTPCheck {
491+
addParser(parser, &sequence, &parsers.HTTPCheckV2{})
492+
} else {
493+
addParser(parser, &sequence, &http.Checks{Mode: "listen"})
494+
}
495+
addParser(parser, &sequence, &parsers.ExternalCheckPath{})
496+
addParser(parser, &sequence, &parsers.ExternalCheckCommand{})
497+
addParser(parser, &sequence, &simple.Timeout{Name: "http-request"})
498+
addParser(parser, &sequence, &simple.Timeout{Name: "client"})
499+
addParser(parser, &sequence, &simple.Timeout{Name: "client-fin"})
500+
addParser(parser, &sequence, &simple.Timeout{Name: "queue"})
501+
addParser(parser, &sequence, &simple.Timeout{Name: "http-keep-alive"})
502+
addParser(parser, &sequence, &simple.Timeout{Name: "check"})
503+
addParser(parser, &sequence, &simple.Timeout{Name: "tunnel"})
504+
addParser(parser, &sequence, &simple.Timeout{Name: "server"})
505+
addParser(parser, &sequence, &simple.Timeout{Name: "server-fin"})
506+
addParser(parser, &sequence, &simple.Timeout{Name: "connect"})
507+
addParser(parser, &sequence, &parsers.DefaultServer{})
508+
addParser(parser, &sequence, &parsers.Stick{})
509+
addParser(parser, &sequence, &filters.Filters{})
510+
addParser(parser, &sequence, &parsers.CompressionAlgo{})
511+
addParser(parser, &sequence, &parsers.CompressionType{})
512+
addParser(parser, &sequence, &parsers.CompressionOffload{})
513+
addParser(parser, &sequence, &tcp.Requests{})
514+
addParser(parser, &sequence, &stats.Stats{Mode: "listen"})
515+
addParser(parser, &sequence, &parsers.HTTPReuse{})
516+
addParser(parser, &sequence, &http.Requests{Mode: "listen"})
517+
addParser(parser, &sequence, &http.Redirect{})
518+
addParser(parser, &sequence, &parsers.Cookie{})
519+
addParser(parser, &sequence, &simple.Word{Name: "dynamic-cookie-key"})
520+
addParser(parser, &sequence, &parsers.UseServer{})
521+
addParser(parser, &sequence, &parsers.UniqueIDFormat{})
522+
addParser(parser, &sequence, &parsers.UniqueIDHeader{})
523+
addParser(parser, &sequence, &parsers.ErrorFile{})
524+
addParser(parser, &sequence, &parsers.ConfigSnippet{})
525+
addParser(parser, &sequence, &parsers.UseBackend{})
526+
addParser(parser, &sequence, &parsers.DefaultBackend{})
527+
addParser(parser, &sequence, &parsers.StickTable{})
528+
addParser(parser, &sequence, &parsers.ConfigSnippet{})
529+
addParser(parser, &sequence, &parsers.ErrorFile{})
530+
addParser(parser, &sequence, &parsers.Server{})
531+
addParser(parser, &sequence, &simple.Number{Name: "retries"})
532+
addParser(parser, &sequence, &tcp.Responses{})
533+
addParser(parser, &sequence, &http.Responses{Mode: "listen"})
534+
addParser(parser, &sequence, &parsers.DeclareCapture{})
493535
}
494-
addParser(parser, &sequence, &parsers.ExternalCheckPath{})
495-
addParser(parser, &sequence, &parsers.ExternalCheckCommand{})
496-
addParser(parser, &sequence, &simple.Timeout{Name: "http-request"})
497-
addParser(parser, &sequence, &simple.Timeout{Name: "client"})
498-
addParser(parser, &sequence, &simple.Timeout{Name: "client-fin"})
499-
addParser(parser, &sequence, &simple.Timeout{Name: "queue"})
500-
addParser(parser, &sequence, &simple.Timeout{Name: "http-keep-alive"})
501-
addParser(parser, &sequence, &simple.Timeout{Name: "check"})
502-
addParser(parser, &sequence, &simple.Timeout{Name: "tunnel"})
503-
addParser(parser, &sequence, &simple.Timeout{Name: "server"})
504-
addParser(parser, &sequence, &simple.Timeout{Name: "server-fin"})
505-
addParser(parser, &sequence, &simple.Timeout{Name: "connect"})
506-
addParser(parser, &sequence, &parsers.DefaultServer{})
507-
addParser(parser, &sequence, &parsers.Stick{})
508-
addParser(parser, &sequence, &filters.Filters{})
509-
addParser(parser, &sequence, &parsers.CompressionAlgo{})
510-
addParser(parser, &sequence, &parsers.CompressionType{})
511-
addParser(parser, &sequence, &parsers.CompressionOffload{})
512-
addParser(parser, &sequence, &tcp.Requests{})
513-
addParser(parser, &sequence, &stats.Stats{Mode: "listen"})
514-
addParser(parser, &sequence, &parsers.HTTPReuse{})
515-
addParser(parser, &sequence, &http.Requests{Mode: "listen"})
516-
addParser(parser, &sequence, &http.Redirect{})
517-
addParser(parser, &sequence, &parsers.Cookie{})
518-
addParser(parser, &sequence, &simple.Word{Name: "dynamic-cookie-key"})
519-
addParser(parser, &sequence, &parsers.UseServer{})
520-
addParser(parser, &sequence, &parsers.UniqueIDFormat{})
521-
addParser(parser, &sequence, &parsers.UniqueIDHeader{})
522-
addParser(parser, &sequence, &parsers.ErrorFile{})
523-
addParser(parser, &sequence, &parsers.ConfigSnippet{})
524-
addParser(parser, &sequence, &parsers.UseBackend{})
525-
addParser(parser, &sequence, &parsers.DefaultBackend{})
526-
addParser(parser, &sequence, &parsers.StickTable{})
527-
addParser(parser, &sequence, &parsers.ConfigSnippet{})
528-
addParser(parser, &sequence, &parsers.ErrorFile{})
529-
addParser(parser, &sequence, &parsers.Server{})
530-
addParser(parser, &sequence, &simple.Number{Name: "retries"})
531-
addParser(parser, &sequence, &tcp.Responses{})
532-
addParser(parser, &sequence, &http.Responses{Mode: "listen"})
533-
addParser(parser, &sequence, &parsers.DeclareCapture{})
534536
return p.createParsers(parser, sequence)
535537
}
536538

tests/configs/parser_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,18 @@ func TestConfigUseV2HTTPCheck(t *testing.T) {
135135
t.Fatalf("configurations does not match")
136136
}
137137
}
138+
139+
func TestListenSectionParsers(t *testing.T) {
140+
var buffer bytes.Buffer
141+
buffer.WriteString(configFull)
142+
p, err := parser.New(options.UseListenSectionParsers, options.Reader(&buffer))
143+
if err != nil {
144+
t.Fatalf(err.Error())
145+
}
146+
147+
result := p.String()
148+
if result != configFull {
149+
compare(t, configFull, result)
150+
t.Fatalf("configurations does not match")
151+
}
152+
}

0 commit comments

Comments
 (0)