alibabacloudstack/resource_apsarastack_cr_ee_namespace.go (151 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 resourceAlibabacloudStackCrEeNamespace() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"instance_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(2, 30),
},
"auto_create": {
Type: schema.TypeBool,
Required: true,
},
"default_visibility": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringInSlice([]string{RepoTypePublic, RepoTypePrivate}, false),
},
},
}
setResourceFunc(resource, resourceAlibabacloudStackCrEeNamespaceCreate, resourceAlibabacloudStackCrEeNamespaceRead, resourceAlibabacloudStackCrEeNamespaceUpdate, resourceAlibabacloudStackCrEeNamespaceDelete)
return resource
}
func resourceAlibabacloudStackCrEeNamespaceCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
crService := &CrService{client}
instanceId := d.Get("instance_id").(string)
namespace := d.Get("name").(string)
autoCreate := d.Get("auto_create").(bool)
visibility := d.Get("default_visibility").(string)
request := client.NewCommonRequest("POST", "cr-ee", "2018-12-01", "CreateNamespace", "")
mergeMaps(request.QueryParams, map[string]string{
"InstanceId": instanceId,
"NamespaceName": namespace,
"AutoCreateRepo": fmt.Sprintf("%t", autoCreate),
"DefaultRepoType": visibility,
})
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 namespace failed, %s", response["asapiErrorMessage"].(string))
}
d.SetId(crService.GenResourceId(instanceId, namespace))
return nil
}
func resourceAlibabacloudStackCrEeNamespaceRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
crService := &CrService{client}
response, err := crService.DescribeCrEeNamespace(d.Id())
if err != nil {
return errmsgs.WrapError(err)
}
if !response["asapiSuccess"].(bool) {
return fmt.Errorf("read ee namespace failed, %s", response["asapiErrorMessage"].(string))
}
d.Set("instance_id", response["InstanceId"].(string))
d.Set("name", response["NamespaceName"].(string))
d.Set("auto_create", response["AutoCreateRepo"].(bool))
d.Set("default_visibility", response["DefaultRepoType"].(string))
return nil
}
func resourceAlibabacloudStackCrEeNamespaceUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
instanceId := d.Get("instance_id").(string)
namespace := d.Get("name").(string)
if d.HasChanges("auto_create", "default_visibility") {
autoCreate := d.Get("auto_create").(bool)
visibility := d.Get("default_visibility").(string)
request := client.NewCommonRequest("POST", "cr-ee", "2018-12-01", "UpdateNamespace", "")
mergeMaps(request.QueryParams, map[string]string{
"InstanceId": instanceId,
"NamespaceName": namespace,
"AutoCreateRepo": fmt.Sprintf("%t", autoCreate),
"DefaultRepoType": visibility,
})
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(), response, 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 namespace failed, %s", response["asapiErrorMessage"].(string))
}
}
return nil
}
func resourceAlibabacloudStackCrEeNamespaceDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
crService := &CrService{client}
strRet := crService.ParseResourceId(d.Id())
instanceId := strRet[0]
namespaceName := strRet[1]
request := client.NewCommonRequest("POST", "cr-ee", "2018-12-01", "DeleteNamespace", "")
mergeMaps(request.QueryParams, map[string]string{
"InstanceId": instanceId,
"NamespaceName": namespaceName,
})
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(), response, 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 namespace failed, %s", response["asapiErrorMessage"].(string))
}
return nil
}