diff --git a/internal/kube/adaptor/config_sync.go b/internal/kube/adaptor/config_sync.go index ccbc523e5..e9215717b 100644 --- a/internal/kube/adaptor/config_sync.go +++ b/internal/kube/adaptor/config_sync.go @@ -99,143 +99,20 @@ func (c *ConfigSync) configEvent(key string, configmap *corev1.ConfigMap) error if err := c.syncSslProfileCredentialsToDisk(desired.SslProfiles); err != nil { return err } - if err := c.syncSslProfilesToRouter(desired.SslProfiles); err != nil { + if err := qdr.SyncSslProfilesToRouter(c.agentPool, desired.SslProfiles); err != nil { return err } - if err := c.syncBridgeConfig(&desired.Bridges); err != nil { + if err := qdr.SyncBridgeConfig(c.agentPool, &desired.Bridges); err != nil { c.logger.Error("sync failed", slog.Any("error", err)) return err } - if err := c.syncRouterConfig(desired); err != nil { + if err := qdr.SyncRouterConfig(c.agentPool, desired, true); err != nil { c.logger.Error("sync failed", slog.Any("error", err)) return err } return nil } -func syncBridgeConfig(agent *qdr.Agent, desired *qdr.BridgeConfig) (bool, error) { - actual, err := agent.GetLocalBridgeConfig() - if err != nil { - return false, fmt.Errorf("Error retrieving bridges: %s", err) - } - differences := actual.Difference(desired) - if differences.Empty() { - return true, nil - } else { - if err = agent.UpdateLocalBridgeConfig(differences); err != nil { - return false, fmt.Errorf("Error syncing bridges: %s", err) - } - return false, nil - } -} - -func (c *ConfigSync) syncBridgeConfig(desired *qdr.BridgeConfig) error { - agent, err := c.agentPool.Get() - if err != nil { - return fmt.Errorf("Could not get management agent : %s", err) - } - var synced bool - - synced, err = syncBridgeConfig(agent, desired) - - c.agentPool.Put(agent) - if err != nil { - return fmt.Errorf("Error while syncing bridge config : %s", err) - } - if !synced { - return fmt.Errorf("Bridge config is not synchronised yet") - } - return nil -} - -func (c *ConfigSync) syncRouterConfig(desired *qdr.RouterConfig) error { - agent, err := c.agentPool.Get() - if err != nil { - return fmt.Errorf("Could not get management agent : %s", err) - } - - err = syncRouterConfig(agent, desired) - - c.agentPool.Put(agent) - if err != nil { - return fmt.Errorf("Error while syncing router config : %s", err) - } - return nil -} - -func syncRouterConfig(agent *qdr.Agent, desired *qdr.RouterConfig) error { - if err := syncConnectors(agent, desired); err != nil { - return err - } - if err := syncListeners(agent, desired); err != nil { - return err - } - return nil -} - -func syncConnectors(agent *qdr.Agent, desired *qdr.RouterConfig) error { - actual, err := agent.GetLocalConnectors() - if err != nil { - return fmt.Errorf("Error retrieving local connectors: %s", err) - } - - ignorePrefix := "auto-mesh" - if differences := qdr.ConnectorsDifference(actual, desired, &ignorePrefix); !differences.Empty() { - if err = agent.UpdateConnectorConfig(differences, true); err != nil { - return fmt.Errorf("Error syncing connectors: %s", err) - } - } - return nil -} - -func syncListeners(agent *qdr.Agent, desired *qdr.RouterConfig) error { - actual, err := agent.GetLocalListeners() - if err != nil { - return fmt.Errorf("Error retrieving local listeners: %s", err) - } - - if differences := qdr.ListenersDifference(qdr.FilterListeners(actual, qdr.IsNotProtectedListener), desired.GetMatchingListeners(qdr.IsNotProtectedListener)); !differences.Empty() { - if err := agent.UpdateListenerConfig(differences); err != nil { - return fmt.Errorf("Error syncing listeners: %s", err) - } - } - return nil -} - -func (c *ConfigSync) syncSslProfilesToRouter(desired map[string]qdr.SslProfile) error { - agent, err := c.agentPool.Get() - if err != nil { - return err - } - defer c.agentPool.Put(agent) - actual, err := agent.GetSslProfiles() - if err != nil { - return err - } - - for _, profile := range desired { - current, ok := actual[profile.Name] - if !ok { - if err := agent.CreateSslProfile(profile); err != nil { - return err - } - } - if current != profile { - if err := agent.UpdateSslProfile(profile); err != nil { - return err - } - } - } - for _, profile := range actual { - if _, ok := desired[profile.Name]; !ok { - if err := agent.Delete("io.skupper.router.sslProfile", profile.Name); err != nil { - return err - } - } - } - return nil -} - func (c *ConfigSync) syncSslProfileCredentialsToDisk(profiles map[string]qdr.SslProfile) error { delta := c.profileSyncer.Expect(profiles) return delta.Error() diff --git a/internal/nonkube/controller/system_adaptor.go b/internal/nonkube/controller/system_adaptor.go index 303714a25..927f73c47 100644 --- a/internal/nonkube/controller/system_adaptor.go +++ b/internal/nonkube/controller/system_adaptor.go @@ -2,7 +2,7 @@ package controller import ( "fmt" - "log" + "log/slog" "os" "path" @@ -13,6 +13,7 @@ import ( type SystemAdaptor struct { agentPool *qdr.AgentPool namespace string + logger *slog.Logger } func NewSystemAdaptor(namespace string, agentPool *qdr.AgentPool) *SystemAdaptor { @@ -20,6 +21,7 @@ func NewSystemAdaptor(namespace string, agentPool *qdr.AgentPool) *SystemAdaptor systemAdaptor := &SystemAdaptor{ namespace: namespace, agentPool: agentPool, + logger: slog.New(slog.Default().Handler()).With(slog.String("component", "system.controller.SystemAdaptor")), } return systemAdaptor } @@ -36,14 +38,14 @@ func (s *SystemAdaptor) syncWithRouter(desired *qdr.RouterConfig) error { return err } if err := qdr.SyncBridgeConfig(s.agentPool, &desired.Bridges); err != nil { - log.Printf("sync failed: %s", err) + s.logger.Error("SYSTEM_ADAPTOR: sync failed", slog.Any("error", err), slog.Any("namespace", s.namespace)) return err } //Do not double-check that certificates exist; it has been done by previous syncSslProfileCredentialsToDisk // Also, the paths included in the ssl profiles are relative to the router instead of the runtime directory if err := qdr.SyncRouterConfig(s.agentPool, desired, false); err != nil { - log.Printf("sync failed: %s", err) + s.logger.Error("SYSTEM_ADAPTOR: sync failed", slog.Any("error", err), slog.Any("namespace", s.namespace)) return err } return nil diff --git a/internal/qdr/sync_router_ops.go b/internal/qdr/sync_router_ops.go index 566bc45f8..1bac52f20 100644 --- a/internal/qdr/sync_router_ops.go +++ b/internal/qdr/sync_router_ops.go @@ -2,10 +2,9 @@ package qdr import ( "fmt" + "log" ) -//TODO: use this in config-sync - func SyncSslProfilesToRouter(agentPool *AgentPool, desired map[string]SslProfile) error { agent, err := agentPool.Get() @@ -56,7 +55,7 @@ func SyncBridgeConfig(agentPool *AgentPool, desired *BridgeConfig) error { return fmt.Errorf("Error while syncing bridge config : %s", err) } if !synced { - return fmt.Errorf("Bridge config is not synchronised yet") + log.Default().Println("Bridge config is not synchronised yet") } return nil }