Skip to content

Commit ee81df6

Browse files
stackit ccm use new stackit client (#1201)
* CCM directory use now new stackit client * make fmt * remove unused projectID and add uuid in object creation in client * add wrapper for the stackit ID header Signed-off-by: Felix Breuer <f.breuer94@gmail.com> * fix make verify Signed-off-by: Felix Breuer <f.breuer94@gmail.com> * rename helper file Signed-off-by: Felix Breuer <f.breuer94@gmail.com> * remove more readonly fields Signed-off-by: Felix Breuer <f.breuer94@gmail.com> --------- Signed-off-by: Felix Breuer <f.breuer94@gmail.com> Co-authored-by: Felix Breuer <f.breuer94@gmail.com>
1 parent 449c3b2 commit ee81df6

13 files changed

Lines changed: 947 additions & 134 deletions

Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,18 @@ mocks: $(MOCKGEN)
134134
@$(MOCKGEN) -destination ./pkg/mock/iaas/iaas.go -package iaas github.com/stackitcloud/stackit-sdk-go/services/iaas/v2api DefaultAPI
135135

136136
# client mocks
137+
# TODO: delete later for cleanup old stackit client PR
137138
@$(MOCKGEN) -destination ./pkg/stackit/iaas_mock.go -package stackit ./pkg/stackit IaasClient
138139
@$(MOCKGEN) -destination ./pkg/stackit/loadbalancer_mock.go -package stackit ./pkg/stackit LoadbalancerClient
139140
@$(MOCKGEN) -destination ./pkg/stackit/server_mock.go -package stackit ./pkg/stackit NodeClient
141+
140142
@$(MOCKGEN) -destination ./pkg/stackit/metadata/metadata_mock.go -package metadata ./pkg/stackit/metadata IMetadata
141143
@$(MOCKGEN) -destination ./pkg/csi/util/mount/mount_mock.go -package mount ./pkg/csi/util/mount IMount
142144

145+
@$(MOCKGEN) -destination ./pkg/stackit/client/mock/iaas_mock.go -typed -package client ./pkg/stackit/client IaaSClient
146+
@$(MOCKGEN) -destination ./pkg/stackit/client/mock/loadbalancer_mock.go -typed -package client ./pkg/stackit/client LoadBalancingClient
147+
@$(MOCKGEN) -destination ./pkg/stackit/client/mock/mock.go -package client ./pkg/stackit/client Factory
148+
143149
.PHONY: generate
144150
generate: mocks
145151
go generate ./...

pkg/ccm/instances.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ import (
2424
"strings"
2525

2626
"github.com/stackitcloud/cloud-provider-stackit/pkg/labels"
27-
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit"
27+
stackitclient "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/client"
28+
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/stackiterrors"
2829
iaas "github.com/stackitcloud/stackit-sdk-go/services/iaas/v2api"
29-
3030
corev1 "k8s.io/api/core/v1"
3131
cloudprovider "k8s.io/cloud-provider"
3232
"k8s.io/klog/v2"
@@ -47,15 +47,13 @@ var oldProviderIDRegexp = regexp.MustCompile(`^` + oldProviderName + `://([^/]*)
4747
// Instances encapsulates an implementation of Instances for OpenStack.
4848
type Instances struct {
4949
regionProviderID bool
50-
iaasClient stackit.NodeClient
51-
projectID string
50+
iaasClient stackitclient.IaaSClient
5251
region string
5352
}
5453

55-
func NewInstance(client stackit.NodeClient, projectID, region string) (*Instances, error) {
54+
func NewInstance(client stackitclient.IaaSClient, region string) (*Instances, error) {
5655
return &Instances{
5756
iaasClient: client,
58-
projectID: projectID,
5957
region: region,
6058
regionProviderID: false,
6159
}, nil
@@ -203,8 +201,8 @@ func instanceIDFromProviderID(providerID string) (instanceID, region string, err
203201
}
204202
}
205203

206-
func getServerByName(ctx context.Context, client stackit.NodeClient, name, projectID, region string) (*iaas.Server, error) {
207-
servers, err := client.ListServers(ctx, projectID, region)
204+
func getServerByName(ctx context.Context, client stackitclient.IaaSClient, name string) (*iaas.Server, error) {
205+
servers, err := client.ListServers(ctx)
208206
if err != nil {
209207
return nil, fmt.Errorf("failed to list servers: %w", err)
210208
}
@@ -227,7 +225,7 @@ func getServerByName(ctx context.Context, client stackit.NodeClient, name, proje
227225

228226
func (i *Instances) getInstance(ctx context.Context, node *corev1.Node) (*iaas.Server, error) {
229227
if node.Spec.ProviderID == "" {
230-
return getServerByName(ctx, i.iaasClient, node.Name, i.projectID, i.region)
228+
return getServerByName(ctx, i.iaasClient, node.Name)
231229
}
232230

233231
instanceID, instanceRegion, err := instanceIDFromProviderID(node.Spec.ProviderID)
@@ -239,8 +237,8 @@ func (i *Instances) getInstance(ctx context.Context, node *corev1.Node) (*iaas.S
239237
return nil, fmt.Errorf("ProviderID \"%s\" didn't match supported region \"%s\"", node.Spec.ProviderID, i.region)
240238
}
241239

242-
server, err := i.iaasClient.GetServer(ctx, i.projectID, i.region, instanceID)
243-
if stackit.IsNotFound(err) {
240+
server, err := i.iaasClient.GetServer(ctx, instanceID)
241+
if stackiterrors.IsNotFound(err) {
244242
return nil, cloudprovider.InstanceNotFound
245243
}
246244
if err != nil {

pkg/ccm/instances_test.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,38 +19,37 @@ package ccm
1919
import (
2020
"context"
2121
"fmt"
22+
"net/http"
2223

2324
. "github.com/onsi/ginkgo/v2"
2425
. "github.com/onsi/gomega"
26+
oapiError "github.com/stackitcloud/stackit-sdk-go/core/oapierror"
2527

26-
"github.com/stackitcloud/cloud-provider-stackit/pkg/stackit"
28+
stackitclientmock "github.com/stackitcloud/cloud-provider-stackit/pkg/stackit/client/mock"
2729
iaas "github.com/stackitcloud/stackit-sdk-go/services/iaas/v2api"
28-
2930
"go.uber.org/mock/gomock"
3031
corev1 "k8s.io/api/core/v1"
3132
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3233
)
3334

3435
var _ = Describe("Node Controller", func() {
3536
var (
36-
nodeMockClient *stackit.MockNodeClient
37+
nodeMockClient *stackitclientmock.MockIaaSClient
3738
instance *Instances
3839

39-
projectID string
40-
region string
41-
serverID string
40+
region string
41+
serverID string
4242
)
4343

4444
BeforeEach(func() {
45-
projectID = "my-project"
4645
region = "eu01"
4746
serverID = "my-server"
4847

4948
ctrl := gomock.NewController(GinkgoT())
50-
nodeMockClient = stackit.NewMockNodeClient(ctrl)
49+
nodeMockClient = stackitclientmock.NewMockIaaSClient(ctrl)
5150

5251
var err error
53-
instance, err = NewInstance(nodeMockClient, projectID, "eu01")
52+
instance, err = NewInstance(nodeMockClient, "eu01")
5453
Expect(err).NotTo(HaveOccurred())
5554
})
5655

@@ -68,7 +67,7 @@ var _ = Describe("Node Controller", func() {
6867

6968
Describe("InstanceExists", func() {
7069
It("does not error if instance not found", func() {
71-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(&[]iaas.Server{}, nil)
70+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(&[]iaas.Server{}, nil)
7271

7372
node := &corev1.Node{
7473
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
@@ -80,7 +79,7 @@ var _ = Describe("Node Controller", func() {
8079
})
8180

8281
It("successfully get the instance when provider ID not there", func() {
83-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(&[]iaas.Server{
82+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(&[]iaas.Server{
8483
{
8584
Name: "foo",
8685
},
@@ -96,7 +95,7 @@ var _ = Describe("Node Controller", func() {
9695
})
9796

9897
It("successfully get the instance when provider ID is there", func() {
99-
nodeMockClient.EXPECT().GetServer(gomock.Any(), projectID, region, serverID).Return(&iaas.Server{
98+
nodeMockClient.EXPECT().GetServer(gomock.Any(), serverID).Return(&iaas.Server{
10099
Name: "foo",
101100
}, nil)
102101

@@ -113,7 +112,7 @@ var _ = Describe("Node Controller", func() {
113112
})
114113

115114
It("successfully get the instance when old provider ID is there", func() {
116-
nodeMockClient.EXPECT().GetServer(gomock.Any(), projectID, region, serverID).Return(&iaas.Server{
115+
nodeMockClient.EXPECT().GetServer(gomock.Any(), serverID).Return(&iaas.Server{
117116
Name: "foo",
118117
}, nil)
119118

@@ -130,7 +129,7 @@ var _ = Describe("Node Controller", func() {
130129
})
131130

132131
It("successfully get the instance when old regional provider ID is there", func() {
133-
nodeMockClient.EXPECT().GetServer(gomock.Any(), projectID, region, serverID).Return(&iaas.Server{
132+
nodeMockClient.EXPECT().GetServer(gomock.Any(), serverID).Return(&iaas.Server{
134133
Name: "foo",
135134
}, nil)
136135

@@ -147,7 +146,7 @@ var _ = Describe("Node Controller", func() {
147146
})
148147

149148
It("error when list server fails", func() {
150-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(nil, fmt.Errorf("failed due to some reason"))
149+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(nil, fmt.Errorf("failed due to some reason"))
151150

152151
node := &corev1.Node{
153152
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
@@ -158,7 +157,7 @@ var _ = Describe("Node Controller", func() {
158157
})
159158

160159
It("does not error when get server instance not found", func() {
161-
nodeMockClient.EXPECT().GetServer(gomock.Any(), projectID, region, serverID).Return(nil, stackit.ErrorNotFound)
160+
nodeMockClient.EXPECT().GetServer(gomock.Any(), serverID).Return(nil, &oapiError.GenericOpenAPIError{StatusCode: http.StatusNotFound})
162161

163162
node := &corev1.Node{
164163
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
@@ -175,7 +174,7 @@ var _ = Describe("Node Controller", func() {
175174

176175
Describe("InstanceShutdown", func() {
177176
It("successfully gets the instance status with provider ID", func() {
178-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(&[]iaas.Server{
177+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(&[]iaas.Server{
179178
{
180179
Name: "foo",
181180
Status: new(instanceStopping),
@@ -192,7 +191,7 @@ var _ = Describe("Node Controller", func() {
192191
})
193192

194193
It("successfully gets the instance status without provider ID", func() {
195-
nodeMockClient.EXPECT().GetServer(gomock.Any(), projectID, region, serverID).Return(&iaas.Server{
194+
nodeMockClient.EXPECT().GetServer(gomock.Any(), serverID).Return(&iaas.Server{
196195
Name: "foo",
197196
Status: new("ACTIVE"),
198197
}, nil)
@@ -210,7 +209,7 @@ var _ = Describe("Node Controller", func() {
210209
})
211210

212211
It("fails if server not found", func() {
213-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(nil, stackit.ErrorNotFound)
212+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(nil, &oapiError.GenericOpenAPIError{StatusCode: http.StatusNotFound})
214213

215214
node := &corev1.Node{
216215
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
@@ -224,7 +223,7 @@ var _ = Describe("Node Controller", func() {
224223

225224
Describe("InstanceMetadata", func() {
226225
It("does not error if instance not found", func() {
227-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(&[]iaas.Server{}, nil)
226+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(&[]iaas.Server{}, nil)
228227

229228
node := &corev1.Node{
230229
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
@@ -236,7 +235,7 @@ var _ = Describe("Node Controller", func() {
236235
})
237236

238237
It("successfully get all the metadata values", func() {
239-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(&[]iaas.Server{
238+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(&[]iaas.Server{
240239
{
241240
Name: "foo",
242241
Id: new(serverID),
@@ -271,7 +270,7 @@ var _ = Describe("Node Controller", func() {
271270
})
272271

273272
It("errors when list server fails", func() {
274-
nodeMockClient.EXPECT().ListServers(gomock.Any(), projectID, region).Return(nil, fmt.Errorf("failed due to some reason"))
273+
nodeMockClient.EXPECT().ListServers(gomock.Any()).Return(nil, fmt.Errorf("failed due to some reason"))
275274

276275
node := &corev1.Node{
277276
ObjectMeta: metav1.ObjectMeta{Name: "foo"},

0 commit comments

Comments
 (0)