-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathstep_image_export.go
65 lines (55 loc) · 2.36 KB
/
step_image_export.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package vpc
import (
"context"
"fmt"
"github.com/IBM/vpc-go-sdk/vpcv1"
"github.com/hashicorp/packer-plugin-sdk/multistep"
"github.com/hashicorp/packer-plugin-sdk/packer"
)
type StepImageExport struct{}
func (step *StepImageExport) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
config := state.Get("config").(Config)
ui := state.Get("ui").(packer.Ui)
var vpcService *vpcv1.VpcV1
if state.Get("vpcService") != nil {
vpcService = state.Get("vpcService").(*vpcv1.VpcV1)
}
imageExportJobName := config.ImageExportJobName
storageBucketName := config.StorageBucketName
storageBucketCRN := config.StorageBucketCRN
format := config.Format
ui.Say("Creating Image Export Job...")
createImageExportJobOptions := &vpcv1.CreateImageExportJobOptions{}
createImageExportJobOptions.SetImageID(config.ImageID)
storageBucket := &vpcv1.CloudObjectStorageBucketIdentity{}
if storageBucketName != "" {
ui.Say(fmt.Sprintf("Exporting image %v to destination: %v", config.ImageID, storageBucketName))
storageBucket.Name = &storageBucketName
} else {
ui.Say(fmt.Sprintf("Exporting image %v to destination: %v", config.ImageID, storageBucketCRN))
storageBucket.CRN = &storageBucketCRN
}
createImageExportJobOptions.SetStorageBucket(storageBucket)
createImageExportJobOptions.SetFormat(format)
createImageExportJobOptions.SetName(imageExportJobName)
imageExportJob, _, err := vpcService.CreateImageExportJob(createImageExportJobOptions)
if err != nil {
err := fmt.Errorf("[ERROR] Error creating image export job: %s", err)
state.Put("error", err)
ui.Error(err.Error())
return multistep.ActionHalt
}
jobId := *imageExportJob.ID
state.Put("image_id", config.ImageID)
state.Put("image_export_job_id", jobId)
ui.Say("Image export job created successfully!") // Image exported job created successfully
ui.Say(fmt.Sprintf("Image Export Job's ID: %s", *imageExportJob.ID))
return multistep.ActionContinue
}
func (step *StepImageExport) Cleanup(state multistep.StateBag) {
ui := state.Get("ui").(packer.Ui)
ui.Say("")
ui.Say("*******************************************************************************************************")
ui.Say("* Successfully Executed IBM Cloud Packer Post Processor Plugin for Image Export - VPC Infrastructure *")
ui.Say("*******************************************************************************************************")
}