@@ -2,6 +2,7 @@ package cvm
22
33import (
44 "context"
5+ "fmt"
56 "log"
67
78 tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -16,8 +17,8 @@ import (
1617func ResourceTencentCloudCvmImageSharePermission () * schema.Resource {
1718 return & schema.Resource {
1819 Create : resourceTencentCloudCvmImageSharePermissionCreate ,
19- Update : resourceTencentCloudCvmImageSharePermissionUpdate ,
2020 Read : resourceTencentCloudCvmImageSharePermissionRead ,
21+ Update : resourceTencentCloudCvmImageSharePermissionUpdate ,
2122 Delete : resourceTencentCloudCvmImageSharePermissionDelete ,
2223 Importer : & schema.ResourceImporter {
2324 State : schema .ImportStatePassthrough ,
@@ -31,11 +32,9 @@ func ResourceTencentCloudCvmImageSharePermission() *schema.Resource {
3132 },
3233
3334 "account_ids" : {
34- Required : true ,
35- Type : schema .TypeSet ,
36- Elem : & schema.Schema {
37- Type : schema .TypeString ,
38- },
35+ Required : true ,
36+ Type : schema .TypeSet ,
37+ Elem : & schema.Schema {Type : schema .TypeString },
3938 Description : "List of account IDs with which an image is shared." ,
4039 },
4140 },
@@ -46,12 +45,12 @@ func resourceTencentCloudCvmImageSharePermissionCreate(d *schema.ResourceData, m
4645 defer tccommon .LogElapsed ("resource.tencentcloud_cvm_image_share_permission.create" )()
4746 defer tccommon .InconsistentCheck (d , meta )()
4847
49- logId := tccommon .GetLogId (tccommon .ContextNil )
50-
5148 var (
49+ logId = tccommon .GetLogId (tccommon .ContextNil )
5250 request = cvm .NewModifyImageSharePermissionRequest ()
5351 imageId string
5452 )
53+
5554 if v , ok := d .GetOk ("image_id" ); ok {
5655 imageId = v .(string )
5756 request .ImageId = helper .String (imageId )
@@ -66,33 +65,74 @@ func resourceTencentCloudCvmImageSharePermissionCreate(d *schema.ResourceData, m
6665 }
6766
6867 request .Permission = helper .String (IMAGE_SHARE_PERMISSION_SHARE )
69-
7068 err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
7169 result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseCvmClient ().ModifyImageSharePermission (request )
7270 if e != nil {
7371 return tccommon .RetryError (e )
7472 } else {
7573 log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
7674 }
75+
76+ if result == nil || result .Response == nil {
77+ return resource .NonRetryableError (fmt .Errorf ("Operate cvm modifyImageSharePermission failed, Response is nil." ))
78+ }
79+
7780 return nil
7881 })
82+
7983 if err != nil {
8084 log .Printf ("[CRITAL]%s operate cvm modifyImageSharePermission failed, reason:%+v" , logId , err )
8185 return err
8286 }
8387
8488 d .SetId (imageId )
85-
8689 return resourceTencentCloudCvmImageSharePermissionRead (d , meta )
8790}
8891
92+ func resourceTencentCloudCvmImageSharePermissionRead (d * schema.ResourceData , meta interface {}) error {
93+ defer tccommon .LogElapsed ("resource.tencentcloud_cvm_image_share_permission.read" )()
94+ defer tccommon .InconsistentCheck (d , meta )()
95+
96+ var (
97+ logId = tccommon .GetLogId (tccommon .ContextNil )
98+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
99+ service = CvmService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
100+ sharePermissionSet []* cvm.SharePermission
101+ )
102+
103+ err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
104+ result , e := service .DescribeCvmImageSharePermissionByFilter (ctx , map [string ]interface {}{"ImageId" : helper .String (d .Id ())})
105+ if e != nil {
106+ return tccommon .RetryError (e )
107+ }
108+
109+ sharePermissionSet = result
110+ return nil
111+ })
112+
113+ if err != nil {
114+ return err
115+ }
116+
117+ accountIds := make ([]string , 0 )
118+ for _ , sharePermission := range sharePermissionSet {
119+ accountIds = append (accountIds , * sharePermission .AccountId )
120+ }
121+
122+ _ = d .Set ("account_ids" , accountIds )
123+ _ = d .Set ("image_id" , d .Id ())
124+ return nil
125+ }
126+
89127func resourceTencentCloudCvmImageSharePermissionUpdate (d * schema.ResourceData , meta interface {}) error {
90128 defer tccommon .LogElapsed ("resource.tencentcloud_cvm_image_share_permission.update" )()
91129 defer tccommon .InconsistentCheck (d , meta )()
92130
93- logId := tccommon .GetLogId (tccommon .ContextNil )
94- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
95- service := CvmService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
131+ var (
132+ logId = tccommon .GetLogId (tccommon .ContextNil )
133+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
134+ service = CvmService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
135+ )
96136
97137 if d .HasChange ("account_ids" ) {
98138 old , new := d .GetChange ("account_ids" )
@@ -106,6 +146,7 @@ func resourceTencentCloudCvmImageSharePermissionUpdate(d *schema.ResourceData, m
106146 return addError
107147 }
108148 }
149+
109150 if len (remove ) > 0 {
110151 removeError := service .ModifyImageSharePermission (ctx , d .Id (), IMAGE_SHARE_PERMISSION_CANCEL , helper .InterfacesStrings (remove ))
111152 if removeError != nil {
@@ -117,53 +158,27 @@ func resourceTencentCloudCvmImageSharePermissionUpdate(d *schema.ResourceData, m
117158 return resourceTencentCloudCvmImageSharePermissionRead (d , meta )
118159}
119160
120- func resourceTencentCloudCvmImageSharePermissionRead (d * schema.ResourceData , meta interface {}) error {
121- defer tccommon .LogElapsed ("resource.tencentcloud_cvm_image_share_permission.read" )()
122- defer tccommon .InconsistentCheck (d , meta )()
123-
124- logId := tccommon .GetLogId (tccommon .ContextNil )
125- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
126- var sharePermissionSet []* cvm.SharePermission
127-
128- service := CvmService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
129- err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
130- result , e := service .DescribeCvmImageSharePermissionByFilter (ctx , map [string ]interface {}{"ImageId" : helper .String (d .Id ())})
131- if e != nil {
132- return tccommon .RetryError (e )
133- }
134- sharePermissionSet = result
135- return nil
136- })
137- if err != nil {
138- return err
139- }
140-
141- accountIds := make ([]string , 0 )
142- for _ , sharePermission := range sharePermissionSet {
143- accountIds = append (accountIds , * sharePermission .AccountId )
144- }
145-
146- _ = d .Set ("account_ids" , accountIds )
147- _ = d .Set ("image_id" , d .Id ())
148- return nil
149- }
150-
151161func resourceTencentCloudCvmImageSharePermissionDelete (d * schema.ResourceData , meta interface {}) error {
152162 defer tccommon .LogElapsed ("resource.tencentcloud_cvm_image_share_permission.delete" )()
153163 defer tccommon .InconsistentCheck (d , meta )()
154- logId := tccommon .GetLogId (tccommon .ContextNil )
155- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
156- var sharePermissionSet []* cvm.SharePermission
157164
158- service := CvmService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
165+ var (
166+ logId = tccommon .GetLogId (tccommon .ContextNil )
167+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
168+ service = CvmService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
169+ sharePermissionSet []* cvm.SharePermission
170+ )
171+
159172 err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
160173 result , e := service .DescribeCvmImageSharePermissionByFilter (ctx , map [string ]interface {}{"ImageId" : helper .String (d .Id ())})
161174 if e != nil {
162175 return tccommon .RetryError (e )
163176 }
177+
164178 sharePermissionSet = result
165179 return nil
166180 })
181+
167182 if err != nil {
168183 return err
169184 }
0 commit comments