Skip to content

Commit 3bb4750

Browse files
committed
MEDIUM: defaults: Add all possible child resources to defaults
1 parent d3350c5 commit 3bb4750

12 files changed

Lines changed: 1796 additions & 120 deletions

File tree

config-parser/section-parsers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ func (p *configParser) getDefaultParser() *Parsers {
210210
addParser(parser, &sequence, &simple.Number{Name: "hash-balance-factor"})
211211
addParser(parser, &sequence, &http.Requests{Mode: "defaults"})
212212
addParser(parser, &sequence, &tcp.Requests{Mode: "defaults"})
213+
addParser(parser, &sequence, &tcp.Responses{Mode: "defaults"})
213214
addParser(parser, &sequence, &http.Responses{Mode: "defaults"})
214215
addParser(parser, &sequence, &http.AfterResponses{})
215216
addParser(parser, &sequence, &quic.Initial{})

configuration/parents/parents.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func Parents(childType string) []Parent {
3535
return []Parent{
3636
{PathParentType: "backends", ParentType: "Backend", IsGenericParent: true},
3737
{PathParentType: "frontends", ParentType: "Frontend", GenericParentType: "Backend"},
38+
{PathParentType: "defaults", ParentType: "Defaults", GenericParentType: "Backend"},
3839
}
3940
case HTTPCheckChildType:
4041
return []Parent{
@@ -51,11 +52,13 @@ func Parents(childType string) []Parent {
5152
return []Parent{
5253
{PathParentType: "backends", ParentType: "Backend", IsGenericParent: true},
5354
{PathParentType: "frontends", ParentType: "Frontend", GenericParentType: "Backend"},
55+
{PathParentType: "defaults", ParentType: "Defaults", GenericParentType: "Backend"},
5456
}
5557
case HTTPResponseRuleChildType:
5658
return []Parent{
5759
{PathParentType: "backends", ParentType: "Backend", IsGenericParent: true},
5860
{PathParentType: "frontends", ParentType: "Frontend", GenericParentType: "Backend"},
61+
{PathParentType: "defaults", ParentType: "Defaults", GenericParentType: "Backend"},
5962
}
6063
case TCPCheckChildType:
6164
return []Parent{
@@ -66,10 +69,12 @@ func Parents(childType string) []Parent {
6669
return []Parent{
6770
{PathParentType: "backends", ParentType: "Backend", IsGenericParent: true},
6871
{PathParentType: "frontends", ParentType: "Frontend", GenericParentType: "Backend"},
72+
{PathParentType: "defaults", ParentType: "Defaults", GenericParentType: "Backend"},
6973
}
7074
case TCPResponseRuleChildType:
7175
return []Parent{
7276
{PathParentType: "backends", ParentType: "Backend", IsGenericParent: true},
77+
{PathParentType: "defaults", ParentType: "Defaults", GenericParentType: "Backend"},
7378
}
7479
case QUICInitialRuleType:
7580
return []Parent{
@@ -81,6 +86,7 @@ func Parents(childType string) []Parent {
8186
{PathParentType: "backends", ParentType: "Backend", IsGenericParent: true},
8287
{PathParentType: "frontends", ParentType: "Frontend", GenericParentType: "Backend"},
8388
{PathParentType: "fcgi_apps", ParentType: "FCGIApp", GenericParentType: "Backend"},
89+
{PathParentType: "defaults", ParentType: "Defaults", GenericParentType: "Backend"},
8490
}
8591
case BindChildType:
8692
return []Parent{

configuration/parser.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ func getParserFromParent(attribute, parentType, parentName string) (parser.Secti
6868
default:
6969
return "", "", fmt.Errorf("unsupported parent: %s", parentType)
7070
}
71+
case "tcp-response":
72+
switch parentType {
73+
case BackendParentName:
74+
return parser.Backends, parentName, nil
75+
case DefaultsParentName:
76+
if parentName == "" {
77+
parentName = parser.DefaultSectionName
78+
}
79+
return parser.Defaults, parentName, nil
80+
default:
81+
return "", "", fmt.Errorf("unsupported parent: %s", parentType)
82+
}
7183
}
7284

7385
return "", "", fmt.Errorf("unsupported attribute: %s", attribute)

configuration/structured_backends.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ func parseBackendsSection(name string, p parser.Parser) (*models.Backend, error)
268268
b.TCPRequestRuleList = tcpRules
269269

270270
// tcp response rules
271-
tcpRespRules, err := ParseTCPResponseRules(name, p)
271+
tcpRespRules, err := ParseTCPResponseRules(BackendParentName, name, p)
272272
if err != nil {
273273
return nil, err
274274
}

configuration/structured_defaults.go

Lines changed: 95 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,16 @@ func parseDefaultsSection(name string, p parser.Parser) (*models.Defaults, error
222222
return nil, err
223223
}
224224

225+
acls, err := ParseACLs(DefaultsParentName, name, p)
226+
if err != nil {
227+
return nil, err
228+
}
229+
d.ACLList = acls
230+
lt, err := ParseLogTargets(DefaultsParentName, name, p)
231+
if err != nil {
232+
return nil, err
233+
}
234+
d.LogTargetList = lt
225235
hchecks, err := ParseHTTPChecks(DefaultsParentName, name, p)
226236
if err != nil {
227237
return nil, err
@@ -237,21 +247,41 @@ func parseDefaultsSection(name string, p parser.Parser) (*models.Defaults, error
237247
return nil, err
238248
}
239249
d.TCPCheckRuleList = tchecks
240-
lt, err := ParseLogTargets(DefaultsParentName, name, p)
250+
qi, err := ParseQUICInitialRules(DefaultsParentName, name, p)
241251
if err != nil {
242252
return nil, err
243253
}
244-
d.LogTargetList = lt
245-
qi, err := ParseQUICInitialRules(DefaultsParentName, name, p)
254+
d.QUICInitialRuleList = qi
255+
httpAfterResponseRules, err := ParseHTTPAfterRules(DefaultsParentName, name, p)
246256
if err != nil {
247257
return nil, err
248258
}
249-
d.QUICInitialRuleList = qi
259+
d.HTTPAfterResponseRuleList = httpAfterResponseRules
260+
httpRequestRules, err := ParseHTTPRequestRules(DefaultsParentName, name, p)
261+
if err != nil {
262+
return nil, err
263+
}
264+
d.HTTPRequestRuleList = httpRequestRules
265+
httpResponseRules, err := ParseHTTPResponseRules(DefaultsParentName, name, p)
266+
if err != nil {
267+
return nil, err
268+
}
269+
d.HTTPResponseRuleList = httpResponseRules
270+
tcpRequestRules, err := ParseTCPRequestRules(DefaultsParentName, name, p)
271+
if err != nil {
272+
return nil, err
273+
}
274+
d.TCPRequestRuleList = tcpRequestRules
275+
tcpResponseRules, err := ParseTCPResponseRules(DefaultsParentName, name, p)
276+
if err != nil {
277+
return nil, err
278+
}
279+
d.TCPResponseRuleList = tcpResponseRules
250280

251281
return d, nil
252282
}
253283

254-
func serializeDefaultsSection(a StructuredToParserArgs, d *models.Defaults) error {
284+
func serializeDefaultsSection(a StructuredToParserArgs, d *models.Defaults) error { //nolint: gocognit
255285
p := *a.Parser
256286
var err error
257287

@@ -299,14 +329,73 @@ func serializeDefaultsSection(a StructuredToParserArgs, d *models.Defaults) erro
299329
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, "", a.TID, a.TID == "", err)
300330
}
301331
}
332+
for i, rule := range d.HTTPRequestRuleList {
333+
var s types.Action
334+
s, err = SerializeHTTPRequestRule(*rule, a.Options)
335+
if err != nil {
336+
return err
337+
}
338+
if err = p.Insert(parser.Defaults, d.Name, "http-request", s, i); err != nil {
339+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
340+
}
341+
}
342+
for i, rule := range d.HTTPResponseRuleList {
343+
var s types.Action
344+
s, err = SerializeHTTPResponseRule(*rule, a.Options)
345+
if err != nil {
346+
return err
347+
}
348+
if err = p.Insert(parser.Defaults, d.Name, "http-response", s, i); err != nil {
349+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
350+
}
351+
}
352+
for i, rule := range d.TCPRequestRuleList {
353+
var s types.TCPType
354+
s, err = SerializeTCPRequestRule(*rule, a.Options)
355+
if err != nil {
356+
return err
357+
}
358+
if err = p.Insert(parser.Defaults, d.Name, "tcp-request", s, i); err != nil {
359+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
360+
}
361+
}
362+
for i, rule := range d.TCPResponseRuleList {
363+
var s types.TCPType
364+
s, err = SerializeTCPResponseRule(*rule, a.Options)
365+
if err != nil {
366+
return err
367+
}
368+
if err = p.Insert(parser.Defaults, d.Name, "tcp-response", s, i); err != nil {
369+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
370+
}
371+
}
372+
for i, httpAfterResponse := range d.HTTPAfterResponseRuleList {
373+
var s types.Action
374+
s, err = SerializeHTTPAfterRule(*httpAfterResponse)
375+
if err != nil {
376+
return err
377+
}
378+
if err = p.Insert(parser.Defaults, d.Name, "http-after-response", s, i); err != nil {
379+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
380+
}
381+
}
382+
for i, acl := range d.ACLList {
383+
s := SerializeACL(*acl)
384+
if err != nil {
385+
return err
386+
}
387+
if err = p.Insert(parser.Defaults, d.Name, "acl", s, i); err != nil {
388+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
389+
}
390+
}
302391
for i, quicInitial := range d.QUICInitialRuleList {
303392
var s types.Action
304393
s, err = SerializeQUICInitialRule(*quicInitial)
305394
if err != nil {
306395
return err
307396
}
308397
if err = p.Insert(parser.Defaults, d.Name, "quic-initial", s, i); err != nil {
309-
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, "", a.TID, a.TID == "", err)
398+
return a.HandleError(strconv.FormatInt(int64(i), 10), DefaultsParentName, d.Name, a.TID, a.TID == "", err)
310399
}
311400
}
312401

0 commit comments

Comments
 (0)