@@ -26,42 +26,53 @@ import (
26
26
"github.com/haproxytech/kubernetes-ingress/controller/store"
27
27
)
28
28
29
- type ErrorFile struct {
30
- files files
31
- updateAPI bool
29
+ type ErrorFiles struct {
30
+ files files
32
31
}
33
32
34
- func (h * ErrorFile ) Update (k store.K8s , cfg * config.ControllerCfg , api api.HAProxyClient ) (reload bool , err error ) {
33
+ func (h * ErrorFiles ) Update (k store.K8s , cfg * config.ControllerCfg , api api.HAProxyClient ) (reload bool , err error ) {
35
34
h .files .dir = cfg .Env .ErrFileDir
36
35
if k .ConfigMaps .Errorfiles == nil {
37
36
return false , nil
38
37
}
38
+ // Update Files
39
+ for code , content := range k .ConfigMaps .Errorfiles .Annotations {
40
+ logger .Error (h .writeFile (code , content ))
41
+ }
42
+ var apiInput []* models.Errorfile
43
+ apiInput , reload = h .refresh ()
44
+ // Update API
45
+ defaults , err := api .DefaultsGetConfiguration ()
46
+ if err != nil {
47
+ return false , err
48
+ }
49
+ defaults .ErrorFiles = apiInput
50
+ if err = api .DefaultsPushConfiguration (* defaults ); err != nil {
51
+ return false , err
52
+ }
53
+ return reload , nil
54
+ }
39
55
40
- for code , v := range k .ConfigMaps .Errorfiles .Annotations {
41
- _ , ok := h .files .data [code ]
42
- if ok {
43
- err = h .files .updateFile (code , v )
44
- if err != nil {
45
- logger .Errorf ("failed updating errorfile for code '%s': %s" , code , err )
46
- }
47
- continue
48
- }
56
+ func (h * ErrorFiles ) writeFile (code , content string ) (err error ) {
57
+ // Update file
58
+ if _ , ok := h .files .data [code ]; ! ok {
49
59
err = checkCode (code )
50
60
if err != nil {
51
- logger . Errorf ( "failed creating errorfile for code '%s': %s" , code , err )
61
+ return
52
62
}
53
- err = h .files .newFile (code , v )
54
- if err != nil {
55
- logger .Errorf ("failed creating errorfile for code '%s': %s" , code , err )
56
- }
57
- h .updateAPI = true
58
63
}
64
+ err = h .files .writeFile (code , content )
65
+ if err != nil {
66
+ err = fmt .Errorf ("failed writing errorfile for code '%s': %w" , code , err )
67
+ }
68
+ return
69
+ }
59
70
60
- var apiInput = []* models.Errorfile {}
71
+ func ( h * ErrorFiles ) refresh () ( result []* models.Errorfile , reload bool ) {
61
72
for code , f := range h .files .data {
62
73
if ! f .inUse {
63
- h . updateAPI = true
64
- err = h .files .deleteFile (code )
74
+ reload = true
75
+ err : = h .files .deleteFile (code )
65
76
if err != nil {
66
77
logger .Errorf ("failed deleting errorfile for code '%s': %s" , code , err )
67
78
}
@@ -72,28 +83,14 @@ func (h *ErrorFile) Update(k store.K8s, cfg *config.ControllerCfg, api api.HAPro
72
83
reload = true
73
84
}
74
85
c , _ := strconv .Atoi (code ) // code already checked in newCode
75
- apiInput = append (apiInput , & models.Errorfile {
86
+ result = append (result , & models.Errorfile {
76
87
Code : int64 (c ),
77
88
File : filepath .Join (h .files .dir , code ),
78
89
})
79
90
f .inUse = false
80
91
f .updated = false
81
92
}
82
- // HAProxy config update
83
- if h .updateAPI {
84
- defaults , err := api .DefaultsGetConfiguration ()
85
- if err != nil {
86
- logger .Error (err )
87
- return reload , err
88
- }
89
- defaults .ErrorFiles = apiInput
90
- if err = api .DefaultsPushConfiguration (* defaults ); err != nil {
91
- logger .Error (err )
92
- return reload , err
93
- }
94
- h .updateAPI = false
95
- }
96
- return reload , nil
93
+ return
97
94
}
98
95
99
96
func checkCode (code string ) error {
0 commit comments