Skip to content

Commit fbf1313

Browse files
authored
Refactor the client code (#503)
1 parent 45cc048 commit fbf1313

21 files changed

+514
-242
lines changed

Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ GOJQ := $(TOOLS_BIN_DIR)/gojq
3636
CONVERSION_GEN := $(TOOLS_BIN_DIR)/conversion-gen
3737
GINKGO := $(TOOLS_BIN_DIR)/ginkgo
3838
ENVSUBST := $(TOOLS_BIN_DIR)/envsubst
39+
MOCKGEN := $(TOOLS_BIN_DIR)/mockgen
3940

4041
STAGING_REGISTRY ?= gcr.io/k8s-staging-capi-ibmcloud
4142
STAGING_BUCKET ?= artifacts.k8s-staging-capi-ibmcloud.appspot.com
@@ -124,8 +125,13 @@ vet:
124125

125126
# Generate code
126127
generate: controller-gen
128+
$(MAKE) generate-go
127129
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."
128130

131+
.PHONY: generate-go
132+
generate-go: $(MOCKGEN)
133+
go generate ./...
134+
129135
images: docker-build
130136
# find or download controller-gen
131137
# download controller-gen if necessary

cloud/scope/powervs_clients.go

Lines changed: 0 additions & 51 deletions
This file was deleted.

cloud/scope/powervs_cluster.go

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ import (
2323
"github.com/go-logr/logr"
2424
"github.com/pkg/errors"
2525

26+
"github.com/IBM-Cloud/power-go-client/ibmpisession"
27+
"github.com/IBM/go-sdk-core/v5/core"
28+
"github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
2629
utils "github.com/ppc64le-cloud/powervs-utils"
2730

2831
"k8s.io/klog/v2/klogr"
@@ -31,7 +34,10 @@ import (
3134
"sigs.k8s.io/controller-runtime/pkg/client"
3235

3336
"sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
34-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg"
37+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
38+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
39+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
40+
servicesutils "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/utils"
3541
)
3642

3743
// PowerVSClusterScopeParams defines the input parameters used to create a new PowerVSClusterScope.
@@ -48,7 +54,7 @@ type PowerVSClusterScope struct {
4854
client client.Client
4955
patchHelper *patch.Helper
5056

51-
IBMPowerVSClient *IBMPowerVSClient
57+
IBMPowerVSClient *powervs.Service
5258
Cluster *clusterv1.Cluster
5359
IBMPowerVSCluster *v1beta1.IBMPowerVSCluster
5460
}
@@ -66,20 +72,47 @@ func NewPowerVSClusterScope(params PowerVSClusterScopeParams) (*PowerVSClusterSc
6672
params.Logger = klogr.New()
6773
}
6874

69-
client := pkg.NewClient()
70-
7175
spec := params.IBMPowerVSCluster.Spec
72-
resource, err := client.ResourceClient.GetInstance(spec.ServiceInstanceID)
76+
77+
auth, err := authenticator.GetAuthenticator()
7378
if err != nil {
74-
return nil, err
79+
return nil, errors.Wrap(err, "failed to get authenticator")
80+
}
81+
82+
account, err := servicesutils.GetAccount(auth)
83+
if err != nil {
84+
return nil, errors.Wrap(err, "failed to get account")
7585
}
76-
region, err := utils.GetRegion(resource.RegionID)
86+
87+
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
7788
if err != nil {
7889
return nil, err
7990
}
80-
zone := resource.RegionID
8191

82-
c, err := NewIBMPowerVSClient(client.Config.IAMAccessToken, client.User.Account, spec.ServiceInstanceID, region, zone, true)
92+
res, _, err := rc.GetResourceInstance(
93+
&resourcecontrollerv2.GetResourceInstanceOptions{
94+
ID: core.StringPtr(spec.ServiceInstanceID),
95+
})
96+
if err != nil {
97+
return nil, errors.Wrap(err, "failed to get resource instance")
98+
}
99+
100+
region, err := utils.GetRegion(*res.RegionID)
101+
if err != nil {
102+
return nil, errors.Wrap(err, "failed to get region")
103+
}
104+
105+
options := powervs.ServiceOptions{
106+
PIOptions: &ibmpisession.PIOptions{
107+
Debug: true,
108+
UserAccount: account,
109+
Region: region,
110+
Zone: *res.RegionID,
111+
},
112+
CloudInstanceID: spec.ServiceInstanceID,
113+
}
114+
c, err := powervs.NewService(options)
115+
83116
if err != nil {
84117
return nil, fmt.Errorf("failed to create NewIBMPowerVSClient")
85118
}

cloud/scope/powervs_machine.go

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ import (
2727
utils "github.com/ppc64le-cloud/powervs-utils"
2828

2929
"github.com/IBM-Cloud/power-go-client/ibmpisession"
30-
"github.com/IBM-Cloud/power-go-client/power/client/p_cloud_networks"
3130
"github.com/IBM-Cloud/power-go-client/power/client/p_cloud_p_vm_instances"
3231
"github.com/IBM-Cloud/power-go-client/power/models"
32+
"github.com/IBM/go-sdk-core/v5/core"
33+
"github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
3334

3435
corev1 "k8s.io/api/core/v1"
3536
"k8s.io/apimachinery/pkg/types"
@@ -39,7 +40,10 @@ import (
3940
"sigs.k8s.io/controller-runtime/pkg/client"
4041

4142
"sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
42-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg"
43+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
44+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
45+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
46+
servicesutils "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/utils"
4347
)
4448

4549
// PowerVSMachineScopeParams defines the input parameters used to create a new PowerVSMachineScope.
@@ -58,7 +62,7 @@ type PowerVSMachineScope struct {
5862
client client.Client
5963
patchHelper *patch.Helper
6064

61-
IBMPowerVSClient *IBMPowerVSClient
65+
IBMPowerVSClient *powervs.Service
6266
Cluster *clusterv1.Cluster
6367
Machine *clusterv1.Machine
6468
IBMPowerVSCluster *v1beta1.IBMPowerVSCluster
@@ -85,21 +89,47 @@ func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (*PowerVSMachineSc
8589
}
8690

8791
m := params.IBMPowerVSMachine
88-
client := pkg.NewClient()
8992

90-
resource, err := client.ResourceClient.GetInstance(m.Spec.ServiceInstanceID)
93+
auth, err := authenticator.GetAuthenticator()
9194
if err != nil {
92-
return nil, err
95+
return nil, errors.Wrap(err, "failed to get authenticator")
96+
}
97+
98+
account, err := servicesutils.GetAccount(auth)
99+
if err != nil {
100+
return nil, errors.Wrap(err, "failed to get account")
93101
}
94-
region, err := utils.GetRegion(resource.RegionID)
102+
103+
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
95104
if err != nil {
96105
return nil, err
97106
}
98-
zone := resource.RegionID
99107

100-
c, err := NewIBMPowerVSClient(client.Config.IAMAccessToken, client.User.Account, m.Spec.ServiceInstanceID, region, zone, true)
108+
res, _, err := rc.GetResourceInstance(
109+
&resourcecontrollerv2.GetResourceInstanceOptions{
110+
ID: core.StringPtr(m.Spec.ServiceInstanceID),
111+
})
112+
if err != nil {
113+
return nil, errors.Wrap(err, "failed to get resource instance")
114+
}
115+
116+
region, err := utils.GetRegion(*res.RegionID)
101117
if err != nil {
102-
return nil, fmt.Errorf("failed to create NewIBMPowerVSClient")
118+
return nil, errors.Wrap(err, "failed to get region")
119+
}
120+
121+
options := powervs.ServiceOptions{
122+
PIOptions: &ibmpisession.PIOptions{
123+
Debug: true,
124+
UserAccount: account,
125+
Region: region,
126+
Zone: *res.RegionID,
127+
},
128+
CloudInstanceID: m.Spec.ServiceInstanceID,
129+
}
130+
c, err := powervs.NewService(options)
131+
if err != nil {
132+
return nil, fmt.Errorf("failed to create PowerVS service")
103133
}
104134

105135
helper, err := patch.NewHelper(params.IBMPowerVSMachine, params.Client)
@@ -120,7 +150,7 @@ func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (*PowerVSMachineSc
120150
}
121151

122152
func (m *PowerVSMachineScope) ensureInstanceUnique(instanceName string) (*models.PVMInstanceReference, error) {
123-
instances, err := m.IBMPowerVSClient.InstanceClient.GetAll()
153+
instances, err := m.IBMPowerVSClient.GetAllInstance()
124154
if err != nil {
125155
return nil, err
126156
}
@@ -185,7 +215,7 @@ func (m *PowerVSMachineScope) CreateMachine() (*models.PVMInstanceReference, err
185215
UserData: cloudInitData,
186216
},
187217
}
188-
_, err = m.IBMPowerVSClient.InstanceClient.Create(params.Body)
218+
_, err = m.IBMPowerVSClient.CreateInstance(params.Body)
189219
if err != nil {
190220
return nil, err
191221
}
@@ -204,7 +234,7 @@ func (m *PowerVSMachineScope) PatchObject() error {
204234

205235
// DeleteMachine deletes the power vs machine associated with machine instance id and service instance id.
206236
func (m *PowerVSMachineScope) DeleteMachine() error {
207-
return m.IBMPowerVSClient.InstanceClient.Delete(m.IBMPowerVSMachine.Status.InstanceID)
237+
return m.IBMPowerVSClient.DeleteInstance(m.IBMPowerVSMachine.Status.InstanceID)
208238
}
209239

210240
// GetBootstrapData returns the base64 encoded bootstrap data from the secret in the Machine's bootstrap.dataSecretName
@@ -249,7 +279,7 @@ func getImageID(image v1beta1.IBMPowerVSResourceReference, m *PowerVSMachineScop
249279
}
250280

251281
func (m *PowerVSMachineScope) GetImages() (*models.Images, error) {
252-
return m.IBMPowerVSClient.ImageClient.GetAll()
282+
return m.IBMPowerVSClient.GetAllImage()
253283
}
254284

255285
func getNetworkID(network v1beta1.IBMPowerVSResourceReference, m *PowerVSMachineScope) (*string, error) {
@@ -275,11 +305,5 @@ func getNetworkID(network v1beta1.IBMPowerVSResourceReference, m *PowerVSMachine
275305
}
276306

277307
func (m *PowerVSMachineScope) GetNetworks() (*models.Networks, error) {
278-
params := p_cloud_networks.NewPcloudNetworksGetallParamsWithTimeout(TIMEOUT).WithCloudInstanceID(m.IBMPowerVSMachine.Spec.ServiceInstanceID)
279-
resp, err := m.IBMPowerVSClient.session.Power.PCloudNetworks.PcloudNetworksGetall(params, ibmpisession.NewAuth(m.IBMPowerVSClient.session, m.IBMPowerVSMachine.Spec.ServiceInstanceID))
280-
281-
if err != nil || resp.Payload == nil {
282-
return nil, err
283-
}
284-
return resp.Payload, nil
308+
return m.IBMPowerVSClient.GetAllNetwork()
285309
}

controllers/ibmpowervsmachine_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func (r *IBMPowerVSMachineReconciler) reconcileNormal(ctx context.Context, machi
168168
}
169169

170170
if ins != nil {
171-
instance, err := machineScope.IBMPowerVSClient.InstanceClient.Get(*ins.PvmInstanceID)
171+
instance, err := machineScope.IBMPowerVSClient.GetInstance(*ins.PvmInstanceID)
172172
if err != nil {
173173
return ctrl.Result{}, err
174174
}

controllers/ibmvpccluster_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package controllers
1919
import (
2020
"context"
2121
"os"
22+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
2223

2324
"github.com/go-logr/logr"
2425
"github.com/pkg/errors"
@@ -37,7 +38,6 @@ import (
3738

3839
infrastructurev1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
3940
"sigs.k8s.io/cluster-api-provider-ibmcloud/cloud/scope"
40-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg"
4141
)
4242

4343
// IBMVPCClusterReconciler reconciles a IBMVPCCluster object
@@ -80,7 +80,7 @@ func (r *IBMVPCClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
8080
// TODO: Will be removed once we find a better way of overriding the service endpoint, generate via spec
8181
svcEndpoint := os.Getenv("SERVICE_ENDPOINT")
8282

83-
authenticator, err := pkg.GetAuthenticator()
83+
authenticator, err := authenticator.GetAuthenticator()
8484
if err != nil {
8585
return ctrl.Result{}, errors.Wrapf(err, "failed to get authenticator")
8686
}

controllers/ibmvpcmachine_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"fmt"
2222
"os"
23+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
2324

2425
"github.com/go-logr/logr"
2526
"github.com/pkg/errors"
@@ -38,7 +39,6 @@ import (
3839

3940
infrastructurev1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
4041
"sigs.k8s.io/cluster-api-provider-ibmcloud/cloud/scope"
41-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg"
4242
)
4343

4444
// IBMVPCMachineReconciler reconciles a IBMVPCMachine object
@@ -100,7 +100,7 @@ func (r *IBMVPCMachineReconciler) Reconcile(ctx context.Context, req ctrl.Reques
100100
// Create the cluster scope
101101
svcEndpoint := os.Getenv("SERVICE_ENDPOINT")
102102

103-
authenticator, err := pkg.GetAuthenticator()
103+
authenticator, err := authenticator.GetAuthenticator()
104104
if err != nil {
105105
return ctrl.Result{}, errors.Wrapf(err, "failed to get authenticator")
106106
}

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ module sigs.k8s.io/cluster-api-provider-ibmcloud
33
go 1.17
44

55
require (
6-
github.com/IBM-Cloud/bluemix-go v0.0.0-20200921095234-26d1d0148c62
76
github.com/IBM-Cloud/power-go-client v1.0.88
87
github.com/IBM/go-sdk-core/v5 v5.9.1
8+
github.com/IBM/platform-services-go-sdk v0.22.7
99
github.com/IBM/vpc-go-sdk v0.14.0
1010
github.com/go-logr/logr v1.2.0
1111
github.com/golang-jwt/jwt v3.2.2+incompatible
12+
github.com/golang/mock v1.6.0
1213
github.com/onsi/ginkgo v1.16.5
1314
github.com/onsi/gomega v1.17.0
1415
github.com/pkg/errors v0.9.1
@@ -69,7 +70,7 @@ require (
6970
github.com/google/go-github/v33 v33.0.0 // indirect
7071
github.com/google/go-querystring v1.0.0 // indirect
7172
github.com/google/gofuzz v1.2.0 // indirect
72-
github.com/google/uuid v1.2.0 // indirect
73+
github.com/google/uuid v1.3.0 // indirect
7374
github.com/googleapis/gnostic v0.5.5 // indirect
7475
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
7576
github.com/hashicorp/go-retryablehttp v0.7.0 // indirect

0 commit comments

Comments
 (0)