@@ -21,19 +21,14 @@ import (
2121 "errors"
2222 "fmt"
2323
24- "github.com/go-logr/logr"
25-
2624 "github.com/IBM-Cloud/power-go-client/ibmpisession"
2725 "github.com/IBM-Cloud/power-go-client/power/models"
2826 "github.com/IBM/go-sdk-core/v5/core"
2927 "github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
3028
31- "k8s.io/klog/v2"
32-
29+ ctrl "sigs.k8s.io/controller-runtime"
3330 "sigs.k8s.io/controller-runtime/pkg/client"
3431
35- v1beta1patch "sigs.k8s.io/cluster-api/util/deprecated/v1beta1/patch" //nolint:staticcheck
36-
3732 infrav1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
3833 "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
3934 "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
@@ -44,28 +39,30 @@ import (
4439// BucketAccess indicates if the bucket has public or private access public access.
4540const BucketAccess = "public"
4641
42+ var (
43+ // ErrServiceInsanceNotInActiveState indicates error if serviceInstance is inactive.
44+ ErrServiceInsanceNotInActiveState = errors .New ("service instance is not in active state" )
45+ )
46+
4747// PowerVSImageScopeParams defines the input parameters used to create a new PowerVSImageScope.
4848type PowerVSImageScopeParams struct {
4949 Client client.Client
50- Logger logr.Logger
5150 IBMPowerVSImage * infrav1.IBMPowerVSImage
5251 ServiceEndpoint []endpoints.ServiceEndpoint
5352 Zone * string
5453}
5554
5655// PowerVSImageScope defines a scope defined around a Power VS Cluster.
5756type PowerVSImageScope struct {
58- logr.Logger
59- Client client.Client
60- patchHelper * v1beta1patch.Helper
61-
57+ Client client.Client
6258 IBMPowerVSClient powervs.PowerVS
6359 IBMPowerVSImage * infrav1.IBMPowerVSImage
6460 ServiceEndpoint []endpoints.ServiceEndpoint
6561}
6662
6763// 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 )
6966 scope = & PowerVSImageScope {}
7067
7168 if params .Client == nil {
@@ -80,25 +77,13 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
8077 }
8178 scope .IBMPowerVSImage = params .IBMPowerVSImage
8279
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-
9580 // Create Resource Controller client.
9681 var serviceOption resourcecontroller.ServiceOptions
9782 // Fetch the resource controller endpoint.
9883 rcEndpoint := endpoints .FetchEndpoints (string (endpoints .RC ), params .ServiceEndpoint )
9984 if rcEndpoint != "" {
10085 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 )
10287 }
10388
10489 rc , err := resourcecontroller .NewService (serviceOption )
@@ -119,14 +104,14 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
119104 }
120105 serviceInstance , err := rc .GetServiceInstance ("" , name , params .Zone )
121106 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 )
123108 return nil , err
124109 }
125110 if serviceInstance == nil {
126111 return nil , fmt .Errorf ("service instance %s is not yet created" , name )
127112 }
128113 if * serviceInstance .State != string (infrav1 .ServiceInstanceStateActive ) {
129- return nil , fmt . Errorf ( "service instance %s is not in active state" , name )
114+ return scope , ErrServiceInsanceNotInActiveState
130115 }
131116 serviceInstanceID = * serviceInstance .GUID
132117 }
@@ -142,15 +127,15 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
142127
143128 options := powervs.ServiceOptions {
144129 IBMPIOptions : & ibmpisession.IBMPIOptions {
145- Debug : params . Logger .V (DEBUGLEVEL ).Enabled (),
130+ Debug : log .V (DEBUGLEVEL ).Enabled (),
146131 Zone : * res .RegionID ,
147132 },
148133 }
149134
150135 // Fetch the service endpoint.
151136 if svcEndpoint := endpoints .FetchPVSEndpoint (endpoints .ConstructRegionFromZone (* res .RegionID ), params .ServiceEndpoint ); svcEndpoint != "" {
152137 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 )
154139 }
155140
156141 c , err := powervs .NewService (options )
@@ -179,56 +164,47 @@ func (i *PowerVSImageScope) ensureImageUnique(imageName string) (*models.ImageRe
179164}
180165
181166// 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
184170 m := i .IBMPowerVSImage .ObjectMeta
185171
186172 imageReply , err := i .ensureImageUnique (m .Name )
187173 if err != nil {
188174 record .Warnf (i .IBMPowerVSImage , "FailedRetrieveImage" , "Failed to retrieve image %q" , m .Name )
189175 return nil , nil , err
190176 } else if imageReply != nil {
191- i .Info ("Image already exists" )
177+ log .Info ("Image already exists" , "imageName" , m . Name )
192178 return imageReply , nil , nil
193179 }
194180
195181 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 )
198184 return nil , nil , nil
199185 }
200186 }
201187
202188 body := & models.CreateCosImageImportJob {
203189 ImageName : & m .Name ,
204- BucketName : s .Bucket ,
190+ BucketName : imageSpec .Bucket ,
205191 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 ,
209195 }
210196
211197 jobRef , err := i .IBMPowerVSClient .CreateCosImage (body )
212198 if err != nil {
213- i .Info ("Unable to create new import job request" )
199+ log .Info ("Unable to create new import job request" )
214200 record .Warnf (i .IBMPowerVSImage , "FailedCreateImageImportJob" , "Failed image import job creation - %v" , err )
215201 return nil , nil , err
216202 }
217- i .Info ("New import job request created" )
203+ log .Info ("New import job request created" )
218204 record .Eventf (i .IBMPowerVSImage , "SuccessfulCreateImageImportJob" , "Created image import job %q" , * jobRef .ID )
219205 return nil , jobRef , nil
220206}
221207
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-
232208// DeleteImage will delete the image.
233209func (i * PowerVSImageScope ) DeleteImage () error {
234210 if err := i .IBMPowerVSClient .DeleteImage (i .IBMPowerVSImage .Status .ImageID ); err != nil {
0 commit comments