Skip to content

Commit 007b1a9

Browse files
authored
feat(config): add ResourceAPIExportEndpointSliceName to ServiceConfig (#41)
* feat(config): add ResourceAPIExportEndpointSliceName to ServiceConfig fix(marketplace): update Marketplace function to accept dynamicClient refactor(storage): enhance setupVirtualWorkspaceClient with endpoint slice retrieval * chore: initialize proper ctx * chore: remove context.TODO() usage
1 parent 25d41d6 commit 007b1a9

File tree

5 files changed

+36
-20
lines changed

5 files changed

+36
-20
lines changed

cmd/start.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ var startCmd = &cobra.Command{
6060
return err
6161
}
6262

63+
ctx := cmd.Context()
64+
6365
rootAPIServerConfig.Extra.VirtualWorkspaces = []virtualrootapiserver.NamedVirtualWorkspace{
64-
contentconfiguration.BuildVirtualWorkspace(cfg, dynamicClient, clusterClient, contentconfiguration.VirtualWorkspaceBaseURL()),
65-
marketplace.BuildVirtualWorkspace(cfg, dynamicClient, clusterClient, marketplace.VirtualWorkspaceBaseURL()),
66+
contentconfiguration.BuildVirtualWorkspace(ctx, cfg, dynamicClient, clusterClient, contentconfiguration.VirtualWorkspaceBaseURL()),
67+
marketplace.BuildVirtualWorkspace(ctx, cfg, dynamicClient, clusterClient, marketplace.VirtualWorkspaceBaseURL()),
6668
}
6769

6870
rootAPIServerConfig.Generic.Authorization.Authorizer = kcpauthorization.NewVirtualWorkspaceAuthorizer(func() []virtualrootapiserver.NamedVirtualWorkspace {

pkg/config/config.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ type ServiceConfig struct {
2222
ResourceSchemaName string `mapstructure:"resource-schema-name" default:"v250704-6d57f16.contentconfigurations.ui.platform-mesh.io"`
2323
ResourceSchemaWorkspace string `mapstructure:"resource-schema-workspace" default:"root:openmfp-system"`
2424

25-
ProviderMetadataVirtualWorkspacePath string `mapstructure:"provider-metadata-virtual-workspace-path" default:"/services/apiexport/2pkfvpweuy7symvj/core.platform-mesh.io"`
26-
APIExportVirtualWorkspacePath string `mapstructure:"apiexport-virtual-workspace-path" default:"/services/apiexport/2pkfvpweuy7symvj/core.platform-mesh.io"`
25+
ResourceAPIExportEndpointSliceName string `mapstructure:"resource-apiexport-endpointslice-name"`
2726
}
2827

2928
// generateFlagSet generates a pflag.FlagSet from a struct based on its `mapstructure` tags.

pkg/contentconfiguration/server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func VirtualWorkspaceBaseURL() string {
3535
}
3636

3737
func BuildVirtualWorkspace(
38+
ctx context.Context,
3839
cfg config.ServiceConfig,
3940
dynamicClient dynamic.ClusterInterface,
4041
kcpClusterClient kcpclientset.ClusterInterface,
@@ -63,7 +64,7 @@ func BuildVirtualWorkspace(
6364
Group: "apis.kcp.io",
6465
Version: "v1alpha1",
6566
Resource: "apiresourceschemas",
66-
}).Get(context.TODO(), cfg.ResourceSchemaName, v1.GetOptions{})
67+
}).Get(ctx, cfg.ResourceSchemaName, v1.GetOptions{})
6768
if err != nil {
6869
return nil, err
6970
}

pkg/marketplace/server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func VirtualWorkspaceBaseURL() string {
3434
}
3535

3636
func BuildVirtualWorkspace(
37+
ctx context.Context,
3738
cfg config.ServiceConfig,
3839
dynamicClient dynamic.ClusterInterface,
3940
kcpClusterClient kcpclientset.ClusterInterface,
@@ -65,7 +66,7 @@ func BuildVirtualWorkspace(
6566
return nil, err
6667
}
6768

68-
marketplaceFilter, err := storage.Marketplace(cfg)
69+
marketplaceFilter, err := storage.Marketplace(ctx, cfg, dynamicClient)
6970
if err != nil {
7071
return nil, err
7172
}

pkg/storage/filter.go

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66
"net/url"
7-
"path"
87
"slices"
98
"strings"
109

@@ -138,7 +137,23 @@ func ContentConfigurationLookup(client dynamic.ClusterInterface, cfg config.Serv
138137
})
139138
}
140139

