Skip to content

Commit 1198fff

Browse files
committed
MEDIUM: CR: Add LogTargets to Global CR
1 parent 4d676a3 commit 1198fff

File tree

12 files changed

+127
-44
lines changed

12 files changed

+127
-44
lines changed

controller/annotations/annotations.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func Global(g *models.Global, l *models.LogTargets) []Annotation {
2626
NewFrontendCfgSnippet("frontend-config-snippet", "http"),
2727
NewFrontendCfgSnippet("frontend-config-snippet", "https"),
2828
NewFrontendCfgSnippet("stats-config-snippet", "stats"),
29-
global.NewSyslogServers("syslog-server", g, l),
29+
global.NewSyslogServers("syslog-server", l),
3030
global.NewNbthread("nbthread", g),
3131
global.NewMaxconn("maxconn", g),
3232
global.NewHardStopAfter("hard-stop-after", g),

controller/annotations/global/syslogServer.go

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@ import (
1414

1515
type SyslogServers struct {
1616
name string
17-
global *models.Global
1817
logTargets *models.LogTargets
1918
stdout bool
2019
}
2120

22-
func NewSyslogServers(n string, g *models.Global, l *models.LogTargets) *SyslogServers {
23-
return &SyslogServers{name: n, global: g, logTargets: l}
21+
func NewSyslogServers(n string, l *models.LogTargets) *SyslogServers {
22+
return &SyslogServers{name: n, logTargets: l}
2423
}
2524

2625
func (a *SyslogServers) GetName() string {
@@ -91,18 +90,5 @@ func (a *SyslogServers) Process(k store.K8s, annotations ...map[string]string) e
9190
}
9291
*(a.logTargets) = append(*(a.logTargets), &logTarget)
9392
}
94-
95-
// stdout logging won't work with daemon mode
96-
var daemonMode bool
97-
if a.global.Daemon == "enabled" {
98-
daemonMode = true
99-
}
100-
if a.stdout {
101-
if daemonMode {
102-
a.global.Daemon = "disabled"
103-
}
104-
} else if !daemonMode {
105-
a.global.Daemon = "enabled"
106-
}
10793
return nil
10894
}

controller/configuration/defaults.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
// SetGlobal will set default values for Global section config.
10-
func SetGlobal(global *models.Global, env Env) {
10+
func SetGlobal(global *models.Global, logTargets *models.LogTargets, env Env) {
1111
// Enforced values
1212
global.MasterWorker = true
1313
global.Pidfile = env.PIDFile
@@ -40,6 +40,22 @@ func SetGlobal(global *models.Global, env Env) {
4040
if global.SslDefaultBindOptions == "" {
4141
global.SslDefaultBindOptions = "no-sslv3 no-tls-tickets no-tlsv10"
4242
}
43+
if len(*logTargets) == 0 {
44+
*logTargets = []*models.LogTarget{{
45+
Index: utils.PtrInt64(0),
46+
Address: "127.0.0.1",
47+
Facility: "local0",
48+
Level: "notice",
49+
}}
50+
} else {
51+
for i, v := range *logTargets {
52+
v.Index = utils.PtrInt64(int64(i))
53+
if v.Address == "stdout" {
54+
global.Daemon = ""
55+
break
56+
}
57+
}
58+
}
4359
}
4460

4561
// SetDefaults will set default values for Defaults section config.

controller/crs.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ func (c GlobalCR) GetInformer(eventChan chan SyncDataEvent, factory informers.Sh
7070
func (c GlobalCR) ProcessEvent(s *store.K8s, job SyncDataEvent) bool {
7171
if job.Data == nil {
7272
s.CR.Global = nil
73+
s.CR.LogTargets = nil
7374
return true
7475
}
7576
data, ok := job.Data.(*corev1alpha1.Global)
@@ -78,6 +79,7 @@ func (c GlobalCR) ProcessEvent(s *store.K8s, job SyncDataEvent) bool {
7879
return false
7980
}
8081
s.CR.Global = data.Spec.Config
82+
s.CR.LogTargets = data.Spec.LogTargets
8183
return true
8284
}
8385

controller/global.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func (c *HAProxyController) globalCfg() (reload, restart bool) {
5252
newGlobal = &models.Global{}
5353
if c.Store.CR.Global != nil {
5454
newGlobal = c.Store.CR.Global
55+
newLg = c.Store.CR.LogTargets
5556
} else {
5657
for _, a := range annotations.Global(newGlobal, &newLg) {
5758
err = a.Process(c.Store, c.Store.ConfigMaps.Main.Annotations)
@@ -60,7 +61,7 @@ func (c *HAProxyController) globalCfg() (reload, restart bool) {
6061
}
6162
}
6263
}
63-
configuration.SetGlobal(newGlobal, c.Cfg.Env)
64+
configuration.SetGlobal(newGlobal, &newLg, c.Cfg.Env)
6465
updated = deep.Equal(newGlobal, global)
6566
if len(updated) != 0 {
6667
logger.Error(c.Client.GlobalPushConfiguration(*newGlobal))
@@ -69,9 +70,8 @@ func (c *HAProxyController) globalCfg() (reload, restart bool) {
6970
}
7071
updated = deep.Equal(newLg, lg)
7172
if len(updated) != 0 {
72-
c.Client.GlobalDeleteLogTargets()
73-
logger.Error(c.Client.GlobalCreateLogTargets(newLg))
74-
logger.Debugf("Syslog servers updated: %s\nRestart required", updated)
73+
logger.Error(c.Client.GlobalPushLogTargets(newLg))
74+
logger.Debugf("Global log targets updated: %s\nRestart required", updated)
7575
restart = true
7676
}
7777
updatedSnipp, errSnipp := annotations.UpdateGlobalCfgSnippet(c.Client)

controller/handler/globalcfg.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,17 @@ type GlobalCfg struct {
2727

2828
func (h GlobalCfg) Update(k store.K8s, cfg *config.ControllerCfg, api api.HAProxyClient) (reload bool, err error) {
2929
global := &models.Global{}
30-
defaults := &models.Defaults{}
31-
config.SetGlobal(global, cfg.Env)
30+
logTargets := &models.LogTargets{}
31+
config.SetGlobal(global, logTargets, cfg.Env)
3232
err = api.GlobalPushConfiguration(*global)
3333
if err != nil {
3434
return
3535
}
36+
err = api.GlobalPushLogTargets(*logTargets)
37+
if err != nil {
38+
return
39+
}
40+
defaults := &models.Defaults{}
3641
config.SetDefaults(defaults)
3742
err = api.DefaultsPushConfiguration(*defaults)
3843
if err != nil {

controller/haproxy/api/api.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ type HAProxyClient interface {
4646
FrontendTCPRequestRuleCreate(frontend string, rule models.TCPRequestRule, ingressACL string) error
4747
FrontendRuleDeleteAll(frontend string)
4848
GlobalGetLogTargets() (models.LogTargets, error)
49-
GlobalCreateLogTargets(models.LogTargets) error
50-
GlobalDeleteLogTargets()
49+
GlobalPushLogTargets(models.LogTargets) error
5150
GlobalGetConfiguration() (*models.Global, error)
5251
GlobalPushConfiguration(models.Global) error
5352
GlobalCfgSnippet(snippet []string) error

controller/haproxy/api/global.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"github.com/haproxytech/client-native/v2/models"
77
parser "github.com/haproxytech/config-parser/v4"
88
"github.com/haproxytech/config-parser/v4/types"
9+
10+
"github.com/haproxytech/kubernetes-ingress/controller/utils"
911
)
1012

1113
func (c *clientNative) DefaultsGetConfiguration() (defaults *models.Defaults, err error) {
@@ -50,9 +52,15 @@ func (c *clientNative) GlobalGetLogTargets() (lg models.LogTargets, err error) {
5052
return
5153
}
5254

53-
func (c *clientNative) GlobalCreateLogTargets(logTargets models.LogTargets) error {
55+
func (c *clientNative) GlobalPushLogTargets(logTargets models.LogTargets) error {
5456
var err error
5557
c.activeTransactionHasChanges = true
58+
for {
59+
err = c.nativeAPI.Configuration.DeleteLogTarget(0, "global", parser.GlobalSectionName, c.activeTransaction, 0)
60+
if err != nil {
61+
break
62+
}
63+
}
5664
for _, log := range logTargets {
5765
err = c.nativeAPI.Configuration.CreateLogTarget(string(parser.Global), parser.GlobalSectionName, log, c.activeTransaction, 0)
5866
if err != nil {
@@ -62,16 +70,6 @@ func (c *clientNative) GlobalCreateLogTargets(logTargets models.LogTargets) erro
6270
return nil
6371
}
6472

65-
func (c *clientNative) GlobalDeleteLogTargets() {
66-
c.activeTransactionHasChanges = true
67-
for {
68-
err := c.nativeAPI.Configuration.DeleteLogTarget(0, "global", parser.GlobalSectionName, c.activeTransaction, 0)
69-
if err != nil {
70-
break
71-
}
72-
}
73-
}
74-
7573
func (c *clientNative) GlobalGetConfiguration() (*models.Global, error) {
7674
_, global, err := c.nativeAPI.Configuration.GetGlobalConfiguration(c.activeTransaction)
7775
if err != nil {

controller/store/store.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ type K8s struct {
3232
}
3333

3434
type CustomResources struct {
35-
Global *models.Global
36-
Defaults *models.Defaults
35+
Global *models.Global
36+
Defaults *models.Defaults
37+
LogTargets models.LogTargets
3738
}
3839

3940
type NamespacesWatch struct {

crs/api/core/v1alpha1/global.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,23 @@ type Global struct {
3333

3434
// GlobalSpec defines the desired state of Global
3535
type GlobalSpec struct {
36-
Config *models.Global `json:"config"`
36+
Config *models.Global `json:"config"`
37+
LogTargets models.LogTargets `json:"log_targets"`
3738
}
3839

3940
// DeepCopyInto deepcopying the receiver into out. in must be non-nil.
4041
func (in *GlobalSpec) DeepCopyInto(out *GlobalSpec) {
41-
*out = *in
4242
if in.Config != nil {
4343
b, _ := in.Config.MarshalBinary()
4444
_ = out.Config.UnmarshalBinary(b)
4545
}
46+
if in.LogTargets != nil {
47+
out.LogTargets = make([]*models.LogTarget, len(in.LogTargets))
48+
for i, v := range in.LogTargets {
49+
b, _ := v.MarshalBinary()
50+
_ = out.LogTargets[i].UnmarshalBinary(b)
51+
}
52+
}
4653
}
4754

4855
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

0 commit comments

Comments
 (0)