github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/connection/config_map.go (about) 1 package connection 2 3 import ( 4 typehelpers "github.com/turbot/go-kit/types" 5 sdkproto "github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto" 6 "github.com/turbot/steampipe/pkg/steampipeconfig/modconfig" 7 ) 8 9 type ConnectionConfigMap map[string]*sdkproto.ConnectionConfig 10 11 // NewConnectionConfigMap creates a map of sdkproto.ConnectionConfig keyed by connection name 12 // NOTE: connections in error are EXCLUDED 13 func NewConnectionConfigMap(connectionMap map[string]*modconfig.Connection) ConnectionConfigMap { 14 configMap := make(ConnectionConfigMap) 15 for k, v := range connectionMap { 16 if v.Error != nil { 17 continue 18 } 19 20 configMap[k] = &sdkproto.ConnectionConfig{ 21 Connection: v.Name, 22 Plugin: v.Plugin, 23 PluginShortName: v.PluginAlias, 24 Config: v.Config, 25 ChildConnections: v.GetResolveConnectionNames(), 26 PluginInstance: typehelpers.SafeString(v.PluginInstance), 27 } 28 } 29 30 return configMap 31 } 32 33 func (m ConnectionConfigMap) Diff(otherMap ConnectionConfigMap) (addedConnections, deletedConnections, changedConnections map[string][]*sdkproto.ConnectionConfig) { 34 // results are maps of connections keyed by plugin instance 35 addedConnections = make(map[string][]*sdkproto.ConnectionConfig) 36 deletedConnections = make(map[string][]*sdkproto.ConnectionConfig) 37 changedConnections = make(map[string][]*sdkproto.ConnectionConfig) 38 39 for name, connection := range m { 40 if otherConnection, ok := otherMap[name]; !ok { 41 deletedConnections[connection.PluginInstance] = append(deletedConnections[connection.PluginInstance], connection) 42 } else { 43 // check for changes 44 45 // special case - if the plugin has changed, treat this as a deletion and a re-add 46 if connection.PluginInstance != otherConnection.PluginInstance { 47 addedConnections[otherConnection.PluginInstance] = append(addedConnections[otherConnection.PluginInstance], otherConnection) 48 deletedConnections[connection.PluginInstance] = append(deletedConnections[connection.PluginInstance], connection) 49 } else { 50 if !connection.Equals(otherConnection) { 51 changedConnections[connection.PluginInstance] = append(changedConnections[connection.PluginInstance], otherConnection) 52 } 53 } 54 } 55 } 56 57 for otherName, otherConnection := range otherMap { 58 if _, ok := m[otherName]; !ok { 59 addedConnections[otherConnection.PluginInstance] = append(addedConnections[otherConnection.PluginInstance], otherConnection) 60 } 61 } 62 63 return 64 }