@@ -18,6 +18,7 @@ package cluster
1818
1919import (
2020 "context"
21+ "sort"
2122 "strings"
2223
2324 "github.com/aws/aws-sdk-go/aws"
@@ -159,8 +160,8 @@ func (u *hooks) postObserve(ctx context.Context, cr *svcapitypes.Cluster, obj *s
159160 obs .ConnectionDetails = managed.ConnectionDetails {
160161 // see: https://docs.aws.amazon.com/msk/latest/developerguide/client-access.html
161162 // no endpoint informations available in DescribeClusterOutput only endpoints for zookeeperPlain/Tls
162- "zookeeperEndpointPlain" : []byte (pointer .StringValue (obj .ClusterInfo .ZookeeperConnectString )),
163- "zookeeperEndpointTls" : []byte (pointer .StringValue (obj .ClusterInfo .ZookeeperConnectStringTls )),
163+ "zookeeperEndpointPlain" : []byte (sortBootstrapBrokerString ( pointer .StringValue (obj .ClusterInfo .ZookeeperConnectString ) )),
164+ "zookeeperEndpointTls" : []byte (sortBootstrapBrokerString ( pointer .StringValue (obj .ClusterInfo .ZookeeperConnectStringTls ) )),
164165 }
165166
166167 switch pointer .StringValue (obj .ClusterInfo .State ) {
@@ -174,13 +175,13 @@ func (u *hooks) postObserve(ctx context.Context, cr *svcapitypes.Cluster, obj *s
174175 if err != nil {
175176 return obs , errorutils .Wrap (err , errGetBootstrapBrokers )
176177 }
177- obs .ConnectionDetails ["clusterEndpointPlain" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerString ))
178- obs .ConnectionDetails ["clusterEndpointTls" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerStringTls ))
179- obs .ConnectionDetails ["clusterEndpointIAM" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerStringSaslIam ))
180- obs .ConnectionDetails ["clusterEndpointScram" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerStringSaslScram ))
181- obs .ConnectionDetails ["clusterEndpointTlsPublic" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerStringPublicTls ))
182- obs .ConnectionDetails ["clusterEndpointIAMPublic" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerStringPublicSaslIam ))
183- obs .ConnectionDetails ["clusterEndpointScramPublic" ] = []byte (pointer .StringValue (endpoints .BootstrapBrokerStringPublicSaslScram ))
178+ obs .ConnectionDetails ["clusterEndpointPlain" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerString ) ))
179+ obs .ConnectionDetails ["clusterEndpointTls" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerStringTls ) ))
180+ obs .ConnectionDetails ["clusterEndpointIAM" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerStringSaslIam ) ))
181+ obs .ConnectionDetails ["clusterEndpointScram" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerStringSaslScram ) ))
182+ obs .ConnectionDetails ["clusterEndpointTlsPublic" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerStringPublicTls ) ))
183+ obs .ConnectionDetails ["clusterEndpointIAMPublic" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerStringPublicSaslIam ) ))
184+ obs .ConnectionDetails ["clusterEndpointScramPublic" ] = []byte (sortBootstrapBrokerString ( pointer .StringValue (endpoints .BootstrapBrokerStringPublicSaslScram ) ))
184185
185186 case string (svcapitypes .ClusterState_CREATING ):
186187 cr .SetConditions (xpv1 .Creating ())
@@ -1192,3 +1193,17 @@ func generateOpenMonitorinInput(wanted *svcapitypes.OpenMonitoringInfo) *svcsdk.
11921193 return output
11931194
11941195}
1196+
1197+ // sortBootstrapBrokerString splits the provided string at ",",
1198+ // trims potential spaces, sorts the resulting list of endpoints
1199+ // and returns this a consistent string value with the endpoints joined by "," again.
1200+ func sortBootstrapBrokerString (endpoints string ) string {
1201+ endpointList := strings .Split (endpoints , "," )
1202+ sort .Strings (endpointList )
1203+ // for potential edge case, where someday AWS string contains spaces
1204+ for i , endpoint := range endpointList {
1205+ endpointList [i ] = strings .TrimSpace (endpoint )
1206+ }
1207+ sort .Strings (endpointList )
1208+ return strings .Join (endpointList , "," )
1209+ }
0 commit comments