Skip to content

Commit 00aac5d

Browse files
Refactor Image Export (IBM-Cloud#5936)
1 parent 4647643 commit 00aac5d

File tree

3 files changed

+70
-66
lines changed

3 files changed

+70
-66
lines changed

ibm/service/power/resource_ibm_pi_image_export.go

Lines changed: 53 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ import (
99
"log"
1010
"time"
1111

12-
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
13-
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
14-
15-
st "github.com/IBM-Cloud/power-go-client/clients/instance"
16-
"github.com/IBM-Cloud/power-go-client/helpers"
12+
"github.com/IBM-Cloud/power-go-client/clients/instance"
1713
"github.com/IBM-Cloud/power-go-client/power/models"
1814
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
1915
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
16+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
18+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
2019
)
2120

2221
func ResourceIBMPIImageExport() *schema.Resource {
@@ -31,46 +30,51 @@ func ResourceIBMPIImageExport() *schema.Resource {
3130
},
3231

3332
Schema: map[string]*schema.Schema{
34-
//required attributes
35-
helpers.PICloudInstanceId: {
36-
Type: schema.TypeString,
37-
Required: true,
38-
Description: "PI cloud instance ID",
39-
ForceNew: true,
33+
// Arguments
34+
Arg_CloudInstanceID: {
35+
Description: "The GUID of the service instance associated with an account.",
36+
ForceNew: true,
37+
Required: true,
38+
Type: schema.TypeString,
39+
ValidateFunc: validation.NoZeroValues,
4040
},
41-
helpers.PIImageId: {
42-
Type: schema.TypeString,
43-
Required: true,
44-
Description: "Instance image id",
45-
DiffSuppressFunc: flex.ApplyOnce,
46-
ForceNew: true,
41+
Arg_ImageAccessKey: {
42+
Description: "Cloud Object Storage access key; required for buckets with private access",
43+
ForceNew: true,
44+
Required: true,
45+
Sensitive: true,
46+
Type: schema.TypeString,
47+
ValidateFunc: validation.NoZeroValues,
4748
},
48-
helpers.PIImageBucketName: {
49-
Type: schema.TypeString,
50-
Required: true,
51-
Description: "Cloud Object Storage bucket name; bucket-name[/optional/folder]",
52-
ForceNew: true,
49+
Arg_ImageBucketName: {
50+
Description: "Cloud Object Storage bucket name; bucket-name[/optional/folder]",
51+
ForceNew: true,
52+
Required: true,
53+
Type: schema.TypeString,
54+
ValidateFunc: validation.NoZeroValues,
5355
},
54-
helpers.PIImageAccessKey: {
55-
Type: schema.TypeString,
56-
Required: true,
57-
Description: "Cloud Object Storage access key; required for buckets with private access",
58-
Sensitive: true,
59-
ForceNew: true,
56+
Arg_ImageBucketRegion: {
57+
Description: "Cloud Object Storage region",
58+
ForceNew: true,
59+
Required: true,
60+
Type: schema.TypeString,
61+
ValidateFunc: validation.NoZeroValues,
6062
},
61-
62-
helpers.PIImageSecretKey: {
63-
Type: schema.TypeString,
64-
Required: true,
65-
Description: "Cloud Object Storage secret key; required for buckets with private access",
66-
Sensitive: true,
67-
ForceNew: true,
63+
Arg_ImageID: {
64+
Description: "Instance image id",
65+
DiffSuppressFunc: flex.ApplyOnce,
66+
ForceNew: true,
67+
Required: true,
68+
Type: schema.TypeString,
69+
ValidateFunc: validation.NoZeroValues,
6870
},
69-
helpers.PIImageBucketRegion: {
70-
Type: schema.TypeString,
71-
Description: "Cloud Object Storage region",
72-
ForceNew: true,
73-
Required: true,
71+
Arg_ImageSecretKey: {
72+
Description: "Cloud Object Storage secret key; required for buckets with private access",
73+
ForceNew: true,
74+
Required: true,
75+
Sensitive: true,
76+
Type: schema.TypeString,
77+
ValidateFunc: validation.NoZeroValues,
7478
},
7579
},
7680
}
@@ -83,28 +87,28 @@ func resourceIBMPIImageExportCreate(ctx context.Context, d *schema.ResourceData,
8387
return diag.FromErr(err)
8488
}
8589

86-
cloudInstanceID := d.Get(helpers.PICloudInstanceId).(string)
87-
imageid := d.Get(helpers.PIImageId).(string)
88-
bucketName := d.Get(helpers.PIImageBucketName).(string)
89-
accessKey := d.Get(helpers.PIImageAccessKey).(string)
90+
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
91+
imageid := d.Get(Arg_ImageID).(string)
92+
bucketName := d.Get(Arg_ImageBucketName).(string)
93+
accessKey := d.Get(Arg_ImageAccessKey).(string)
9094

91-
client := st.NewIBMPIImageClient(ctx, sess, cloudInstanceID)
95+
client := instance.NewIBMPIImageClient(ctx, sess, cloudInstanceID)
9296

9397
// image export
9498
var body = &models.ExportImage{
9599
BucketName: &bucketName,
96100
AccessKey: &accessKey,
97-
Region: d.Get(helpers.PIImageBucketRegion).(string),
98-
SecretKey: d.Get(helpers.PIImageSecretKey).(string),
101+
Region: d.Get(Arg_ImageBucketRegion).(string),
102+
SecretKey: d.Get(Arg_ImageSecretKey).(string),
99103
}
100104

101105
imageResponse, err := client.ExportImage(imageid, body)
102106
if err != nil {
103107
return diag.FromErr(err)
104108
}
105-
d.SetId(fmt.Sprintf("%s/%s/%s", imageid, bucketName, d.Get(helpers.PIImageBucketRegion).(string)))
109+
d.SetId(fmt.Sprintf("%s/%s/%s", imageid, bucketName, d.Get(Arg_ImageBucketRegion).(string)))
106110

107-
jobClient := st.NewIBMPIJobClient(ctx, sess, cloudInstanceID)
111+
jobClient := instance.NewIBMPIJobClient(ctx, sess, cloudInstanceID)
108112
_, err = waitForIBMPIJobCompleted(ctx, jobClient, *imageResponse.ID, d.Timeout(schema.TimeoutCreate))
109113
if err != nil {
110114
return diag.FromErr(err)

ibm/service/power/resource_ibm_pi_image_export_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1212
)
1313

14-
func TestAccIBMPIImageEport(t *testing.T) {
14+
func TestAccIBMPIImageExport(t *testing.T) {
1515
resource.Test(t, resource.TestCase{
1616
PreCheck: func() { acc.TestAccPreCheck(t) },
1717
Providers: acc.TestAccProviders,
@@ -28,17 +28,17 @@ func TestAccIBMPIImageEport(t *testing.T) {
2828

2929
func testAccCheckIBMPIImageExportConfig() string {
3030
return fmt.Sprintf(`
31-
data "ibm_pi_image" "power_image" {
32-
pi_image_name = "%[6]s"
33-
pi_cloud_instance_id = "%[1]s"
34-
}
35-
resource "ibm_pi_image_export" "power_image_export" {
36-
pi_image_id = data.ibm_pi_image.power_image.id
37-
pi_cloud_instance_id = "%[1]s"
38-
pi_image_bucket_name = "%[2]s"
39-
pi_image_access_key = "%[3]s"
40-
pi_image_secret_key = "%[4]s"
41-
pi_image_bucket_region = "%[5]s"
42-
}
31+
data "ibm_pi_image" "power_image" {
32+
pi_image_name = "%[6]s"
33+
pi_cloud_instance_id = "%[1]s"
34+
}
35+
resource "ibm_pi_image_export" "power_image_export" {
36+
pi_image_id = data.ibm_pi_image.power_image.id
37+
pi_cloud_instance_id = "%[1]s"
38+
pi_image_bucket_name = "%[2]s"
39+
pi_image_access_key = "%[3]s"
40+
pi_image_secret_key = "%[4]s"
41+
pi_image_bucket_region = "%[5]s"
42+
}
4343
`, acc.Pi_cloud_instance_id, acc.Pi_image_bucket_name, acc.Pi_image_bucket_access_key, acc.Pi_image_bucket_secret_key, acc.Pi_image_bucket_region, acc.Pi_image)
4444
}

website/docs/r/pi_image_export.html.markdown

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,19 @@ Example usage:
4444

4545
## Timeouts
4646

47-
The ibm_pi_image provides the following [timeouts](https://www.terraform.io/docs/language/resources/syntax.html) configuration options:
47+
The `ibm_pi_image_export` provides the following [timeouts](https://www.terraform.io/docs/language/resources/syntax.html) configuration options:
4848

49-
- **create** The export image to IBM Cloud Object Storage bucket is considered failed if no response is received for 60 minutes.
49+
- **create** - (Default 60 minutes) used for exporting image to IBM Cloud Object Storage bucked. Considered failed if no response is received by timeout.
5050

5151
## Argument reference
5252

5353
Review the argument references that you can specify for your resource.
5454

5555
- `pi_cloud_instance_id` - (Required, String) The GUID of the service instance associated with an account.
56-
- `pi_image_id` - (Required, String) The Image ID of existing source image; required for image export.
57-
- `pi_image_bucket_name` - (Required, String) The Cloud Object Storage bucket name; `bucket-name[/optional/folder]`
5856
- `pi_image_access_key` - (Required, String, Sensitive) The Cloud Object Storage access key; required for buckets with private access.
57+
- `pi_image_bucket_name` - (Required, String) The Cloud Object Storage bucket name; `bucket-name[/optional/folder]`
5958
- `pi_image_bucket_region` - (Required, String) The Cloud Object Storage region. Supported COS regions are:`au-syd`, `br-sao`, `ca-tor`, `che01`, `eu-de`, `eu-es`, `eu-gb`, `jp-osa`, `jp-tok`, `us-east`, `us-south`.
59+
- `pi_image_id` - (Required, String) The Image ID of existing source image; required for image export.
6060
- `pi_image_secret_key` - (Required, String, Sensitive) The Cloud Object Storage secret key; required for buckets with private access.
6161

6262
## Attribute reference

0 commit comments

Comments
 (0)