Skip to content

Commit 261676a

Browse files
committed
NLB-8186: identify directives as parameters in map blocks
Crossplane parses map-like directives by adding the parameters in their bodies to the payload as Directives. However, the parameters within the map blocks are not valid nginx directives; and therefore, it is useful to discern which Directive types that crossplane generates are nginx directives or map parameters.
1 parent d9d35f0 commit 261676a

File tree

4 files changed

+93
-69
lines changed

4 files changed

+93
-69
lines changed

build_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,8 @@ func equalDirectives(d1, d2 *Directive) bool {
595595
!equalIncludes(d1.Includes, d2.Includes) ||
596596
!equalBlocks(d1.Block, d2.Block) ||
597597
(d1.Comment == nil) != (d2.Comment == nil) ||
598-
(d1.Comment != nil && *d1.Comment != *d2.Comment) {
598+
(d1.Comment != nil && *d1.Comment != *d2.Comment) ||
599+
d1.IsMapBlockParameter != d2.IsMapBlockParameter {
599600
return false
600601
}
601602

parse.go

+1
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ func (p *parser) parse(parsing *Config, tokens <-chan NgxToken, ctx blockCtx, co
314314
}
315315
continue
316316
}
317+
stmt.IsMapBlockParameter = true
317318
parsed = append(parsed, stmt)
318319
continue
319320
}

parse_test.go

