alibabacloudstack/resource_apsarastack_cr_ee_repo.go (167 lines of code) (raw):
package alibabacloudstack
import (
"encoding/json"
"fmt"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)
func resourceAlibabacloudStackCrEeRepo() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"instance_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"namespace": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(2, 30),
},
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(2, 64),
},
"summary": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringLenBetween(1, 100),
},
"repo_type": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringInSlice([]string{RepoTypePublic, RepoTypePrivate}, false),
},
"detail": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(0, 2000),
},
//Computed
"repo_id": {
Type: schema.TypeString,
Computed: true,
},
},
}
setResourceFunc(resource, resourceAlibabacloudStackCrEeRepoCreate, resourceAlibabacloudStackCrEeRepoRead, resourceAlibabacloudStackCrEeRepoUpdate, resourceAlibabacloudStackCrEeRepoDelete)
return resource
}
func resourceAlibabacloudStackCrEeRepoCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
crService := &CrService{client}
instanceId := d.Get("instance_id").(string)
namespace := d.Get("namespace").(string)
repoName := d.Get("name").(string)
repoType := d.Get("repo_type").(string)
summary := d.Get("summary").(string)
request := client.NewCommonRequest("POST", "cr-ee", "2018-12-01", "CreateRepository", "")
mergeMaps(request.QueryParams, map[string]string{
"InstanceId": instanceId,
"RepoNamespaceName": namespace,
"RepoName": repoName,
"RepoType": repoType,
"Summary": summary,
})
if detail, ok := d.GetOk("detail"); ok && detail.(string) != "" {
request.QueryParams["Detail"] = detail.(string)
}
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
response := make(map[string]interface{})
addDebug(request.GetActionName(), bresponse, request, request.QueryParams)
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &response)
if err != nil {
return errmsgs.WrapError(err)
}
if !response["asapiSuccess"].(bool) {
return fmt.Errorf("create ee repo failed, %s", response["asapiErrorMessage"].(string))
}
d.SetId(crService.GenResourceId(instanceId, namespace, repoName))
return nil
}
func resourceAlibabacloudStackCrEeRepoRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
crService := &CrService{client}
response, err := crService.DescribeCrEeRepo(d.Id())
if err != nil {
return errmsgs.WrapError(err)
}
d.Set("instance_id", response["InstanceId"].(string))
d.Set("namespace", response["RepoNamespaceName"].(string))
d.Set("name", response["RepoName"].(string))
d.Set("repo_type", response["RepoType"])
d.Set("summary", response["Summary"].(string))
d.Set("repo_id", response["RepoId"].(string))
return nil
}
func resourceAlibabacloudStackCrEeRepoUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
instanceId := d.Get("instance_id").(string)
if d.HasChanges("repo_type", "summary", "detail") {
request := client.NewCommonRequest("POST", "cr-ee", "2018-12-01", "UpdateRepository", "")
mergeMaps(request.QueryParams, map[string]string{
"InstanceId": instanceId,
"RepoId": d.Get("repo_id").(string),
"RepoType": d.Get("repo_type").(string),
"Summary": d.Get("summary").(string),
})
if d.HasChange("detail") {
request.QueryParams["Detail"] = d.Get("detail").(string)
}
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
response := make(map[string]interface{})
addDebug(request.GetActionName(), bresponse, request, request.QueryParams)
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &response)
if err != nil {
return errmsgs.WrapError(err)
}
if !response["asapiSuccess"].(bool) {
return fmt.Errorf("update ee repo failed, %s", response["asapiErrorMessage"].(string))
}
}
return nil
}
func resourceAlibabacloudStackCrEeRepoDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
instanceId := d.Get("instance_id").(string)
repoId := d.Get("repo_id").(string)
request := client.NewCommonRequest("POST", "cr-ee", "2018-12-01", "DeleteRepository", "")
request.QueryParams["InstanceId"] = instanceId
request.QueryParams["RepoId"] = repoId
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
response := make(map[string]interface{})
addDebug(request.GetActionName(), bresponse, request, request.QueryParams)
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &response)
if err != nil {
return errmsgs.WrapError(err)
}
if !response["asapiSuccess"].(bool) {
return fmt.Errorf("delete ee repo failed, %s", response["asapiErrorMessage"].(string))
}
return nil
}