@@ -13,13 +13,14 @@ import (
1313 "github.com/castai/logging"
1414)
1515
16- type VPCStateControllerConfig struct {
17- Enabled bool `json:"enabled"`
18- UseZoneID bool `json:"useZoneID"`
19- NetworkName string `json:"networkName"`
20- RefreshInterval time.Duration `json:"refreshInterval"`
21- CacheSize uint32 `json:"cacheSize"`
22- StaticCIDRsFile string `json:"staticCIDRsFile"` // Path to YAML file
16+ type NetworkStateControllerConfig struct {
17+ Enabled bool `json:"enabled"`
18+ UseZoneID bool `json:"useZoneID"`
19+ NetworkName string `json:"networkName"`
20+ NetworkRefreshInterval time.Duration `json:"networkRefreshInterval"`
21+ PublicCIDRsRefreshInterval time.Duration `json:"publicCIDRsRefreshInterval"`
22+ CacheSize uint32 `json:"cacheSize"`
23+ StaticCIDRsFile string `json:"staticCIDRsFile"` // Path to YAML file
2324}
2425
2526// StaticCIDRMapping represents a manual CIDR to zone/region/service mapping.
@@ -38,9 +39,9 @@ type cloudProvider interface {
3839 RefreshNetworkState (ctx context.Context , network string ) error
3940}
4041
41- func NewVPCStateController (log * logging.Logger , cfg VPCStateControllerConfig , cloudProvider cloudProvider , vpcIndex * kube.VPCIndex ) * VPCStateController {
42- if cfg .RefreshInterval == 0 {
43- cfg .RefreshInterval = 1 * time .Hour
42+ func NewVPCStateController (log * logging.Logger , cfg NetworkStateControllerConfig , cloudProvider cloudProvider , vpcIndex * kube.NetworkIndex ) * VPCStateController {
43+ if cfg .NetworkRefreshInterval == 0 {
44+ cfg .NetworkRefreshInterval = 1 * time .Hour
4445 }
4546 return & VPCStateController {
4647 log : log .WithField ("component" , "vpc_state_controller" ),
@@ -52,9 +53,9 @@ func NewVPCStateController(log *logging.Logger, cfg VPCStateControllerConfig, cl
5253
5354type VPCStateController struct {
5455 log * logging.Logger
55- cfg VPCStateControllerConfig
56+ cfg NetworkStateControllerConfig
5657 cloudProvider cloudProvider
57- vpcIndex * kube.VPCIndex
58+ vpcIndex * kube.NetworkIndex
5859}
5960
6061func (c * VPCStateController ) Run (ctx context.Context ) error {
@@ -63,34 +64,29 @@ func (c *VPCStateController) Run(ctx context.Context) error {
6364
6465 if err := c .fetchInitialNetworkState (ctx , c .vpcIndex ); err != nil {
6566 c .log .Errorf ("failed to fetch initial VPC state: %v" , err )
66- return nil
67+ return err
6768 }
6869
6970 return c .runRefreshLoop (ctx , c .vpcIndex )
7071}
7172
72- func (c * VPCStateController ) fetchInitialNetworkState (ctx context.Context , vpcIndex * kube.VPCIndex ) error {
73+ func (c * VPCStateController ) fetchInitialNetworkState (ctx context.Context , vpcIndex * kube.NetworkIndex ) error {
7374 backoff := 2 * time .Second
7475 maxRetries := 5
7576
7677 for i := 0 ; i < maxRetries ; i ++ {
77- err := c .cloudProvider .RefreshNetworkState (ctx , c .cfg .NetworkName )
78- if err != nil {
79- c .log .Errorf ("VPC state refresh failed: %v" , err )
80- continue
81- }
82- state , err := c .cloudProvider .GetNetworkState (ctx )
83- if err == nil {
84- if err := vpcIndex .Update (state ); err != nil {
85- c .log .Errorf ("failed to update VPC index: %v" , err )
86- } else {
87- c .log .Info ("initial VPC state loaded successfully" )
88- return nil
89- }
78+ if err := c .cloudProvider .RefreshNetworkState (ctx , c .cfg .NetworkName ); err != nil {
79+ c .log .Warnf ("VPC state refresh failed (attempt %d/%d): %v" , i + 1 , maxRetries , err )
80+ } else if state , err := c .cloudProvider .GetNetworkState (ctx ); err != nil {
81+ c .log .Warnf ("VPC state fetch failed (attempt %d/%d): %v" , i + 1 , maxRetries , err )
82+ } else if err := vpcIndex .Update (state ); err != nil {
83+ c .log .Errorf ("failed to update VPC index: %v" , err )
84+ } else {
85+ c .log .Info ("initial VPC state loaded successfully" )
86+ return nil
9087 }
9188
9289 if i < maxRetries - 1 {
93- c .log .Warnf ("VPC state fetch attempt %d/%d failed: %v, retrying in %v" , i + 1 , maxRetries , err , backoff )
9490 select {
9591 case <- ctx .Done ():
9692 return ctx .Err ()
@@ -103,15 +99,14 @@ func (c *VPCStateController) fetchInitialNetworkState(ctx context.Context, vpcIn
10399 }
104100 }
105101
106- c .log .Errorf ("failed to fetch initial VPC state after %d attempts" , maxRetries )
107- return nil
102+ return fmt .Errorf ("failed to fetch initial VPC state after %d attempts" , maxRetries )
108103}
109104
110- func (c * VPCStateController ) runRefreshLoop (ctx context.Context , vpcIndex * kube.VPCIndex ) error {
111- ticker := time .NewTicker (c .cfg .RefreshInterval )
105+ func (c * VPCStateController ) runRefreshLoop (ctx context.Context , vpcIndex * kube.NetworkIndex ) error {
106+ ticker := time .NewTicker (c .cfg .NetworkRefreshInterval )
112107 defer ticker .Stop ()
113108
114- c .log .Infof ("starting VPC state refresh (interval: %v)" , c .cfg .RefreshInterval )
109+ c .log .Infof ("starting VPC state refresh (interval: %v)" , c .cfg .NetworkRefreshInterval )
115110
116111 for {
117112 select {
@@ -135,13 +130,13 @@ func (c *VPCStateController) runRefreshLoop(ctx context.Context, vpcIndex *kube.
135130 continue
136131 }
137132
138- c .log .Debug ("VPC state refreshed successfully" )
133+ c .log .Infof ("VPC state refreshed successfully" )
139134 }
140135 }
141136}
142137
143138// LoadStaticCIDRsFromFile loads static CIDRs from a YAML file.
144- func LoadStaticCIDRsFromFile (log * logging.Logger , path string , vpcIndex * kube.VPCIndex ) error {
139+ func LoadStaticCIDRsFromFile (log * logging.Logger , path string , vpcIndex * kube.NetworkIndex ) error {
145140 if path == "" {
146141 return nil
147142 }
@@ -164,7 +159,7 @@ func LoadStaticCIDRsFromFile(log *logging.Logger, path string, vpcIndex *kube.VP
164159 return vpcIndex .AddStaticCIDRs (entries )
165160}
166161
167- // convertStaticMappingsToEntries converts config mappings to VPCIndex entries.
162+ // convertStaticMappingsToEntries converts config mappings to NetworkIndex entries.
168163func convertStaticMappingsToEntries (mappings []StaticCIDRMapping ) []kube.StaticCIDREntry {
169164 entries := make ([]kube.StaticCIDREntry , len (mappings ))
170165 for i , m := range mappings {
0 commit comments