+85-68
Original file line numberDiff line numberDiff line change
@@ -1048,16 +1048,18 @@ var parseFixtures = []parseFixture{
10481048
Line: 4,
10491049
Block: Directives{
10501050
{
1051-
Directive: "default",
1052-
Args: []string{"0"},
1053-
Line: 5,
1054-
Block: Directives{},
1051+
Directive: "default",
1052+
Args: []string{"0"},
1053+
Line: 5,
1054+
Block: Directives{},
1055+
IsMapBlockParameter: true,
10551056
},
10561057
{
1057-
Directive: "~Opera Mini",
1058-
Args: []string{"1"},
1059-
Line: 6,
1060-
Block: Directives{},
1058+
Directive: "~Opera Mini",
1059+
Args: []string{"1"},
1060+
Line: 6,
1061+
Block: Directives{},
1062+
IsMapBlockParameter: true,
10611063
},
10621064
},
10631065
},
@@ -1067,16 +1069,18 @@ var parseFixtures = []parseFixture{
10671069
Line: 9,
10681070
Block: Directives{
10691071
{
1070-
Directive: "C0",
1071-
Args: []string{"D18E"},
1072-
Line: 10,
1073-
Block: Directives{},
1072+
Directive: "C0",
1073+
Args: []string{"D18E"},
1074+
Line: 10,
1075+
Block: Directives{},
1076+
IsMapBlockParameter: true,
10741077
},
10751078
{
1076-
Directive: "C1",
1077-
Args: []string{"D0B0"},
1078-
Line: 11,
1079-
Block: Directives{},
1079+
Directive: "C1",
1080+
Args: []string{"D0B0"},
1081+
Line: 11,
1082+
Block: Directives{},
1083+
IsMapBlockParameter: true,
10801084
},
10811085
},
10821086
},
@@ -1183,16 +1187,18 @@ var parseFixtures = []parseFixture{
11831187
Line: 4,
11841188
Block: Directives{
11851189
{
1186-
Directive: "default",
1187-
Args: []string{"0"},
1188-
Line: 5,
1189-
Block: Directives{},
1190+
Directive: "default",
1191+
Args: []string{"0"},
1192+
Line: 5,
1193+
Block: Directives{},
1194+
IsMapBlockParameter: true,
11901195
},
11911196
{
1192-
Directive: "~Opera Mini",
1193-
Args: []string{"1"},
1194-
Line: 6,
1195-
Block: Directives{},
1197+
Directive: "~Opera Mini",
1198+
Args: []string{"1"},
1199+
Line: 6,
1200+
Block: Directives{},
1201+
IsMapBlockParameter: true,
11961202
},
11971203
},
11981204
},
@@ -1238,28 +1244,32 @@ var parseFixtures = []parseFixture{
12381244
Line: 6,
12391245
Block: Directives{
12401246
{
1241-
Directive: "ranges",
1242-
Args: []string{},
1243-
Line: 7,
1244-
Block: Directives{},
1247+
Directive: "ranges",
1248+
Args: []string{},
1249+
Line: 7,
1250+
Block: Directives{},
1251+
IsMapBlockParameter: true,
12451252
},
12461253
{
1247-
Directive: "default",
1248-
Args: []string{"0"},
1249-
Line: 8,
1250-
Block: Directives{},
1254+
Directive: "default",
1255+
Args: []string{"0"},
1256+
Line: 8,
1257+
Block: Directives{},
1258+
IsMapBlockParameter: true,
12511259
},
12521260
{
1253-
Directive: "192.168.1.0/24",
1254-
Args: []string{"1"},
1255-
Line: 9,
1256-
Block: Directives{},
1261+
Directive: "192.168.1.0/24",
1262+
Args: []string{"1"},
1263+
Line: 9,
1264+
Block: Directives{},
1265+
IsMapBlockParameter: true,
12571266
},
12581267
{
1259-
Directive: "127.0.0.1",
1260-
Args: []string{"2"},
1261-
Line: 10,
1262-
Block: Directives{},
1268+
Directive: "127.0.0.1",
1269+
Args: []string{"2"},
1270+
Line: 10,
1271+
Block: Directives{},
1272+
IsMapBlockParameter: true,
12631273
},
12641274
},
12651275
},
@@ -1325,16 +1335,18 @@ var parseFixtures = []parseFixture{
13251335
Line: 2,
13261336
Block: Directives{
13271337
{
1328-
Directive: "text/html",
1329-
Args: []string{"html", "htm", "shtml"},
1330-
Line: 3,
1331-
Block: Directives{},
1338+
Directive: "text/html",
1339+
Args: []string{"html", "htm", "shtml"},
1340+
Line: 3,
1341+
Block: Directives{},
1342+
IsMapBlockParameter: true,
13321343
},
13331344
{
1334-
Directive: "text/css",
1335-
Args: []string{"css"},
1336-
Line: 4,
1337-
Block: Directives{},
1345+
Directive: "text/css",
1346+
Args: []string{"css"},
1347+
Line: 4,
1348+
Block: Directives{},
1349+
IsMapBlockParameter: true,
13381350
},
13391351
},
13401352
},
@@ -2131,16 +2143,18 @@ var parseFixtures = []parseFixture{
21312143
Args: []string{"/etc/Geo/GeoLite2-City.mmdb"},
21322144
Block: Directives{
21332145
{
2134-
Directive: "auto_reload",
2135-
Args: []string{"5s"},
2136-
Line: 3,
2137-
Block: Directives{},
2146+
Directive: "auto_reload",
2147+
Args: []string{"5s"},
2148+
Line: 3,
2149+
Block: Directives{},
2150+
IsMapBlockParameter: true,
21382151
},
21392152
{
2140-
Directive: "$geoip2_city_name",
2141-
Args: []string{"city", "names", "en"},
2142-
Line: 4,
2143-
Block: Directives{},
2153+
Directive: "$geoip2_city_name",
2154+
Args: []string{"city", "names", "en"},
2155+
Line: 4,
2156+
Block: Directives{},
2157+
IsMapBlockParameter: true,
21442158
},
21452159
},
21462160
},
@@ -2203,10 +2217,11 @@ var parseFixtures = []parseFixture{
22032217
Args: []string{"/etc/Geo/GeoLite2-Country.mmdb"},
22042218
Block: Directives{
22052219
{
2206-
Directive: "$geoip2_country_name",
2207-
Args: []string{"country", "names", "en"},
2208-
Line: 20,
2209-
Block: Directives{},
2220+
Directive: "$geoip2_country_name",
2221+
Args: []string{"country", "names", "en"},
2222+
Line: 20,
2223+
Block: Directives{},
2224+
IsMapBlockParameter: true,
22102225
},
22112226
},
22122227
},
@@ -2216,16 +2231,18 @@ var parseFixtures = []parseFixture{
22162231
Args: []string{"$geoip2_country_name", "$backend"},
22172232
Block: Directives{
22182233
{
2219-
Directive: "United States",
2220-
Args: []string{"us_backend"},
2221-
Line: 24,
2222-
Block: Directives{},
2234+
Directive: "United States",
2235+
Args: []string{"us_backend"},
2236+
Line: 24,
2237+
Block: Directives{},
2238+
IsMapBlockParameter: true,
22232239
},
22242240
{
2225-
Directive: "default",
2226-
Args: []string{"default_backend"},
2227-
Line: 25,
2228-
Block: Directives{},
2241+
Directive: "default",
2242+
Args: []string{"default_backend"},
2243+
Line: 25,
2244+
Block: Directives{},
2245+
IsMapBlockParameter: true,
22292246
},
22302247
},
22312248
},

types.go

+5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ type Directive struct {
4545
Includes []int `json:"includes,omitempty"`
4646
Block Directives `json:"block,omitempty"`
4747
Comment *string `json:"comment,omitempty"`
48+
// IsMapBlockParameter is true if the directive represents a parameter in the body of a "map-like" directive.
49+
IsMapBlockParameter bool `json:"mapBlockParameter,omitempty"`
4850
}
51+
4952
type Directives []*Directive
5053

5154
// IsBlock returns true if this is a block directive.
@@ -110,6 +113,8 @@ func (d *Directive) Equal(a *Directive) bool {
110113
return false
111114
case a.File != d.File:
112115
return false
116+
case a.IsMapBlockParameter != d.IsMapBlockParameter:
117+
return false
113118
}
114119
for i, inc := range a.Includes {
115120
if inc != d.Includes[i] {

0 commit comments

Comments
 (0)