141-
func setupVirtualWorkspaceClient(kubeconfigPath, serverURL, virtualWorkspacePath string) (*dynamic.ClusterClientset, error) {
140+
func setupVirtualWorkspaceClient(ctx context.Context, dynamicClient dynamic.ClusterInterface, kubeconfigPath, serverURL, endpointSliceWorkspace, endpointSliceName string) (*dynamic.ClusterClientset, error) {
141+
142+
res, err := dynamicClient.Cluster(logicalcluster.NewPath(endpointSliceWorkspace)).Resource(schema.GroupVersionResource{
143+
Group: "apis.kcp.io",
144+
Version: "v1alpha1",
145+
Resource: "apiexportendpointslices",
146+
}).Get(ctx, endpointSliceName, metav1.GetOptions{})
147+
if err != nil {
148+
return nil, err
149+
}
150+
151+
var eps apisv1alpha1.APIExportEndpointSlice
152+
err = runtime.DefaultUnstructuredConverter.FromUnstructured(res.Object, &eps)
153+
if err != nil {
154+
return nil, err
155+
}
156+
142157
clientCfg, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
143158
if err != nil {
144159
return nil, err
@@ -150,22 +165,20 @@ func setupVirtualWorkspaceClient(kubeconfigPath, serverURL, virtualWorkspacePath
150165
clientCfg.Host = serverURL
151166
}
152167

168+
epsURL, _ := url.Parse(eps.Status.APIExportEndpoints[0].URL)
169+
153170
parsed, _ := url.Parse(clientCfg.Host)
154-
pathSegments := strings.Split(virtualWorkspacePath, "/")
155-
parsed.Path = path.Join(pathSegments...)
171+
parsed.Path = epsURL.Path
156172

157173
clientCfg.Host = parsed.String()
158174

175+
fmt.Println("Using APIExportEndpointSlice URL:", clientCfg.Host)
176+
159177
return dynamic.NewForConfig(clientCfg)
160178
}
161179

162-
func Marketplace(cfg config.ServiceConfig) (forwardingregistry.StorageWrapper, error) {
163-
providerMetadataClient, err := setupVirtualWorkspaceClient(cfg.Kubeconfig, cfg.ServerURL, cfg.ProviderMetadataVirtualWorkspacePath)
164-
if err != nil {
165-
return nil, err
166-
}
167-
168-
apiExportClient, err := setupVirtualWorkspaceClient(cfg.Kubeconfig, cfg.ServerURL, cfg.APIExportVirtualWorkspacePath)
180+
func Marketplace(ctx context.Context, cfg config.ServiceConfig, dynamicClient dynamic.ClusterInterface) (forwardingregistry.StorageWrapper, error) {
181+
resourceClient, err := setupVirtualWorkspaceClient(ctx, dynamicClient, cfg.Kubeconfig, cfg.ServerURL, cfg.ResourceSchemaWorkspace, cfg.ResourceAPIExportEndpointSliceName)
169182
if err != nil {
170183
return nil, err
171184
}
@@ -176,7 +189,7 @@ func Marketplace(cfg config.ServiceConfig) (forwardingregistry.StorageWrapper, e
176189
var installedAPIBindings apisv1alpha1.APIBindingList
177190
cluster := genericapirequest.ClusterFrom(ctx)
178191

179-
rawBindings, err := apiExportClient.Cluster(cluster.Name.Path()).
192+
rawBindings, err := resourceClient.Cluster(cluster.Name.Path()).
180193
Resource(apisv1alpha1.SchemeGroupVersion.WithResource("apibindings")).
181194
List(ctx, metav1.ListOptions{})
182195
if err != nil {
@@ -197,7 +210,7 @@ func Marketplace(cfg config.ServiceConfig) (forwardingregistry.StorageWrapper, e
197210
return nil, err
198211
}
199212

200-
providers, err := providerMetadataClient.Cluster(logicalcluster.Wildcard).
213+
providers, err := resourceClient.Cluster(logicalcluster.Wildcard).
201214
Resource(extensionapiv1alpha1.GroupVersion.WithResource("providermetadatas")).
202215
List(ctx, metav1.ListOptions{})
203216
if err != nil {
@@ -215,7 +228,7 @@ func Marketplace(cfg config.ServiceConfig) (forwardingregistry.StorageWrapper, e
215228
return err
216229
}
217230

218-
rawExports, err := apiExportClient.Cluster(logicalcluster.Wildcard).Resource(
231+
rawExports, err := resourceClient.Cluster(logicalcluster.Wildcard).Resource(
219232
schema.GroupVersionResource{
220233
Group: apisv1alpha1.SchemeGroupVersion.Group,
221234
Version: apisv1alpha1.SchemeGroupVersion.Version,

0 commit comments

Comments
 (0)