alibabacloudstack/resource_apsarastack_cr_namespace.go (170 lines of code) (raw):

package alibabacloudstack import ( "encoding/json" "fmt" "log" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" "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" ) func resourceAlibabacloudStackCRNamespace() *schema.Resource { resource := &schema.Resource{ Schema: map[string]*schema.Schema{ "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{"PUBLIC", "PRIVATE"}, false), }, }, } setResourceFunc(resource, resourceAlibabacloudStackCRNamespaceCreate, resourceAlibabacloudStackCRNamespaceRead, resourceAlibabacloudStackCRNamespaceUpdate, resourceAlibabacloudStackCRNamespaceDelete) return resource } func resourceAlibabacloudStackCRNamespaceCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) resp := crResponse{} namespaceName := d.Get("name").(string) request := client.NewCommonRequest("PUT", "cr", "2016-06-07", "CreateNamespace", "/namespace") body := map[string]interface{}{ "namespace": map[string]interface{}{ "namespace": namespaceName, "haApsaraStack": "false", "arch": "x86_64", }, } jsonData, err := json.Marshal(body) if err != nil { return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err)) } request.SetContentType(requests.Json) request.SetContent(jsonData) 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, "alibabacloudstack_cr_namespace", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } log.Printf("response for create %v", bresponse) err = json.Unmarshal(bresponse.GetHttpContentBytes(), &resp) if err != nil { return errmsgs.WrapError(fmt.Errorf("Error Unmarshal to JSON: %v", err)) } log.Printf("unmarshalled response for create %v", resp) addDebug(request.GetActionName(), bresponse, request) create := d.Get("auto_create").(bool) visibility := d.Get("default_visibility").(string) if create == false || visibility == "PUBLIC" { request := client.NewCommonRequest("POST", "cr", "2016-06-07", "UpdateNamespace", fmt.Sprintf("/namespace/%s", namespaceName)) body = map[string]interface{}{ "namespace": map[string]interface{}{ "AutoCreate": fmt.Sprintf("%t", create), "DefaultVisibility": visibility, }, } request.QueryParams["Namespace"] = namespaceName jsonData, err := json.Marshal(body) if err != nil { return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err)) } request.SetContentType(requests.Json) request.SetContent(jsonData) uresponse, err := client.ProcessCommonRequest(request) if err != nil { if uresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(uresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_cr_namespace", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(uresponse.GetHttpContentBytes(), &resp) log.Printf("response for update %v", &resp) if err != nil { return errmsgs.WrapError(fmt.Errorf("Error Unmarshal to JSON: %v", err)) } addDebug(request.GetActionName(), uresponse, request) } d.SetId(namespaceName) return nil } func resourceAlibabacloudStackCRNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) create := d.Get("auto_create").(bool) visibility := d.Get("default_visibility").(string) if d.HasChanges("auto_create", "default_visibility") { request := client.NewCommonRequest("POST", "cr", "2016-06-07", "UpdateNamespace", fmt.Sprintf("/namespace/%s", d.Id())) body := map[string]interface{}{ "namespace": map[string]interface{}{ "AutoCreate": fmt.Sprintf("%t", create), "DefaultVisibility": visibility, }, } request.QueryParams["Namespace"] = d.Id() jsonData, err := json.Marshal(body) if err != nil { return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err)) } request.SetContentType(requests.Json) request.SetContent(jsonData) uresponse, err := client.ProcessCommonRequest(request) if err != nil { if uresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(uresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } addDebug(request.GetActionName(), uresponse, request) } return nil } func resourceAlibabacloudStackCRNamespaceRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) crService := CrService{client} object, err := crService.DescribeCrNamespace(d.Id()) if err != nil { if errmsgs.NotFoundError(err) { d.SetId("") return nil } return errmsgs.WrapError(err) } d.Set("name", object.Data.Namespace.Namespace) d.Set("auto_create", object.Data.Namespace.AutoCreate) d.Set("default_visibility", object.Data.Namespace.DefaultVisibility) return nil } func resourceAlibabacloudStackCRNamespaceDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) resp := crResponse{} request := client.NewCommonRequest("DELETE", "cr", "2016-06-07", "DeleteNamespace", fmt.Sprintf("/namespace/%s", d.Id())) request.QueryParams["Namespace"] = d.Id() uresponse, err := client.ProcessCommonRequest(request) if err != nil { if uresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(uresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_cr_namespace", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(uresponse.GetHttpContentBytes(), &resp) log.Printf("response for delete %v", &resp) if err != nil { return errmsgs.WrapError(fmt.Errorf("Error Unmarshal to JSON: %v", err)) } addDebug(request.GetActionName(), uresponse, request) return nil }