Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 003eccc

Browse files
Fix events block crash (#3730)
1 parent b280a93 commit 003eccc

File tree

10 files changed

+122
-42
lines changed

10 files changed

+122
-42
lines changed

‎internal/controller/nginx/conf/nginx-plus.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ worker_processes auto;
55

66
pid /var/run/nginx/nginx.pid;
77

8+
events {
9+
include /etc/nginx/events-includes/*.conf;
10+
}
11+
812
http {
913
include /etc/nginx/conf.d/*.conf;
1014
include /etc/nginx/mime.types;

‎internal/controller/nginx/conf/nginx.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ worker_processes auto;
55

66
pid /var/run/nginx/nginx.pid;
77

8+
events {
9+
include /etc/nginx/events-includes/*.conf;
10+
}
11+
812
http {
913
include /etc/nginx/conf.d/*.conf;
1014
include /etc/nginx/mime.types;

‎internal/controller/nginx/config/generator.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ const (
3838
// For example, these files include load_module directives and snippets that target the main context.
3939
mainIncludesFolder = configFolder + "/main-includes"
4040

41+
// eventsIncludesFolder is the folder where NGINX events context configuration files are stored.
42+
eventsIncludesFolder = configFolder + "/events-includes"
43+
4144
// secretsFolder is the folder where secrets (like TLS certs/keys) are stored.
4245
secretsFolder = configFolder + "/secrets"
4346

@@ -56,6 +59,9 @@ const (
5659
// mainIncludesConfigFile is the path to the file containing NGINX configuration in the main context.
5760
mainIncludesConfigFile = mainIncludesFolder + "/main.conf"
5861

62+
// eventsIncludesConfigFile is the path to the file containing NGINX events configuration.
63+
eventsIncludesConfigFile = eventsIncludesFolder + "/events.conf"
64+
5965
// mgmtIncludesFile is the path to the file containing the NGINX Plus mgmt config.
6066
mgmtIncludesFile = mainIncludesFolder + "/mgmt.conf"
6167

@@ -196,6 +202,7 @@ func (g GeneratorImpl) getExecuteFuncs(
196202
) []executeFunc {
197203
return []executeFunc{
198204
executeMainConfig,
205+
executeEventsConfig,
199206
executeBaseHTTPConfig,
200207
g.newExecuteServersFunc(generator, keepAliveCheck),
201208
newExecuteUpstreamsFunc(upstreams),

‎internal/controller/nginx/config/generator_test.go

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func TestGenerate(t *testing.T) {
147147

148148
files := generator.Generate(conf)
149149

150-
g.Expect(files).To(HaveLen(17))
150+
g.Expect(files).To(HaveLen(18))
151151
arrange := func(i, j int) bool {
152152
return files[i].Meta.Name < files[j].Meta.Name
153153
}
@@ -158,6 +158,7 @@ func TestGenerate(t *testing.T) {
158158
/etc/nginx/conf.d/http.conf
159159
/etc/nginx/conf.d/matches.json
160160
/etc/nginx/conf.d/plus-api.conf
161+
/etc/nginx/events-includes/events.conf
161162
/etc/nginx/includes/http_snippet1.conf
162163
/etc/nginx/includes/http_snippet2.conf
163164
/etc/nginx/includes/main_snippet1.conf
@@ -211,52 +212,56 @@ func TestGenerate(t *testing.T) {
211212
g.Expect(httpCfg).To(ContainSubstring("deny all;"))
212213
g.Expect(httpCfg).To(ContainSubstring("location = /dashboard.html {}"))
213214

215+
// events config file
216+
g.Expect(files[3].Meta.Name).To(Equal("/etc/nginx/events-includes/events.conf"))
217+
g.Expect(string(files[3].Contents)).To(ContainSubstring("worker_connections"))
218+
214219
// snippet include files
215220
// content is not checked in this test.
216-
g.Expect(files[3].Meta.Name).To(Equal("/etc/nginx/includes/http_snippet1.conf"))
217-
g.Expect(files[4].Meta.Name).To(Equal("/etc/nginx/includes/http_snippet2.conf"))
218-
g.Expect(files[5].Meta.Name).To(Equal("/etc/nginx/includes/main_snippet1.conf"))
219-
g.Expect(files[6].Meta.Name).To(Equal("/etc/nginx/includes/main_snippet2.conf"))
221+
g.Expect(files[4].Meta.Name).To(Equal("/etc/nginx/includes/http_snippet1.conf"))
222+
g.Expect(files[5].Meta.Name).To(Equal("/etc/nginx/includes/http_snippet2.conf"))
223+
g.Expect(files[6].Meta.Name).To(Equal("/etc/nginx/includes/main_snippet1.conf"))
224+
g.Expect(files[7].Meta.Name).To(Equal("/etc/nginx/includes/main_snippet2.conf"))
220225

221-
g.Expect(files[7].Meta.Name).To(Equal("/etc/nginx/main-includes/deployment_ctx.json"))
222-
deploymentCtx := string(files[7].Contents)
226+
g.Expect(files[8].Meta.Name).To(Equal("/etc/nginx/main-includes/deployment_ctx.json"))
227+
deploymentCtx := string(files[8].Contents)
223228
g.Expect(deploymentCtx).To(ContainSubstring("\"integration\":\"ngf\""))
224229
g.Expect(deploymentCtx).To(ContainSubstring("\"cluster_id\":\"test-uid\""))
225230
g.Expect(deploymentCtx).To(ContainSubstring("\"installation_id\":\"test-uid-replicaSet\""))
226231
g.Expect(deploymentCtx).To(ContainSubstring("\"cluster_node_count\":1"))
227232

228-
g.Expect(files[8].Meta.Name).To(Equal("/etc/nginx/main-includes/main.conf"))
229-
mainConfStr := string(files[8].Contents)
233+
g.Expect(files[9].Meta.Name).To(Equal("/etc/nginx/main-includes/main.conf"))
234+
mainConfStr := string(files[9].Contents)
230235
g.Expect(mainConfStr).To(ContainSubstring("load_module modules/ngx_otel_module.so;"))
231236
g.Expect(mainConfStr).To(ContainSubstring("include /etc/nginx/includes/main_snippet1.conf;"))
232237
g.Expect(mainConfStr).To(ContainSubstring("include /etc/nginx/includes/main_snippet2.conf;"))
233238

234-
g.Expect(files[9].Meta.Name).To(Equal("/etc/nginx/main-includes/mgmt.conf"))
235-
mgmtConf := string(files[9].Contents)
239+
g.Expect(files[10].Meta.Name).To(Equal("/etc/nginx/main-includes/mgmt.conf"))
240+
mgmtConf := string(files[10].Contents)
236241
g.Expect(mgmtConf).To(ContainSubstring("usage_report endpoint=test-endpoint"))
237242
g.Expect(mgmtConf).To(ContainSubstring("license_token /etc/nginx/secrets/license.jwt"))
238243
g.Expect(mgmtConf).To(ContainSubstring("deployment_context /etc/nginx/main-includes/deployment_ctx.json"))
239244
g.Expect(mgmtConf).To(ContainSubstring("ssl_trusted_certificate /etc/nginx/secrets/mgmt-ca.crt"))
240245
g.Expect(mgmtConf).To(ContainSubstring("ssl_certificate /etc/nginx/secrets/mgmt-tls.crt"))
241246
g.Expect(mgmtConf).To(ContainSubstring("ssl_certificate_key /etc/nginx/secrets/mgmt-tls.key"))
242247

243-
g.Expect(files[10].Meta.Name).To(Equal("/etc/nginx/secrets/license.jwt"))
244-
g.Expect(string(files[10].Contents)).To(Equal("license"))
248+
g.Expect(files[11].Meta.Name).To(Equal("/etc/nginx/secrets/license.jwt"))
249+
g.Expect(string(files[11].Contents)).To(Equal("license"))
245250

246-
g.Expect(files[11].Meta.Name).To(Equal("/etc/nginx/secrets/mgmt-ca.crt"))
247-
g.Expect(string(files[11].Contents)).To(Equal("ca"))
251+
g.Expect(files[12].Meta.Name).To(Equal("/etc/nginx/secrets/mgmt-ca.crt"))
252+
g.Expect(string(files[12].Contents)).To(Equal("ca"))
248253

249-
g.Expect(files[12].Meta.Name).To(Equal("/etc/nginx/secrets/mgmt-tls.crt"))
250-
g.Expect(string(files[12].Contents)).To(Equal("cert"))
254+
g.Expect(files[13].Meta.Name).To(Equal("/etc/nginx/secrets/mgmt-tls.crt"))
255+
g.Expect(string(files[13].Contents)).To(Equal("cert"))
251256

252-
g.Expect(files[13].Meta.Name).To(Equal("/etc/nginx/secrets/mgmt-tls.key"))
253-
g.Expect(string(files[13].Contents)).To(Equal("key"))
257+
g.Expect(files[14].Meta.Name).To(Equal("/etc/nginx/secrets/mgmt-tls.key"))
258+
g.Expect(string(files[14].Contents)).To(Equal("key"))
254259

255-
g.Expect(files[14].Meta.Name).To(Equal("/etc/nginx/secrets/test-certbundle.crt"))
256-
certBundle := string(files[14].Contents)
260+
g.Expect(files[15].Meta.Name).To(Equal("/etc/nginx/secrets/test-certbundle.crt"))
261+
certBundle := string(files[15].Contents)
257262
g.Expect(certBundle).To(Equal("test-cert"))
258263

259-
g.Expect(files[15]).To(Equal(agent.File{
264+
g.Expect(files[16]).To(Equal(agent.File{
260265
Meta: &pb.FileMeta{
261266
Name: "/etc/nginx/secrets/test-keypair.pem",
262267
Hash: filesHelper.GenerateHash([]byte("test-cert\ntest-key")),
@@ -266,9 +271,9 @@ func TestGenerate(t *testing.T) {
266271
Contents: []byte("test-cert\ntest-key"),
267272
}))
268273

269-
g.Expect(files[16].Meta.Name).To(Equal("/etc/nginx/stream-conf.d/stream.conf"))
270-
g.Expect(files[16].Meta.Permissions).To(Equal(file.RegularFileMode))
271-
streamCfg := string(files[16].Contents)
274+
g.Expect(files[17].Meta.Name).To(Equal("/etc/nginx/stream-conf.d/stream.conf"))
275+
g.Expect(files[17].Meta.Permissions).To(Equal(file.RegularFileMode))
276+
streamCfg := string(files[17].Contents)
272277
g.Expect(streamCfg).To(ContainSubstring("listen unix:/var/run/nginx/app.example.com-443.sock"))
273278
g.Expect(streamCfg).To(ContainSubstring("listen 443"))
274279
g.Expect(streamCfg).To(ContainSubstring("app.example.com unix:/var/run/nginx/app.example.com-443.sock"))

‎internal/controller/nginx/config/main_config.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ import (
1515
)
1616

1717
var (
18-
mainConfigTemplate = gotemplate.Must(gotemplate.New("main").Parse(mainConfigTemplateText))
19-
mgmtConfigTemplate = gotemplate.Must(gotemplate.New("mgmt").Parse(mgmtConfigTemplateText))
18+
mainConfigTemplate = gotemplate.Must(gotemplate.New("main").Parse(mainConfigTemplateText))
19+
mgmtConfigTemplate = gotemplate.Must(gotemplate.New("mgmt").Parse(mgmtConfigTemplateText))
20+
eventsConfigTemplate = gotemplate.Must(gotemplate.New("events").Parse(eventsConfigTemplateText))
2021
)
2122

2223
type mainConfig struct {
@@ -42,6 +43,17 @@ func executeMainConfig(conf dataplane.Configuration) []executeResult {
4243
return results
4344
}
4445

46+
func executeEventsConfig(conf dataplane.Configuration) []executeResult {
47+
eventsData := helpers.MustExecuteTemplate(eventsConfigTemplate, conf)
48+
49+
return []executeResult{
50+
{
51+
dest: eventsIncludesConfigFile,
52+
data: eventsData,
53+
},
54+
}
55+
}
56+
4557
type mgmtConf struct {
4658
Endpoint string
4759
Resolver string

‎internal/controller/nginx/config/main_config_template.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ load_module modules/ngx_otel_module.so;
77
88
error_log stderr {{ .Conf.Logging.ErrorLevel }};
99
10-
events {
11-
worker_connections {{ .Conf.WorkerConnections }};
12-
}
1310
1411
{{ range $i := .Includes -}}
1512
include {{ $i.Name }};
1613
{{ end -}}
1714
`
1815

16+
const eventsConfigTemplateText = `
17+
worker_connections {{ .WorkerConnections }};
18+
`
19+
1920
const mgmtConfigTemplateText = `
2021
mgmt {
2122
{{- if .Endpoint }}

‎internal/controller/nginx/config/main_config_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,44 @@ func TestExecuteMainConfig_WorkerConnections(t *testing.T) {
173173
res := executeMainConfig(test.conf)
174174
g.Expect(res).To(HaveLen(1))
175175
g.Expect(res[0].dest).To(Equal(mainIncludesConfigFile))
176+
g.Expect(string(res[0].data)).To(ContainSubstring("error_log stderr"))
177+
})
178+
}
179+
}
180+
181+
func TestExecuteEventsConfig_WorkerConnections(t *testing.T) {
182+
t.Parallel()
183+
184+
tests := []struct {
185+
name string
186+
expWorkerConnections string
187+
conf dataplane.Configuration
188+
}{
189+
{
190+
name: "custom worker connections",
191+
conf: dataplane.Configuration{
192+
WorkerConnections: 2048,
193+
},
194+
expWorkerConnections: "worker_connections 2048;",
195+
},
196+
{
197+
name: "default worker connections",
198+
conf: dataplane.Configuration{
199+
WorkerConnections: dataplane.DefaultWorkerConnections,
200+
},
201+
expWorkerConnections: "worker_connections 1024;",
202+
},
203+
}
204+
205+
for _, test := range tests {
206+
t.Run(test.name, func(t *testing.T) {
207+
t.Parallel()
208+
g := NewWithT(t)
209+
210+
res := executeEventsConfig(test.conf)
211+
g.Expect(res).To(HaveLen(1))
212+
g.Expect(res[0].dest).To(Equal(eventsIncludesConfigFile))
176213
g.Expect(string(res[0].data)).To(ContainSubstring(test.expWorkerConnections))
177-
g.Expect(string(res[0].data)).To(ContainSubstring("events {"))
178214
})
179215
}
180216
}

‎internal/controller/provisioner/objects.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,11 @@ func (p *NginxProvisioner) buildNginxConfigMaps(
396396
"WorkerConnections": workerConnections,
397397
}
398398

399+
// Create events ConfigMap data using template
400+
eventsFields := map[string]interface{}{
401+
"WorkerConnections": workerConnections,
402+
}
403+
399404
bootstrapCM := &corev1.ConfigMap{
400405
ObjectMeta: metav1.ObjectMeta{
401406
Name: ngxIncludesConfigMapName,
@@ -404,7 +409,8 @@ func (p *NginxProvisioner) buildNginxConfigMaps(
404409
Annotations: objectMeta.Annotations,
405410
},
406411
Data: map[string]string{
407-
"main.conf": string(helpers.MustExecuteTemplate(mainTemplate, mainFields)),
412+
"main.conf": string(helpers.MustExecuteTemplate(mainTemplate, mainFields)),
413+
"events.conf": string(helpers.MustExecuteTemplate(eventsTemplate, eventsFields)),
408414
},
409415
}
410416

@@ -826,6 +832,7 @@ func (p *NginxProvisioner) buildNginxPodTemplateSpec(
826832
{MountPath: "/etc/nginx/conf.d", Name: "nginx-conf"},
827833
{MountPath: "/etc/nginx/stream-conf.d", Name: "nginx-stream-conf"},
828834
{MountPath: "/etc/nginx/main-includes", Name: "nginx-main-includes"},
835+
{MountPath: "/etc/nginx/events-includes", Name: "nginx-events-includes"},
829836
{MountPath: "/etc/nginx/secrets", Name: "nginx-secrets"},
830837
{MountPath: "/var/run/nginx", Name: "nginx-run"},
831838
{MountPath: "/var/cache/nginx", Name: "nginx-cache"},
@@ -845,6 +852,8 @@ func (p *NginxProvisioner) buildNginxPodTemplateSpec(
845852
"--destination", "/etc/nginx-agent",
846853
"--source", "/includes/main.conf",
847854
"--destination", "/etc/nginx/main-includes",
855+
"--source", "/includes/events.conf",
856+
"--destination", "/etc/nginx/events-includes",
848857
},
849858
Env: []corev1.EnvVar{
850859
{
@@ -861,6 +870,7 @@ func (p *NginxProvisioner) buildNginxPodTemplateSpec(
861870
{MountPath: "/etc/nginx-agent", Name: "nginx-agent"},
862871
{MountPath: "/includes", Name: "nginx-includes-bootstrap"},
863872
{MountPath: "/etc/nginx/main-includes", Name: "nginx-main-includes"},
873+
{MountPath: "/etc/nginx/events-includes", Name: "nginx-events-includes"},
864874
},
865875
SecurityContext: &corev1.SecurityContext{
866876
Capabilities: &corev1.Capabilities{
@@ -927,6 +937,7 @@ func (p *NginxProvisioner) buildNginxPodTemplateSpec(
927937
{Name: "nginx-conf", VolumeSource: emptyDirVolumeSource},
928938
{Name: "nginx-stream-conf", VolumeSource: emptyDirVolumeSource},
929939
{Name: "nginx-main-includes", VolumeSource: emptyDirVolumeSource},
940+
{Name: "nginx-events-includes", VolumeSource: emptyDirVolumeSource},
930941
{Name: "nginx-secrets", VolumeSource: emptyDirVolumeSource},
931942
{Name: "nginx-run", VolumeSource: emptyDirVolumeSource},
932943
{Name: "nginx-cache", VolumeSource: emptyDirVolumeSource},

‎internal/controller/provisioner/objects_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,7 @@ func TestBuildNginxConfigMaps_WorkerConnections(t *testing.T) {
12751275

12761276
bootstrapCM, ok := configMaps[0].(*corev1.ConfigMap)
12771277
g.Expect(ok).To(BeTrue())
1278-
g.Expect(bootstrapCM.Data["main.conf"]).To(ContainSubstring("worker_connections 1024;"))
1278+
g.Expect(bootstrapCM.Data["events.conf"]).To(ContainSubstring("worker_connections 1024;"))
12791279

12801280
// Test with default worker connections (empty NginxProxy config)
12811281
nProxyCfgEmpty := &graph.EffectiveNginxProxy{}
@@ -1284,7 +1284,7 @@ func TestBuildNginxConfigMaps_WorkerConnections(t *testing.T) {
12841284

12851285
bootstrapCM, ok = configMaps[0].(*corev1.ConfigMap)
12861286
g.Expect(ok).To(BeTrue())
1287-
g.Expect(bootstrapCM.Data["main.conf"]).To(ContainSubstring("worker_connections 1024;"))
1287+
g.Expect(bootstrapCM.Data["events.conf"]).To(ContainSubstring("worker_connections 1024;"))
12881288

12891289
// Test with custom worker connections
12901290
nProxyCfg := &graph.EffectiveNginxProxy{
@@ -1296,7 +1296,7 @@ func TestBuildNginxConfigMaps_WorkerConnections(t *testing.T) {
12961296

12971297
bootstrapCM, ok = configMaps[0].(*corev1.ConfigMap)
12981298
g.Expect(ok).To(BeTrue())
1299-
g.Expect(bootstrapCM.Data["main.conf"]).To(ContainSubstring("worker_connections 2048;"))
1299+
g.Expect(bootstrapCM.Data["events.conf"]).To(ContainSubstring("worker_connections 2048;"))
13001300
}
13011301

13021302
func TestBuildNginxConfigMaps_AgentFields(t *testing.T) {

‎internal/controller/provisioner/templates.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ package provisioner
33
import gotemplate "text/template"
44

55
var (
6-
mainTemplate = gotemplate.Must(gotemplate.New("main").Parse(mainTemplateText))
7-
mgmtTemplate = gotemplate.Must(gotemplate.New("mgmt").Parse(mgmtTemplateText))
8-
agentTemplate = gotemplate.Must(gotemplate.New("agent").Parse(agentTemplateText))
6+
mainTemplate = gotemplate.Must(gotemplate.New("main").Parse(mainTemplateText))
7+
mgmtTemplate = gotemplate.Must(gotemplate.New("mgmt").Parse(mgmtTemplateText))
8+
agentTemplate = gotemplate.Must(gotemplate.New("agent").Parse(agentTemplateText))
9+
eventsTemplate = gotemplate.Must(gotemplate.New("events").Parse(eventsTemplateText))
910
)
1011

1112
const mainTemplateText = `
12-
error_log stderr {{ .ErrorLevel }};
13+
error_log stderr {{ .ErrorLevel }};`
1314

14-
events {
15-
worker_connections {{ .WorkerConnections }};
16-
}`
15+
const eventsTemplateText = `
16+
worker_connections {{ .WorkerConnections }};`
1717

1818
const mgmtTemplateText = `mgmt {
1919
{{- if .UsageEndpoint }}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /