@@ -22,13 +22,12 @@ import (
2222 "fmt"
2323 "regexp"
2424
25- "github.com/kcp-dev/logicalcluster/v3"
26-
2725 "github.com/kcp-dev/api-syncagent/internal/kcp"
2826
29- kcpdevv1alpha1 "github.com/kcp-dev/sdk/apis/apis/v1alpha1"
30- kcpdevcore "github.com/kcp-dev/sdk/apis/core"
31- kcpdevcorev1alpha1 "github.com/kcp-dev/sdk/apis/core/v1alpha1"
27+ "github.com/kcp-dev/logicalcluster/v3"
28+ kcpapisv1alpha1 "github.com/kcp-dev/sdk/apis/apis/v1alpha1"
29+ kcpcore "github.com/kcp-dev/sdk/apis/core"
30+ kcpcorev1alpha1 "github.com/kcp-dev/sdk/apis/core/v1alpha1"
3231
3332 "k8s.io/apimachinery/pkg/fields"
3433 "k8s.io/apimachinery/pkg/runtime"
@@ -60,18 +59,18 @@ func setupEndpointKcpCluster(endpoint *syncEndpoint) (cluster.Cluster, error) {
6059
6160 scheme := runtime .NewScheme ()
6261
63- if err := kcpdevv1alpha1 .AddToScheme (scheme ); err != nil {
64- return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpdevv1alpha1 .SchemeGroupVersion , err )
62+ if err := kcpapisv1alpha1 .AddToScheme (scheme ); err != nil {
63+ return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpapisv1alpha1 .SchemeGroupVersion , err )
6564 }
6665
67- if err := kcpdevcorev1alpha1 .AddToScheme (scheme ); err != nil {
68- return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpdevcorev1alpha1 .SchemeGroupVersion , err )
66+ if err := kcpcorev1alpha1 .AddToScheme (scheme ); err != nil {
67+ return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpcorev1alpha1 .SchemeGroupVersion , err )
6968 }
7069
7170 // RBAC in kcp might be very tight and might not allow to list/watch all objects;
7271 // restrict the cache's selectors accordingly so we can still make use of caching.
7372 byObject := map [ctrlruntimeclient.Object ]cache.ByObject {
74- & kcpdevv1alpha1 .APIExportEndpointSlice {}: {
73+ & kcpapisv1alpha1 .APIExportEndpointSlice {}: {
7574 Field : fields .SelectorFromSet (fields.Set {"metadata.name" : endpoint .EndpointSlice .Name }),
7675 },
7776 }
@@ -90,18 +89,18 @@ func setupEndpointKcpCluster(endpoint *syncEndpoint) (cluster.Cluster, error) {
9089func setupManagedKcpCluster (endpoint * syncEndpoint ) (cluster.Cluster , error ) {
9190 scheme := runtime .NewScheme ()
9291
93- if err := kcpdevv1alpha1 .AddToScheme (scheme ); err != nil {
94- return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpdevv1alpha1 .SchemeGroupVersion , err )
92+ if err := kcpapisv1alpha1 .AddToScheme (scheme ); err != nil {
93+ return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpapisv1alpha1 .SchemeGroupVersion , err )
9594 }
9695
97- if err := kcpdevcorev1alpha1 .AddToScheme (scheme ); err != nil {
98- return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpdevcorev1alpha1 .SchemeGroupVersion , err )
96+ if err := kcpcorev1alpha1 .AddToScheme (scheme ); err != nil {
97+ return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpcorev1alpha1 .SchemeGroupVersion , err )
9998 }
10099
101100 // RBAC in kcp might be very tight and might not allow to list/watch all objects;
102101 // restrict the cache's selectors accordingly so we can still make use of caching.
103102 byObject := map [ctrlruntimeclient.Object ]cache.ByObject {
104- & kcpdevv1alpha1 .APIExport {}: {
103+ & kcpapisv1alpha1 .APIExport {}: {
105104 Field : fields .SelectorFromSet (fields.Set {"metadata.name" : endpoint .APIExport .Name }),
106105 },
107106 }
@@ -145,11 +144,11 @@ type syncEndpoint struct {
145144func resolveSyncEndpoint (ctx context.Context , initialRestConfig * rest.Config , endpointSliceRef string , apiExportRef string ) (* syncEndpoint , error ) {
146145 // construct temporary, uncached client
147146 scheme := runtime .NewScheme ()
148- if err := kcpdevcorev1alpha1 .AddToScheme (scheme ); err != nil {
149- return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpdevcorev1alpha1 .SchemeGroupVersion , err )
147+ if err := kcpcorev1alpha1 .AddToScheme (scheme ); err != nil {
148+ return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpcorev1alpha1 .SchemeGroupVersion , err )
150149 }
151- if err := kcpdevv1alpha1 .AddToScheme (scheme ); err != nil {
152- return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpdevv1alpha1 .SchemeGroupVersion , err )
150+ if err := kcpapisv1alpha1 .AddToScheme (scheme ); err != nil {
151+ return nil , fmt .Errorf ("failed to register scheme %s: %w" , kcpapisv1alpha1 .SchemeGroupVersion , err )
153152 }
154153
155154 clientOpts := ctrlruntimeclient.Options {Scheme : scheme }
@@ -160,58 +159,38 @@ func resolveSyncEndpoint(ctx context.Context, initialRestConfig *rest.Config, en
160159
161160 se := & syncEndpoint {}
162161
163- // When an endpoint ref is given, both the APIExportEndpointSlice and the APIExport must exist.
164- if endpointSliceRef != "" {
165- endpointSlice , err := resolveAPIExportEndpointSlice (ctx , client , endpointSliceRef )
166- if err != nil {
167- return nil , fmt .Errorf ("failed to resolve APIExportEndpointSlice: %w" , err )
168- }
169- endpointSlice .Config = initialRestConfig
170-
171- // find the APIExport referenced not by the user (can't: both ref parameters to this function
172- // are mutually exclusive), but in the APIExportEndpointSlice.
173- restConfig , err := retargetRestConfig (initialRestConfig , endpointSlice .Spec .APIExport .Path )
174- if err != nil {
175- return nil , fmt .Errorf ("failed to re-target the given kubeconfig to cluster %q: %w" , endpointSlice .Spec .APIExport .Path , err )
176- }
177-
178- client , err := ctrlruntimeclient .New (restConfig , clientOpts )
179- if err != nil {
180- return nil , fmt .Errorf ("failed to create service reader: %w" , err )
181- }
162+ // First we find the APIExportEndpointSlice.
163+ endpointSlice , err := resolveAPIExportEndpointSlice (ctx , client , endpointSliceRef )
164+ if err != nil {
165+ return nil , fmt .Errorf ("failed to resolve APIExportEndpointSlice: %w" , err )
166+ }
167+ endpointSlice .Config = initialRestConfig
182168
183- apiExport , err := resolveAPIExport (ctx , client , endpointSlice .Spec .APIExport .Name )
184- if err != nil {
185- return nil , fmt .Errorf ("failed to resolve APIExport: %w" , err )
186- }
187- apiExport .Config = restConfig
188-
189- se .APIExport = apiExport
190- se .EndpointSlice = & endpointSlice
191- } else { // if an export ref is given, the endpoint slice is optional (for compat with kcp <0.28)
192- apiExport , err := resolveAPIExport (ctx , client , apiExportRef )
193- if err != nil {
194- return nil , fmt .Errorf ("failed to resolve APIExport: %w" , err )
195- }
196- apiExport .Config = initialRestConfig
169+ // Now we find the APIExport referenced in the APIExportEndpointSlice.
170+ restConfig , err := retargetRestConfig (initialRestConfig , endpointSlice .Spec .APIExport .Path )
171+ if err != nil {
172+ return nil , fmt .Errorf ("failed to re-target the given kubeconfig to cluster %q: %w" , endpointSlice .Spec .APIExport .Path , err )
173+ }
197174
198- se .APIExport = apiExport
175+ client , err = ctrlruntimeclient .New (restConfig , clientOpts )
176+ if err != nil {
177+ return nil , fmt .Errorf ("failed to create service reader: %w" , err )
178+ }
199179
200- // try to find an endpoint slice in the same workspace with the same name as the APIExport
201- endpointSlice , err := resolveAPIExportEndpointSlice (ctx , client , apiExportRef )
202- if ctrlruntimeclient .IgnoreNotFound (err ) != nil {
203- return nil , fmt .Errorf ("failed to resolve APIExportEndpointSlice: %w" , err )
204- } else if err == nil {
205- apiExport .Config = initialRestConfig
206- se .EndpointSlice = & endpointSlice
207- }
180+ apiExport , err := resolveAPIExport (ctx , client , endpointSlice .Spec .APIExport .Name )
181+ if err != nil {
182+ return nil , fmt .Errorf ("failed to resolve APIExport: %w" , err )
208183 }
184+ apiExport .Config = restConfig
185+
186+ se .APIExport = apiExport
187+ se .EndpointSlice = endpointSlice
209188
210189 return se , nil
211190}
212191
213192func resolveAPIExportEndpointSlice (ctx context.Context , client ctrlruntimeclient.Client , ref string ) (qualifiedAPIExportEndpointSlice , error ) {
214- endpointSlice := & kcpdevv1alpha1 .APIExportEndpointSlice {}
193+ endpointSlice := & kcpapisv1alpha1 .APIExportEndpointSlice {}
215194 key := types.NamespacedName {Name : ref }
216195 if err := client .Get (ctx , key , endpointSlice ); err != nil {
217196 return qualifiedAPIExportEndpointSlice {}, fmt .Errorf ("failed to get APIExportEndpointSlice %q: %w" , ref , err )
@@ -232,7 +211,7 @@ func resolveAPIExportEndpointSlice(ctx context.Context, client ctrlruntimeclient
232211}
233212
234213func resolveAPIExport (ctx context.Context , client ctrlruntimeclient.Client , ref string ) (qualifiedAPIExport , error ) {
235- apiExport := & kcpdevv1alpha1 .APIExport {}
214+ apiExport := & kcpapisv1alpha1 .APIExport {}
236215 key := types.NamespacedName {Name : ref }
237216 if err := client .Get (ctx , key , apiExport ); err != nil {
238217 return qualifiedAPIExport {}, fmt .Errorf ("failed to get APIExport %q: %w" , ref , err )
@@ -253,13 +232,13 @@ func resolveAPIExport(ctx context.Context, client ctrlruntimeclient.Client, ref
253232}
254233
255234func resolveCurrentCluster (ctx context.Context , client ctrlruntimeclient.Client ) (logicalcluster.Name , logicalcluster.Path , error ) {
256- lc := & kcpdevcorev1alpha1 .LogicalCluster {}
235+ lc := & kcpcorev1alpha1 .LogicalCluster {}
257236 if err := client .Get (ctx , types.NamespacedName {Name : kcp .IdentityClusterName }, lc ); err != nil {
258237 return "" , logicalcluster .None , fmt .Errorf ("failed to resolve current workspace: %w" , err )
259238 }
260239
261240 lcName := logicalcluster .From (lc )
262- lcPath := logicalcluster .NewPath (lc .Annotations [kcpdevcore .LogicalClusterPathAnnotationKey ])
241+ lcPath := logicalcluster .NewPath (lc .Annotations [kcpcore .LogicalClusterPathAnnotationKey ])
263242
264243 return lcName , lcPath , nil
265244}
0 commit comments