in alibabacloudstack/resource_apsarastack_kvstore_instance.go [221:350]
func resourceAlibabacloudStackKVStoreInstanceCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
vpcService := VpcService{client}
kvstoreService := KvstoreService{client}
var response map[string]interface{}
action := "CreateInstance"
request := make(map[string]interface{})
request["ClientToken"] = buildClientToken("CreateInstance")
if v, ok := connectivity.GetResourceDataOk(d, "tair_instance_name", "instance_name"); ok {
request["InstanceName"] = v.(string)
}
if v, ok := d.GetOk("cpu_type"); ok {
request["CpuType"] = v.(string)
}
if v, ok := d.GetOk("node_type"); ok {
request["NodeType"] = v.(string)
}
if v, ok := d.GetOk("architecture_type"); ok && v.(string) != "" {
request["ArchitectureType"] = v.(string)
}
if v, ok := d.GetOk("instance_type"); ok {
request["InstanceType"] = v.(string)
}
if v, ok := d.GetOk("engine_version"); ok {
request["EngineVersion"] = v.(string)
}
if v, ok := d.GetOk("instance_class"); ok {
request["InstanceClass"] = v.(string)
}
// if v, ok := connectivity.GetResourceDataOk(d, "payment_type", "instance_charge_type"); ok {
// request["ChargeType"] = v.(string)
// } else {
// request["ChargeType"] = string(PostPaid)
// }
if v, ok := d.GetOk("password"); ok {
request["Password"] = v.(string)
}
if v, ok := d.GetOk("series"); ok {
request["Series"] = v.(string)
}
if request["Password"] == "" {
if v := d.Get("kms_encrypted_password").(string); v != "" {
kmsService := KmsService{client}
decryptResp, err := kmsService.Decrypt(v, d.Get("kms_encryption_context").(map[string]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
request["Password"] = decryptResp.Plaintext
}
}
if v, ok := d.GetOk("backup_id"); ok {
request["BackupId"] = v.(string)
}
// if request["ChargeType"] == PrePaid {
// request["Period"] = strconv.Itoa(d.Get("period").(int))
// }
if v, ok := connectivity.GetResourceDataOk(d, "zone_id", "availability_zone"); ok && Trim(v.(string)) != "" {
request["ZoneId"] = Trim(v.(string))
}
request["NetworkType"] = strings.ToUpper(string(Classic))
if vswitchId, ok := d.GetOk("vswitch_id"); ok && vswitchId.(string) != "" {
request["VSwitchId"] = vswitchId.(string)
request["NetworkType"] = strings.ToUpper(string(Vpc))
// request["PrivateIpAddress"] = Trim(d.Get("private_ip").(string))
// check vswitchId in zone
object, err := vpcService.DescribeVSwitch(vswitchId.(string))
if err != nil {
return errmsgs.WrapError(err)
}
if request["ZoneId"] == "" {
request["ZoneId"] = object.ZoneId
}
request["VpcId"] = object.VpcId
}
response, err := client.DoTeaRequest("POST", "R-kvstore", "2015-01-01", action, "", nil, nil, request)
log.Printf(" create kvstroe instances Finished !! response: %v", response)
if err != nil {
return err
}
if value, exist := response["asapiSuccess"]; !exist || !value.(bool) {
err = errmsgs.Error("create kvstroe instances Failed !!")
return errmsgs.WrapErrorf(err, "create kvstroe instances Failed !! %s", action, errmsgs.AlibabacloudStackSdkGoERROR)
}
d.SetId(fmt.Sprint(response["InstanceId"]))
log.Printf("begin describe kvstroe instances !!")
// wait instance status change from Creating to Normal
stateConf := BuildStateConfByTimes([]string{"Creating"}, []string{"Normal"}, d.Timeout(schema.TimeoutCreate), 1*time.Minute, kvstoreService.RdsKvstoreInstanceStateRefreshFunc(d.Id(), []string{"Deleting"}), 200)
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
log.Printf("begin update kvstroe instances !!")
if tde, ok := d.GetOk("tde_status"); ok && tde.(string) == "Enabled" {
tde_req := make(map[string]interface{})
tde_req["InstanceId"] = d.Id()
tde_req["TDEStatus"] = tde.(string)
if encryption_key, ok := d.GetOk("encryption_key"); ok && encryption_key != "" {
tde_req["EncryptionKey"] = encryption_key
} else {
if role_arn, ok := d.GetOk("role_arn"); ok && role_arn.(string) != "" {
tde_req["RoleArn"] = d.Get("role_arn").(string)
} else if client.Config.RamRoleArn != "" {
tde_req["RoleArn"] = client.Config.RamRoleArn
}
}
tde_response, err := client.DoTeaRequest("POST", "R-kvstore", "2015-01-01", "ModifyInstanceTDE", "", nil, nil, tde_req)
addDebug("ModifyInstanceTDE", tde_response, tde_req)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "apsarastack_kvstroe_instance", "ModifyInstanceTDE", errmsgs.AlibabacloudStackSdkGoERROR)
}
if value, exist := tde_response["asapiSuccess"]; !exist || !value.(bool) {
err = errmsgs.Error("kvstroe ModifyInstanceTDE Failed !!")
return errmsgs.WrapErrorf(err, "kvstroe ModifyInstanceTDE Failed !! %s", action, errmsgs.AlibabacloudStackSdkGoERROR)
}
log.Print("enabled TDE")
}
return nil
}