Skip to content

Commit e59d227

Browse files
committed
Force OpenStack client re-auth before long running actions
In order to avoid internal auth issues between OpenStack services
1 parent 5194e25 commit e59d227

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

pkg/backup.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,8 @@ func uploadBackup(srcImgClient, srcObjClient, dstObjClient, dstVolClient *gopher
452452
}
453453

454454
func backupToVolume(dstVolClient *gophercloud.ServiceClient, backupObj *backups.Backup, volumeName, volumeType, az string) (*volumes.Volume, error) {
455+
reauthClient(dstVolClient, "backupToVolume")
456+
455457
// create a volume from a backup
456458
dstVolClient.Microversion = "3.47"
457459
volOpts := volumes.CreateOpts{

pkg/image.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ func migrateImage(srcImageClient, dstImageClient, srcObjectClient, dstObjectClie
283283
}
284284
}()
285285

286+
reauthClient(srcImageClient, "migrateImage")
287+
reauthClient(dstImageClient, "migrateImage")
288+
286289
if imageWebDownload {
287290
if !isSliceContainsStr(dstImg.OpenStackImageImportMethods, string(imageimport.WebDownloadMethod)) {
288291
return nil, fmt.Errorf("the %q import method is not supported, supported import methods: %q", imageimport.WebDownloadMethod, dstImg.OpenStackImageImportMethods)

pkg/utils.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,15 @@ func newOpenStackClient(loc Location) (*gophercloud.ProviderClient, error) {
172172
return provider, nil
173173
}
174174

175+
func reauthClient(client *gophercloud.ServiceClient, funcName string) {
176+
// reauth the client before the long running action to avoid openstack internal auth issues
177+
if client.ProviderClient.ReauthFunc != nil {
178+
if err := client.ProviderClient.Reauthenticate(client.ProviderClient.TokenID); err != nil {
179+
log.Printf("Failed to re-authenticate the provider client in the %s func: %v", err, funcName)
180+
}
181+
}
182+
}
183+
175184
func newGlanceV2Client(provider *gophercloud.ProviderClient, region string) (*gophercloud.ServiceClient, error) {
176185
return openstack.NewImageServiceV2(provider, gophercloud.EndpointOpts{
177186
Region: region,

pkg/volume.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ func cloneVolume(srcVolumeClient, srcObjectClient *gophercloud.ServiceClient, sr
139139
VolumeType: srcVolume.VolumeType,
140140
}
141141

142+
reauthClient(srcVolumeClient, "cloneVolume")
143+
142144
if cloneViaSnapshot {
143145
// clone via snapshot using cinder storage, because it was explicitly set
144146
log.Printf("Cloning a %q volume using volume snapshot", srcVolume.ID)
@@ -216,6 +218,8 @@ func cloneVolume(srcVolumeClient, srcObjectClient *gophercloud.ServiceClient, sr
216218
}
217219
}
218220

221+
reauthClient(srcVolumeClient, "cloneVolume")
222+
219223
var newVolume *volumes.Volume
220224
var err error
221225
newVolume, err = volumes.Create(srcVolumeClient, volOpts).Extract()
@@ -276,6 +280,8 @@ func volumeToImage(srcImageClient, srcVolumeClient, srcObjectClient *gophercloud
276280
createSrcImage.DiskFormat = v
277281
}
278282

283+
reauthClient(srcVolumeClient, "volumeToImage")
284+
279285
srcVolumeClient.Microversion = "3.1" // required to set the image visibility
280286
var srcVolumeImage volumeactions.VolumeImage
281287
srcVolumeImage, err := volumeactions.UploadImage(srcVolumeClient, srcVolume.ID, createSrcImage).Extract()
@@ -405,6 +411,8 @@ func migrateVolume(srcImageClient, srcVolumeClient, srcObjectClient, dstImageCli
405411
}
406412

407413
func imageToVolume(imgToVolClient, imgDstClient *gophercloud.ServiceClient, imageID, volumeName, volumeDescription, volumeType, az string, volumeSize int, srcVolume *volumes.Volume) (*volumes.Volume, error) {
414+
reauthClient(imgToVolClient, "imageToVolume")
415+
408416
dstVolumeCreateOpts := volumes.CreateOpts{
409417
Size: volumeSize,
410418
Name: volumeName,

0 commit comments

Comments
 (0)