@@ -6,15 +6,56 @@ import (
66 "testing"
77
88 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+ "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
910
10- "github.com/chnsz/golangsdk/openstack/ims/v2/cloudimages "
11+ "github.com/chnsz/golangsdk"
1112
13+ "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"
1214 "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance"
15+ "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance/common"
16+ "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/utils"
1317)
1418
19+ func getEvsSystemImageResourceFunc (cfg * config.Config , state * terraform.ResourceState ) (interface {}, error ) {
20+ var (
21+ region = acceptance .HW_REGION_NAME
22+ product = "ims"
23+ httpUrl = "v2/cloudimages"
24+ )
25+
26+ client , err := cfg .NewServiceClient (product , region )
27+ if err != nil {
28+ return nil , fmt .Errorf ("error creating IMS client: %s" , err )
29+ }
30+
31+ getPath := client .Endpoint + httpUrl
32+ getPath += fmt .Sprintf ("?id=%s" , state .Primary .ID )
33+ getOpt := golangsdk.RequestOpts {
34+ KeepResponseBody : true ,
35+ }
36+
37+ getResp , err := client .Request ("GET" , getPath , & getOpt )
38+ if err != nil {
39+ return nil , fmt .Errorf ("error retrieving IMS EVS system image: %s" , err )
40+ }
41+
42+ getRespBody , err := utils .FlattenResponse (getResp )
43+ if err != nil {
44+ return nil , err
45+ }
46+
47+ image := utils .PathSearch ("images[0]" , getRespBody , nil )
48+ // If the list API return empty, then return `404` error code.
49+ if image == nil {
50+ return nil , golangsdk.ErrDefault404 {}
51+ }
52+
53+ return image , nil
54+ }
55+
1556func TestAccEvsSystemImage_basic (t * testing.T ) {
1657 var (
17- image cloudimages. Image
58+ image interface {}
1859 rName = acceptance .RandomAccResourceName ()
1960 rNameUpdate = rName + "-update"
2061 resourceName = "huaweicloud_ims_evs_system_image.test"
@@ -25,7 +66,7 @@ func TestAccEvsSystemImage_basic(t *testing.T) {
2566 rc := acceptance .InitResourceCheck (
2667 resourceName ,
2768 & image ,
28- getImsImageResourceFunc ,
69+ getEvsSystemImageResourceFunc ,
2970 )
3071
3172 resource .ParallelTest (t , resource.TestCase {
@@ -108,6 +149,42 @@ func TestAccEvsSystemImage_basic(t *testing.T) {
108149 })
109150}
110151
152+ func testAccEvsSystemImage_base (rName string ) string {
153+ return fmt .Sprintf (`
154+ %[1]s
155+
156+ data "huaweicloud_availability_zones" "test" {}
157+
158+ data "huaweicloud_compute_flavors" "test" {
159+ availability_zone = data.huaweicloud_availability_zones.test.names[0]
160+ performance_type = "normal"
161+ cpu_core_count = 2
162+ memory_size = 4
163+ }
164+
165+ resource "huaweicloud_compute_instance" "test" {
166+ name = "%[2]s"
167+ image_name = "Ubuntu 18.04 server 64bit"
168+ flavor_id = data.huaweicloud_compute_flavors.test.ids[0]
169+ security_group_ids = [huaweicloud_networking_secgroup.test.id]
170+ availability_zone = data.huaweicloud_availability_zones.test.names[0]
171+
172+ network {
173+ uuid = huaweicloud_vpc_subnet.test.id
174+ }
175+ }
176+
177+ resource "huaweicloud_evs_volume" "test" {
178+ name = "%[2]s"
179+ volume_type = "GPSSD"
180+ availability_zone = data.huaweicloud_availability_zones.test.names[0]
181+ server_id = huaweicloud_compute_instance.test.id
182+ size = 100
183+ charging_mode = "postPaid"
184+ }
185+ ` , common .TestBaseNetwork (rName ), rName )
186+ }
187+
111188func testAccEvsSystemImage_basic (rName string ) string {
112189 return fmt .Sprintf (`
113190%[1]s
@@ -126,7 +203,7 @@ resource "huaweicloud_ims_evs_system_image" "test" {
126203 key = "value"
127204 }
128205}
129- ` , testAccEvsDataImage_base (rName ), rName )
206+ ` , testAccEvsSystemImage_base (rName ), rName )
130207}
131208
132209func testAccEvsSystemImage_update1 (rName , rNameUpdate , migrateEpsId string , maxRAM , minRAM int ) string {
@@ -148,7 +225,7 @@ resource "huaweicloud_ims_evs_system_image" "test" {
148225 key2 = "value2"
149226 }
150227}
151- ` , testAccEvsDataImage_base (rName ), rNameUpdate , migrateEpsId , maxRAM , minRAM )
228+ ` , testAccEvsSystemImage_base (rName ), rNameUpdate , migrateEpsId , maxRAM , minRAM )
152229}
153230
154231func testAccEvsSystemImage_update2 (rName , rNameUpdate , defaultEpsId string , maxRAM , minRAM int ) string {
@@ -170,5 +247,5 @@ resource "huaweicloud_ims_evs_system_image" "test" {
170247 key2 = "value2"
171248 }
172249}
173- ` , testAccEvsDataImage_base (rName ), rNameUpdate , defaultEpsId , maxRAM , minRAM )
250+ ` , testAccEvsSystemImage_base (rName ), rNameUpdate , defaultEpsId , maxRAM , minRAM )
174251}
0 commit comments