@@ -21,19 +21,14 @@ import (
21
21
"errors"
22
22
"fmt"
23
23
24
- "github.com/go-logr/logr"
25
-
26
24
"github.com/IBM-Cloud/power-go-client/ibmpisession"
27
25
"github.com/IBM-Cloud/power-go-client/power/models"
28
26
"github.com/IBM/go-sdk-core/v5/core"
29
27
"github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
30
28
31
- "k8s.io/klog/v2"
32
-
29
+ ctrl "sigs.k8s.io/controller-runtime"
33
30
"sigs.k8s.io/controller-runtime/pkg/client"
34
31
35
- v1beta1patch "sigs.k8s.io/cluster-api/util/deprecated/v1beta1/patch" //nolint:staticcheck
36
-
37
32
infrav1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
38
33
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
39
34
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
@@ -44,28 +39,30 @@ import (
44
39
// BucketAccess indicates if the bucket has public or private access public access.
45
40
const BucketAccess = "public"
46
41
42
+ var (
43
+ // ErrServiceInsanceNotInActiveState indicates error if serviceInstance is inactive.
44
+ ErrServiceInsanceNotInActiveState = errors .New ("service instance is not in active state" )
45
+ )
46
+
47
47
// PowerVSImageScopeParams defines the input parameters used to create a new PowerVSImageScope.
48
48
type PowerVSImageScopeParams struct {
49
49
Client client.Client
50
- Logger logr.Logger
51
50
IBMPowerVSImage * infrav1.IBMPowerVSImage
52
51
ServiceEndpoint []endpoints.ServiceEndpoint
53
52
Zone * string
54
53
}
55
54
56
55
// PowerVSImageScope defines a scope defined around a Power VS Cluster.
57
56
type PowerVSImageScope struct {
58
- logr.Logger
59
- Client client.Client
60
- patchHelper * v1beta1patch.Helper
61
-
57
+ Client client.Client
62
58
IBMPowerVSClient powervs.PowerVS
63
59
IBMPowerVSImage * infrav1.IBMPowerVSImage
64
60
ServiceEndpoint []endpoints.ServiceEndpoint
65
61
}
66
62
67
63
// NewPowerVSImageScope creates a new PowerVSImageScope from the supplied parameters.
68
- func NewPowerVSImageScope (params PowerVSImageScopeParams ) (scope * PowerVSImageScope , err error ) {
64
+ func NewPowerVSImageScope (ctx context.Context , params PowerVSImageScopeParams ) (scope * PowerVSImageScope , err error ) {
65
+ log := ctrl .LoggerFrom (ctx )
69
66
scope = & PowerVSImageScope {}
70
67
71
68
if params .Client == nil {
@@ -80,25 +77,13 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
80
77
}
81
78
scope .IBMPowerVSImage = params .IBMPowerVSImage
82
79
83
- if params .Logger == (logr.Logger {}) {
84
- params .Logger = klog .Background ()
85
- }
86
- scope .Logger = params .Logger
87
-
88
- helper , err := v1beta1patch .NewHelper (params .IBMPowerVSImage , params .Client )
89
- if err != nil {
90
- err = fmt .Errorf ("failed to init patch helper: %w" , err )
91
- return nil , err
92
- }
93
- scope .patchHelper = helper
94
-
95
80
// Create Resource Controller client.
96
81
var serviceOption resourcecontroller.ServiceOptions
97
82
// Fetch the resource controller endpoint.
98
83
rcEndpoint := endpoints .FetchEndpoints (string (endpoints .RC ), params .ServiceEndpoint )
99
84
if rcEndpoint != "" {
100
85
serviceOption .URL = rcEndpoint
101
- params . Logger .V (3 ).Info ("Overriding the default resource controller endpoint" , "ResourceControllerEndpoint" , rcEndpoint )
86
+ log .V (3 ).Info ("Overriding the default resource controller endpoint" , "ResourceControllerEndpoint" , rcEndpoint )
102
87
}
103
88
104
89
rc , err := resourcecontroller .NewService (serviceOption )
@@ -119,14 +104,14 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
119
104
}
120
105
serviceInstance , err := rc .GetServiceInstance ("" , name , params .Zone )
121
106
if err != nil {
122
- params . Logger .Error (err , "error failed to get service instance id from name" , "name" , name )
107
+ log .Error (err , "error failed to get service instance id from name" , "name" , name )
123
108
return nil , err
124
109
}
125
110
if serviceInstance == nil {
126
111
return nil , fmt .Errorf ("service instance %s is not yet created" , name )
127
112
}
128
113
if * serviceInstance .State != string (infrav1 .ServiceInstanceStateActive ) {
129
- return nil , fmt . Errorf ( "service instance %s is not in active state" , name )
114
+ return scope , ErrServiceInsanceNotInActiveState
130
115
}
131
116
serviceInstanceID = * serviceInstance .GUID
132
117
}
@@ -142,15 +127,15 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
142
127
143
128
options := powervs.ServiceOptions {
144
129
IBMPIOptions : & ibmpisession.IBMPIOptions {
145
- Debug : params . Logger .V (DEBUGLEVEL ).Enabled (),
130
+ Debug : log .V (DEBUGLEVEL ).Enabled (),
146
131
Zone : * res .RegionID ,
147
132
},
148
133
}
149
134
150
135
// Fetch the service endpoint.
151
136
if svcEndpoint := endpoints .FetchPVSEndpoint (endpoints .ConstructRegionFromZone (* res .RegionID ), params .ServiceEndpoint ); svcEndpoint != "" {
152
137
options .IBMPIOptions .URL = svcEndpoint
153
- scope . Logger . V (3 ).Info ("overriding the default powervs service endpoint" )
138
+ log . V (3 ).Info ("Overriding the default PowerVS service endpoint" , "serviceEndpoint" , svcEndpoint )
154
139
}
155
140
156
141
c , err := powervs .NewService (options )
@@ -179,56 +164,47 @@ func (i *PowerVSImageScope) ensureImageUnique(imageName string) (*models.ImageRe
179
164
}
180
165
181
166
// CreateImageCOSBucket creates a power vs image.
182
- func (i * PowerVSImageScope ) CreateImageCOSBucket () (* models.ImageReference , * models.JobReference , error ) {
183
- s := i .IBMPowerVSImage .Spec
167
+ func (i * PowerVSImageScope ) CreateImageCOSBucket (ctx context.Context ) (* models.ImageReference , * models.JobReference , error ) {
168
+ log := ctrl .LoggerFrom (ctx )
169
+ imageSpec := i .IBMPowerVSImage .Spec
184
170
m := i .IBMPowerVSImage .ObjectMeta
185
171
186
172
imageReply , err := i .ensureImageUnique (m .Name )
187
173
if err != nil {
188
174
record .Warnf (i .IBMPowerVSImage , "FailedRetrieveImage" , "Failed to retrieve image %q" , m .Name )
189
175
return nil , nil , err
190
176
} else if imageReply != nil {
191
- i .Info ("Image already exists" )
177
+ log .Info ("Image already exists" , "imageName" , m . Name )
192
178
return imageReply , nil , nil
193
179
}
194
180
195
181
if lastJob , _ := i .GetImportJob (); lastJob != nil {
196
- if * lastJob .Status .State != "completed" && * lastJob .Status .State != "failed" {
197
- i .Info ("Previous import job not yet finished" , "state" , * lastJob .Status .State )
182
+ if * lastJob .Status .State != string ( infrav1 . PowerVSImageStateCompleted ) && * lastJob .Status .State != string ( infrav1 . PowerVSImageStateFailed ) {
183
+ log .Info ("Previous import job not yet finished" , "state" , * lastJob .Status .State )
198
184
return nil , nil , nil
199
185
}
200
186
}
201
187
202
188
body := & models.CreateCosImageImportJob {
203
189
ImageName : & m .Name ,
204
- BucketName : s .Bucket ,
190
+ BucketName : imageSpec .Bucket ,
205
191
BucketAccess : core .StringPtr (BucketAccess ),
206
- Region : s .Region ,
207
- ImageFilename : s .Object ,
208
- StorageType : s .StorageType ,
192
+ Region : imageSpec .Region ,
193
+ ImageFilename : imageSpec .Object ,
194
+ StorageType : imageSpec .StorageType ,
209
195
}
210
196
211
197
jobRef , err := i .IBMPowerVSClient .CreateCosImage (body )
212
198
if err != nil {
213
- i .Info ("Unable to create new import job request" )
199
+ log .Info ("Unable to create new import job request" )
214
200
record .Warnf (i .IBMPowerVSImage , "FailedCreateImageImportJob" , "Failed image import job creation - %v" , err )
215
201
return nil , nil , err
216
202
}
217
- i .Info ("New import job request created" )
203
+ log .Info ("New import job request created" )
218
204
record .Eventf (i .IBMPowerVSImage , "SuccessfulCreateImageImportJob" , "Created image import job %q" , * jobRef .ID )
219
205
return nil , jobRef , nil
220
206
}
221
207
222
- // PatchObject persists the cluster configuration and status.
223
- func (i * PowerVSImageScope ) PatchObject () error {
224
- return i .patchHelper .Patch (context .TODO (), i .IBMPowerVSImage )
225
- }
226
-
227
- // Close closes the current scope persisting the cluster configuration and status.
228
- func (i * PowerVSImageScope ) Close () error {
229
- return i .PatchObject ()
230
- }
231
-
232
208
// DeleteImage will delete the image.
233
209
func (i * PowerVSImageScope ) DeleteImage () error {
234
210
if err := i .IBMPowerVSClient .DeleteImage (i .IBMPowerVSImage .Status .ImageID ); err != nil {
0 commit comments