Skip to content

Commit 7f78b59

Browse files
authored
feat: use pathaware provider and retrieve orgs client via manager (#239)
On-behalf-of: @SAP <simon@simontesar.com>
1 parent 1925f54 commit 7f78b59

File tree

3 files changed

+32
-54
lines changed

3 files changed

+32
-54
lines changed

cmd/serve.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
kcpclientset "github.com/kcp-dev/sdk/client/clientset/versioned/cluster"
3535

3636
"github.com/kcp-dev/multicluster-provider/apiexport"
37+
pathaware "github.com/kcp-dev/multicluster-provider/path-aware"
3738
)
3839

3940
var serverCfg *config.Config
@@ -56,7 +57,7 @@ func NewServeCmd() *cobra.Command {
5657
endpointSliceName := serverCfg.APIExportEndpointSliceName
5758
klog.InfoS("using endpoint slice name", "name", endpointSliceName)
5859

59-
provider, err := apiexport.New(restCfg, endpointSliceName, apiexport.Options{
60+
provider, err := pathaware.New(restCfg, endpointSliceName, apiexport.Options{
6061
Scheme: scheme,
6162
})
6263
if err != nil {
@@ -127,7 +128,7 @@ func NewServeCmd() *cobra.Command {
127128
orgsClusterID := logicalcluster.From(orgsCluster)
128129
klog.InfoS("found orgs cluster", "name", orgsCluster.Name, "cluster", orgsClusterID.String())
129130

130-
clusterCache, err := clustercache.New(restCfg)
131+
clusterCache, err := clustercache.New(mgr)
131132
if err != nil {
132133
klog.Exit(err, "failed to create cluster cache")
133134
}

pkg/clustercache/clustercache.go

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,36 +37,22 @@ type Provider interface {
3737
}
3838

3939
type clusterCache struct {
40-
lock sync.RWMutex
41-
cache map[string]ClusterInfo
42-
orgsClient client.Client
40+
lock sync.RWMutex
41+
cache map[string]ClusterInfo
42+
mgr mcmanager.Manager
4343
}
4444

45-
func New(cfg *rest.Config) (*clusterCache, error) {
46-
copiedCfg := rest.CopyConfig(cfg)
47-
parsed, err := url.Parse(copiedCfg.Host)
48-
if err != nil {
49-
return nil, err
50-
}
51-
52-
parsed.Path = "/clusters/root:orgs"
53-
copiedCfg.Host = parsed.String()
54-
55-
orgsClient, err := client.New(copiedCfg, client.Options{})
56-
if err != nil {
57-
return nil, err
58-
}
45+
func New(mgr mcmanager.Manager) (*clusterCache, error) {
5946

6047
return &clusterCache{
61-
cache: make(map[string]ClusterInfo),
62-
orgsClient: orgsClient,
48+
cache: make(map[string]ClusterInfo),
49+
mgr: mgr,
6350
}, nil
6451
}
6552

6653
func NewWithClient(orgsClient client.Client) *clusterCache {
6754
return &clusterCache{
68-
cache: make(map[string]ClusterInfo),
69-
orgsClient: orgsClient,
55+
cache: make(map[string]ClusterInfo),
7056
}
7157
}
7258

@@ -129,7 +115,14 @@ func (c *clusterCache) Engage(ctx context.Context, name string, cl cluster.Clust
129115
Version: "v1alpha1",
130116
Kind: "Store",
131117
})
132-
if err := c.orgsClient.Get(ctx, types.NamespacedName{Name: orgName}, &store); err != nil {
118+
119+
orgsCluster, err := c.mgr.GetCluster(ctx, "root:orgs")
120+
if err != nil {
121+
return false, err
122+
}
123+
orgsClient := orgsCluster.GetClient()
124+
125+
if err := orgsClient.Get(ctx, types.NamespacedName{Name: orgName}, &store); err != nil {
133126
klog.V(5).ErrorS(err, "Failed to get Store for org, will retry", "clusterName", name, "orgName", orgName)
134127
return false, nil
135128
}

pkg/clustercache/clustercache_test.go

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,11 @@ import (
1717
)
1818

1919
func TestNew(t *testing.T) {
20-
tests := []struct {
21-
name string
22-
host string
23-
wantErr bool
24-
}{
25-
{
26-
name: "valid URL",
27-
host: "https://example.com",
28-
},
29-
{
30-
name: "invalid URL",
31-
host: "://invalid-url",
32-
wantErr: true,
33-
},
34-
}
20+
mgr := mocks.NewManager(t)
3521

36-
for _, tt := range tests {
37-
t.Run(tt.name, func(t *testing.T) {
38-
cc, err := clustercache.New(&rest.Config{Host: tt.host})
39-
if tt.wantErr {
40-
assert.Error(t, err)
41-
assert.Nil(t, cc)
42-
} else {
43-
assert.NoError(t, err)
44-
assert.NotNil(t, cc)
45-
}
46-
})
47-
}
22+
cc, err := clustercache.New(mgr)
23+
assert.NoError(t, err)
24+
assert.NotNil(t, cc)
4825
}
4926

5027
func TestClusterCache_Engage(t *testing.T) {
@@ -101,6 +78,8 @@ func TestClusterCache_Engage(t *testing.T) {
10178
t.Run(tt.name, func(t *testing.T) {
10279
cl := mocks.NewCluster(t)
10380
k8sClient := mocks.NewClient(t)
81+
mgr := mocks.NewManager(t)
82+
orgsCluster := mocks.NewCluster(t)
10483
orgsClient := mocks.NewClient(t)
10584

10685
cl.EXPECT().GetClient().Return(k8sClient)
@@ -125,14 +104,17 @@ func TestClusterCache_Engage(t *testing.T) {
125104
Return(tt.lcGetErr)
126105

127106
if tt.setupOrgsClient != nil {
107+
mgr.EXPECT().GetCluster(mock.Anything, "root:orgs").Return(orgsCluster, nil)
108+
orgsCluster.EXPECT().GetClient().Return(orgsClient)
128109
tt.setupOrgsClient(orgsClient)
129110
}
130111
if tt.setupCluster != nil {
131112
tt.setupCluster(cl)
132113
}
133114

134-
cc := clustercache.NewWithClient(orgsClient)
135-
err := cc.Engage(ctx, "test-cluster", cl)
115+
cc, err := clustercache.New(mgr)
116+
assert.NoError(t, err)
117+
err = cc.Engage(ctx, "test-cluster", cl)
136118

137119
if tt.wantErr {
138120
assert.Error(t, err)
@@ -153,7 +135,9 @@ func TestClusterCache_Engage(t *testing.T) {
153135
}
154136

155137
func TestClusterCache_Get_NotFound(t *testing.T) {
156-
cc := clustercache.NewWithClient(nil)
138+
mgr := mocks.NewManager(t)
139+
cc, err := clustercache.New(mgr)
140+
assert.NoError(t, err)
157141
info, found := cc.Get("non-existing")
158142
assert.False(t, found)
159143
assert.Empty(t, info.StoreID)

0 commit comments

Comments
 (0)