alicloud/resource_alicloud_image_share_permission.go (82 lines of code) (raw):
package alicloud
import (
"log"
"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceAliCloudImageSharePermission() *schema.Resource {
return &schema.Resource{
Create: resourceAliCloudImageSharePermissionCreate,
Read: resourceAliCloudImageSharePermissionRead,
Delete: resourceAliCloudImageSharePermissionDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"image_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"account_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
},
}
}
func resourceAliCloudImageSharePermissionCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
imageId := d.Get("image_id").(string)
accountId := d.Get("account_id").(string)
request := ecs.CreateModifyImageSharePermissionRequest()
request.RegionId = client.RegionId
request.ImageId = imageId
accountSli := []string{accountId}
request.AddAccount = &accountSli
raw, err := client.WithEcsClient(func(ecsClient *ecs.Client) (interface{}, error) {
return ecsClient.ModifyImageSharePermission(request)
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_image_share_permission", request.GetActionName(), AlibabaCloudSdkGoERROR)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
d.SetId(imageId + ":" + accountId)
return resourceAliCloudImageSharePermissionRead(d, meta)
}
func resourceAliCloudImageSharePermissionRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
ecsService := EcsService{client: client}
object, err := ecsService.DescribeImageShareByImageId(d.Id())
if err != nil {
if NotFoundError(err) {
log.Printf("[DEBUG] Resource alicloud_image_share_permission ecsService.DescribeImageShareByImageId Failed!!! %s", err)
d.SetId("")
return nil
}
return WrapError(err)
}
parts, err := ParseResourceId(d.Id(), 2)
d.Set("image_id", object.ImageId)
d.Set("account_id", parts[1])
return WrapError(err)
}
func resourceAliCloudImageSharePermissionDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
request := ecs.CreateModifyImageSharePermissionRequest()
request.RegionId = client.RegionId
parts, err := ParseResourceId(d.Id(), 2)
request.ImageId = parts[0]
accountSli := []string{parts[1]}
request.RemoveAccount = &accountSli
raw, err := client.WithEcsClient(func(ecsClient *ecs.Client) (interface{}, error) {
return ecsClient.ModifyImageSharePermission(request)
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_image_share_permission", request.GetActionName(), AlibabaCloudSdkGoERROR)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
}