alibabacloudstack/service_apsarastack_elasticsearch.go (515 lines of code) (raw):
package alibabacloudstack
import (
"encoding/json"
"fmt"
"strings"
"time"
"github.com/PaesslerAG/jsonpath"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
"github.com/aliyun/alibaba-cloud-sdk-go/services/elasticsearch"
"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"
)
type ElasticsearchService struct {
client *connectivity.AlibabacloudStackClient
}
func (s *ElasticsearchService) DescribeElasticsearchInstance(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
request := make(map[string]interface{})
response, err = s.client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "DescribeInstance", "", nil, nil, request)
addDebug("DescribeInstance", response, nil)
if err != nil {
if errmsgs.IsExpectedErrors(err, []string{"InstanceNotFound"}) {
return object, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR)
}
return object, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, id, "DescribeInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
if fmt.Sprint(response["Success"]) == "false" {
return object, errmsgs.WrapError(fmt.Errorf("%s failed, response: %v", "DescribeInstance", response))
}
v, err := jsonpath.Get("$", response)
if err != nil {
return object, errmsgs.WrapErrorf(err, errmsgs.FailedGetAttributeMsg, id, "$", response)
}
object = v.(map[string]interface{})
if (object["instanceId"].(string)) != id {
return object, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("Elasticsearch Instance", id)), errmsgs.NotFoundWithResponse, response)
}
return object, nil
}
func (s *ElasticsearchService) DescribeElasticsearchOnk8sInstance(id string) (object map[string]interface{}, err error) {
request := make(map[string]interface{})
request["InstanceId"] = id
request["ClientToken"] = buildClientToken("DescribeInstance")
response, err := s.client.DoTeaRequest("POST", "elasticsearch-k8s", "2017-06-13", "DescribeInstance", "", nil, nil, request)
addDebug("DescribeInstance", response, request)
if err != nil {
if errmsgs.IsExpectedErrors(err, []string{"InstanceNotFound"}) {
return nil, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR)
}
return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, id, "DescribeInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
if fmt.Sprint(response["asapiSuccess"]) == "false" {
return nil, errmsgs.WrapError(fmt.Errorf("%s failed, response: %v", "DescribeInstance", response))
}
v, err := jsonpath.Get("$.Result", response)
if err != nil {
return nil, errmsgs.WrapErrorf(err, errmsgs.FailedGetAttributeMsg, id, "$.Result", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ElasticsearchService) ElasticsearchStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeElasticsearchInstance(id)
if err != nil {
if errmsgs.NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", errmsgs.WrapError(err)
}
for _, failState := range failStates {
if object["status"].(string) == failState {
return object, object["status"].(string), errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, object["status"].(string)))
}
}
return object, object["status"].(string), nil
}
}
func (s *ElasticsearchService) ElasticsearchRetryFunc(wait func(), errorCodeList []string, do func(*elasticsearch.Client) (interface{}, error)) (interface{}, error) {
var raw interface{}
var err error
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithElasticsearchClient(do)
if err != nil {
if errmsgs.IsExpectedErrors(err, errorCodeList) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
return raw, errmsgs.WrapError(err)
}
func (s *ElasticsearchService) TriggerNetwork(d *schema.ResourceData, content map[string]interface{}, meta interface{}) error {
var response map[string]interface{}
request := make(map[string]interface{})
request["clientToken"] = buildClientToken("TriggerNetwork")
request["product"] = "elasticsearch"
response, err := s.client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "TriggerNetwork", "", nil, nil, request)
addDebug("TriggerNetwork", response, content)
if err != nil {
if errmsgs.IsExpectedErrors(err, []string{"RepetitionOperationError"}) {
return nil
}
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "TriggerNetwork", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, s.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func (s *ElasticsearchService) ModifyWhiteIps(d *schema.ResourceData, content map[string]interface{}, meta interface{}) error {
var response map[string]interface{}
request := make(map[string]interface{})
request["clientToken"] = buildClientToken("ModifyWhiteIps")
request["product"] = "elasticsearch"
response, err := s.client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "ModifyWhiteIps", "", nil, nil, request)
addDebug("ModifyWhiteIps", response, nil)
if err != nil {
if errmsgs.IsExpectedErrors(err, []string{"ConcurrencyUpdateInstanceConflict", "InstanceStatusNotSupportCurrentAction", "InternalServerError"}) || errmsgs.NeedRetry(err) {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = s.client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "ModifyWhiteIps", "", nil, nil, request)
if err != nil {
if errmsgs.IsExpectedErrors(err, []string{"ConcurrencyUpdateInstanceConflict", "InstanceStatusNotSupportCurrentAction", "InternalServerError"}) || errmsgs.NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug("ModifyWhiteIps", response, nil)
return nil
})
}
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "ModifyWhiteIps", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, s.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func (s *ElasticsearchService) DescribeElasticsearchTags(id string) (tags map[string]string, err error) {
resourceIds, err := json.Marshal([]string{id})
if err != nil {
tmp := make(map[string]string)
return tmp, errmsgs.WrapError(err)
}
request := elasticsearch.CreateListTagResourcesRequest()
s.client.InitRoaRequest(*request.RoaRequest)
request.ResourceIds = string(resourceIds)
request.ResourceType = strings.ToUpper(string(TagResourceInstance))
raw, err := s.client.WithElasticsearchClient(func(elasticsearchClient *elasticsearch.Client) (interface{}, error) {
return elasticsearchClient.ListTagResources(request)
})
addDebug(request.GetActionName(), raw, request.RoaRequest, request)
response, ok := raw.(*elasticsearch.ListTagResourcesResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(raw.(*responses.BaseResponse))
}
tmp := make(map[string]string)
return tmp, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, id, request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
return s.tagsToMap(response.TagResources.TagResource), nil
}
func (s *ElasticsearchService) tagsToMap(tagSet []elasticsearch.TagResourceItem) (tags map[string]string) {
result := make(map[string]string)
for _, t := range tagSet {
if !elasticsearchTagIgnored(t.TagKey, t.TagValue) {
result[t.TagKey] = t.TagValue
}
}
return result
}
func (s *ElasticsearchService) diffElasticsearchTags(oldTags, newTags map[string]interface{}) (remove []string, add []map[string]string) {
for k, _ := range oldTags {
remove = append(remove, k)
}
for k, v := range newTags {
tag := map[string]string{
"key": k,
"value": v.(string),
}
add = append(add, tag)
}
return
}
func (s *ElasticsearchService) getActionType(actionType bool) string {
if actionType == true {
return string(OPEN)
} else {
return string(CLOSE)
}
}
func updateDescription(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
request := make(map[string]interface{})
request["InstanceId"] = d.Id()
request["description"] = d.Get("description").(string)
request["ClientToken"] = buildClientToken("UpdateDescription")
response, err := client.DoTeaRequest("POST", "elasticsearch-k8s", "2017-06-13", "UpdateDescription", "", nil, nil, request)
addDebug("UpdateDescription", response, request)
if err != nil {
if errmsgs.IsExpectedErrors(err, []string{"UpdateDescriptionFailed"}) {
return errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR)
}
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Get("description").(string), "UpdateDescription", errmsgs.AlibabacloudStackSdkGoERROR)
}
return nil
}
func updateInstanceTags(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
oraw, nraw := d.GetChange("tags")
o := oraw.(map[string]interface{})
n := nraw.(map[string]interface{})
remove, add := elasticsearchService.diffElasticsearchTags(o, n)
// 对系统 Tag 进行过滤
removeTagKeys := make([]string, 0)
for _, v := range remove {
if !elasticsearchTagIgnored(v, "") {
removeTagKeys = append(removeTagKeys, v)
}
}
if len(removeTagKeys) > 0 {
tagKeys, err := json.Marshal(removeTagKeys)
if err != nil {
return errmsgs.WrapError(err)
}
resourceIds, err := json.Marshal([]string{d.Id()})
if err != nil {
return errmsgs.WrapError(err)
}
request := elasticsearch.CreateUntagResourcesRequest()
client.InitRoaRequest(*request.RoaRequest)
request.TagKeys = string(tagKeys)
request.ResourceType = strings.ToUpper(string(TagResourceInstance))
request.ResourceIds = string(resourceIds)
request.SetContentType("application/json")
raw, err := client.WithElasticsearchClient(func(elasticsearchClient *elasticsearch.Client) (interface{}, error) {
return elasticsearchClient.UntagResources(request)
})
addDebug(request.GetActionName(), raw, request.RoaRequest, request)
response, ok := raw.(elasticsearch.UntagResourcesResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(response.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
}
if len(add) > 0 {
content := make(map[string]interface{})
content["ResourceIds"] = []string{d.Id()}
content["ResourceType"] = strings.ToUpper(string(TagResourceInstance))
content["Tags"] = add
data, err := json.Marshal(content)
if err != nil {
return errmsgs.WrapError(err)
}
request := elasticsearch.CreateTagResourcesRequest()
client.InitRoaRequest(*request.RoaRequest)
request.SetContent(data)
request.SetContentType("application/json")
raw, err := client.WithElasticsearchClient(func(elasticsearchClient *elasticsearch.Client) (interface{}, error) {
return elasticsearchClient.TagResources(request)
})
addDebug(request.GetActionName(), raw, request.RoaRequest, request)
response, ok := raw.(*elasticsearch.TagResourcesResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(response.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
}
return nil
}
func updateInstanceChargeType(d *schema.ResourceData, meta interface{}) error {
var response map[string]interface{}
client := meta.(*connectivity.AlibabacloudStackClient)
content := make(map[string]interface{})
content["paymentType"] = strings.ToLower(d.Get("instance_charge_type").(string))
if d.Get("instance_charge_type").(string) == string(PrePaid) {
paymentInfo := make(map[string]interface{})
if d.Get("period").(int) >= 12 {
paymentInfo["duration"] = d.Get("period").(int) / 12
paymentInfo["pricingCycle"] = string(Year)
} else {
paymentInfo["duration"] = d.Get("period").(int)
paymentInfo["pricingCycle"] = string(Month)
}
content["paymentInfo"] = paymentInfo
}
content["clientToken"] = buildClientToken("UpdateInstanceChargeType")
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "UpdateInstanceChargeType", "", nil, nil, content)
time.Sleep(10 * time.Second)
addDebug("UpdateInstanceChargeType", response, content)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), response, errmsgs.AlibabacloudStackSdkGoERROR)
}
return nil
}
func renewInstance(d *schema.ResourceData, meta interface{}) error {
var response map[string]interface{}
client := meta.(*connectivity.AlibabacloudStackClient)
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("RenewInstance")
if d.Get("period").(int) >= 12 {
content["duration"] = d.Get("period").(int) / 12
content["pricingCycle"] = string(Year)
} else {
content["duration"] = d.Get("period").(int)
content["pricingCycle"] = string(Month)
}
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "RenewInstance", "", nil, nil, content)
time.Sleep(10 * time.Second)
addDebug("RenewInstance", response, content)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), response, errmsgs.AlibabacloudStackSdkGoERROR)
}
return nil
}
func updateDataNodeAmount(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("UpdateInstance")
content["nodeAmount"] = d.Get("data_node_amount").(int)
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "UpdateInstance", "", nil, nil, content)
addDebug("UpdateInstance", response, content)
if err != nil && !errmsgs.IsExpectedErrors(err, []string{"MustChangeOneResource", "CssCheckUpdowngradeError"}) {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "UpdateInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func updateDataNodeSpec(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("UpdateInstance")
spec := make(map[string]interface{})
spec["spec"] = d.Get("data_node_spec")
spec["disk"] = d.Get("data_node_disk_size")
spec["diskType"] = d.Get("data_node_disk_type")
content["nodeSpec"] = spec
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "UpdateInstance", "", nil, nil, content)
addDebug("UpdateInstance", response, content)
if err != nil && !errmsgs.IsExpectedErrors(err, []string{"MustChangeOneResource", "CssCheckUpdowngradeError"}) {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "UpdateInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func updateMasterNode(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("UpdateInstance")
if d.Get("master_node_spec") != nil {
master := make(map[string]interface{})
master["spec"] = d.Get("master_node_spec").(string)
master["amount"] = "3"
master["diskType"] = "cloud_ssd"
master["disk"] = "20"
content["masterConfiguration"] = master
content["advancedDedicateMaster"] = true
} else {
content["advancedDedicateMaster"] = false
}
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "UpdateInstance", "", nil, nil, content)
addDebug("UpdateInstance", response, content)
if err != nil && !errmsgs.IsExpectedErrors(err, []string{"MustChangeOneResource", "CssCheckUpdowngradeError"}) {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "UpdateInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func updatePassword(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("UpdateAdminPassword")
password := d.Get("password").(string)
kmsPassword := d.Get("kms_encrypted_password").(string)
if password == "" && kmsPassword == "" {
return errmsgs.WrapError(errmsgs.Error("One of the 'password' and 'kms_encrypted_password' should be set."))
}
if password != "" {
content["esAdminPassword"] = password
} else {
kmsService := KmsService{meta.(*connectivity.AlibabacloudStackClient)}
decryptResp, err := kmsService.Decrypt(kmsPassword, d.Get("kms_encryption_context").(map[string]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
content["esAdminPassword"] = decryptResp
}
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "UpdateAdminPassword", "", nil, nil, content)
addDebug("UpdateAdminPassword", response, content)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "UpdateAdminPassword", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func getChargeType(paymentType string) string {
if strings.ToLower(paymentType) == strings.ToLower(string(PostPaid)) {
return string(PostPaid)
} else {
return string(PrePaid)
}
}
func filterWhitelist(destIPs []string, localIPs *schema.Set) []string {
var whitelist []string
if destIPs != nil {
for _, ip := range destIPs {
if (ip == "::1" || ip == "::/0" || ip == "127.0.0.1" || ip == "0.0.0.0/0") && !localIPs.Contains(ip) {
continue
}
whitelist = append(whitelist, ip)
}
}
return whitelist
}
func updateClientNode(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("UpdateInstance")
content["isHaveClientNode"] = true
spec := make(map[string]interface{})
spec["spec"] = d.Get("client_node_spec")
if d.Get("client_node_amount") == nil {
spec["amount"] = "2"
} else {
spec["amount"] = d.Get("client_node_amount")
}
spec["disk"] = "20"
spec["diskType"] = "cloud_efficiency"
content["clientNodeConfiguration"] = spec
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "UpdateInstance", "", nil, nil, content)
addDebug("UpdateInstance", response, content)
if err != nil && !errmsgs.IsExpectedErrors(err, []string{"MustChangeOneResource", "CssCheckUpdowngradeError"}) {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "UpdateInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func openHttps(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("OpenHttps")
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "OpenHttps", "", nil, nil, content)
addDebug("OpenHttps", response, nil)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "OpenHttps", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}
func closeHttps(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
elasticsearchService := ElasticsearchService{client}
content := make(map[string]interface{})
content["clientToken"] = buildClientToken("CloseHttps")
response, err := client.DoTeaRequest("POST", "elasticsearch", "2017-06-13", "CloseHttps", "", nil, nil, content)
addDebug("CloseHttps", response, nil)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "CloseHttps", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
return nil
}