@@ -26,42 +26,53 @@ import (
2626 "github.com/haproxytech/kubernetes-ingress/controller/store"
2727)
2828
29- type ErrorFile struct {
30- files files
31- updateAPI bool
29+ type ErrorFiles struct {
30+ files files
3231}
3332
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 ) {
3534 h .files .dir = cfg .Env .ErrFileDir
3635 if k .ConfigMaps .Errorfiles == nil {
3736 return false , nil
3837 }
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+ }
3955
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 {
4959 err = checkCode (code )
5060 if err != nil {
51- logger . Errorf ( "failed creating errorfile for code '%s': %s" , code , err )
61+ return
5262 }
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
5863 }
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+ }
5970
60- var apiInput = []* models.Errorfile {}
71+ func ( h * ErrorFiles ) refresh () ( result []* models.Errorfile , reload bool ) {
6172 for code , f := range h .files .data {
6273 if ! f .inUse {
63- h . updateAPI = true
64- err = h .files .deleteFile (code )
74+ reload = true
75+ err : = h .files .deleteFile (code )
6576 if err != nil {
6677 logger .Errorf ("failed deleting errorfile for code '%s': %s" , code , err )
6778 }
@@ -72,28 +83,14 @@ func (h *ErrorFile) Update(k store.K8s, cfg *config.ControllerCfg, api api.HAPro
7283 reload = true
7384 }
7485 c , _ := strconv .Atoi (code ) // code already checked in newCode
75- apiInput = append (apiInput , & models.Errorfile {
86+ result = append (result , & models.Errorfile {
7687 Code : int64 (c ),
7788 File : filepath .Join (h .files .dir , code ),
7889 })
7990 f .inUse = false
8091 f .updated = false
8192 }
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
9794}
9895
9996func checkCode (code string ) error {
0 commit comments