in alibabacloudstack/resource_apsarastack_polardb_instance.go [235:466]
func resourceAlibabacloudStackPolardbInstanceCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
PolardbService := PolardbService{client}
vpcService := VpcService{client}
var VSwitchId, InstanceNetworkType, ZoneIdSlave1, ZoneIdSlave2, ZoneId, VPCId, arnrole string
var encryption bool
EncryptionKey := d.Get("encryption_key").(string)
encryption = d.Get("encryption").(bool)
EncryptAlgorithm := d.Get("encrypt_algorithm").(string)
log.Print("Encryption key input")
if EncryptionKey != "" && encryption == true {
log.Print("Encryption key condition passed")
req := client.NewCommonRequest("POST", "polardb", "2024-01-30", "CheckCloudResourceAuthorized", "")
req.QueryParams["TargetRegionId"] = client.RegionId
var arnresp RoleARN
bresponse, err := client.ProcessCommonRequest(req)
addDebug(req.GetActionName(), bresponse, req, req.QueryParams)
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_polardb_db_instance", "CheckCloudResourceAuthorized", req.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &arnresp)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "CheckCloudResourceAuthorized", errmsgs.AlibabacloudStackSdkGoERROR)
}
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "CheckCloudResourceAuthorized", req.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR)
}
arnrole = arnresp.RoleArn
d.Set("role_arn", arnrole)
log.Printf("check arnrole %v", arnrole)
} else if EncryptionKey == "" && encryption == true {
return errmsgs.WrapErrorf(nil, "Add EncryptionKey or Set encryption to false", "CheckCloudResourceAuthorized", errmsgs.AlibabacloudStackSdkGoERROR)
} else if EncryptionKey != "" && encryption == false {
return errmsgs.WrapErrorf(nil, "Set encryption to true", "CheckCloudResourceAuthorized", errmsgs.AlibabacloudStackSdkGoERROR)
} else {
log.Print("Encryption key condition failed")
}
d.Set("encryption", encryption)
log.Printf("encryptionbool %v", d.Get("encryption").(bool))
enginever := Trim(d.Get("engine_version").(string))
engine := Trim(d.Get("engine").(string))
DBInstanceStorage := connectivity.GetResourceData(d, "db_instance_storage", "instance_storage").(int)
if err := errmsgs.CheckEmpty(DBInstanceStorage, schema.TypeString, "db_instance_storage", "instance_storage"); err != nil {
return errmsgs.WrapError(err)
}
DBInstanceClass := Trim(connectivity.GetResourceData(d, "db_instance_class", "instance_type").(string))
if err := errmsgs.CheckEmpty(DBInstanceClass, schema.TypeString, "db_instance_class", "instance_type"); err != nil {
return errmsgs.WrapError(err)
}
DBInstanceNetType := string(Intranet)
DBInstanceDescription := connectivity.GetResourceData(d, "db_instance_description", "instance_name").(string)
if zone, ok := d.GetOk("zone_id"); ok && Trim(zone.(string)) != "" {
ZoneId = Trim(zone.(string))
}
vswitchId := Trim(d.Get("vswitch_id").(string))
InstanceNetworkType = string(Classic)
if vswitchId != "" {
VSwitchId = vswitchId
InstanceNetworkType = strings.ToUpper(string(Vpc))
// check vswitchId in zone
vsw, err := vpcService.DescribeVSwitch(vswitchId)
if err != nil {
return nil
}
if ZoneId == "" {
ZoneId = vsw.ZoneId
}
VPCId = vsw.VpcId
}
payType := string(Postpaid)
if v, ok := connectivity.GetResourceDataOk(d, "payment_type", "instance_charge_type"); ok && Trim(v.(string)) != "" {
payType = Trim(v.(string))
}
DBInstanceStorageType := connectivity.GetResourceData(d, "db_instance_storage_type", "storage_type").(string)
if err := errmsgs.CheckEmpty(DBInstanceStorageType, schema.TypeString, "db_instance_storage_type", "storage_type"); err != nil {
return errmsgs.WrapError(err)
}
ZoneIdSlave1 = d.Get("zone_id_slave1").(string)
ZoneIdSlave2 = d.Get("zone_id_slave2").(string)
SecurityIPList := LOCAL_HOST_IP
if len(d.Get("security_ips").(*schema.Set).List()) > 0 {
SecurityIPList = strings.Join(expandStringList(d.Get("security_ips").(*schema.Set).List())[:], COMMA_SEPARATED)
}
uuid, err := uuid.GenerateUUID()
if err != nil {
uuid = resource.UniqueId()
}
ClientToken := fmt.Sprintf("Terraform-AlibabacloudStack-%d-%s", time.Now().Unix(), uuid)
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "CreateDBInstance", "")
PolardbCreatedbinstanceResponse := PolardbCreatedbinstanceResponse{}
mergeMaps(request.QueryParams, map[string]string{
"EngineVersion": enginever,
"Engine": engine,
"Encryption": strconv.FormatBool(encryption),
"DBInstanceStorage": strconv.Itoa(DBInstanceStorage),
"DBInstanceClass": DBInstanceClass,
"DBInstanceNetType": DBInstanceNetType,
"DBInstanceDescription": DBInstanceDescription,
"InstanceNetworkType": InstanceNetworkType,
"VSwitchId": VSwitchId,
"PayType": payType,
"DBInstanceStorageType": DBInstanceStorageType,
"SecurityIPList": SecurityIPList,
"ClientToken": ClientToken,
"ZoneIdSlave1": ZoneIdSlave1,
"ZoneIdSlave2": ZoneIdSlave2,
"EncryptionKey": EncryptionKey,
"ZoneId": ZoneId,
"VPCId": VPCId,
"RoleARN": arnrole,
})
if tde := d.Get("tde_status"); tde == true && engine != "MySQL" {
request.QueryParams["TdeStatus"] = "1"
request.QueryParams["EncryptAlgorithm"] = EncryptAlgorithm
request.QueryParams["RoleARN"] = arnrole
if EncryptionKey != "" {
request.QueryParams["EncryptionKey"] = EncryptionKey
}
}
log.Printf("request245 %v", request.QueryParams)
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_polardb_db_instance", "CreateDBInstance", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug("CreateDBInstance", bresponse, request, request.QueryParams)
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbCreatedbinstanceResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "CreateDBInstance", errmsgs.AlibabacloudStackSdkGoERROR)
}
d.SetId(PolardbCreatedbinstanceResponse.DBInstanceId)
d.Set("connection_string", PolardbCreatedbinstanceResponse.ConnectionString)
stateConf := BuildStateConfByTimes([]string{"Creating"}, []string{"Running"}, d.Timeout(schema.TimeoutCreate), 5*time.Minute, PolardbService.PolardbDBInstanceStateRefreshFunc(d, client, d.Id(), []string{"Deleting"}), 100)
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
tde := d.Get("tde_status").(bool)
log.Printf(" ============================================= tde:%t, engine:%s", tde, engine)
if tde == true && engine == "MySQL" {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceTDE", "")
PolardbModifydbinstancetdeResponse := PolardbModifydbinstancetdeResponse{}
request.QueryParams["TDEStatus"] = "Enabled"
request.QueryParams["RoleARN"] = arnrole
request.QueryParams["EncryptAlgorithm"] = EncryptAlgorithm
if EncryptionKey != "" {
request.QueryParams["EncryptionKey"] = EncryptionKey
}
bresponse, err := client.ProcessCommonRequest(request)
addDebug("ModifyDBInstanceTDE", bresponse, request, request.QueryParams)
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_polardb_db_instance", "ModifyDBInstanceTDE", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancetdeResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceTDE", errmsgs.AlibabacloudStackSdkGoERROR)
}
stateConf := BuildStateConf([]string{"Disabled"}, []string{"Enabled"}, d.Timeout(schema.TimeoutCreate), 2*time.Minute, PolardbService.PolardbDBInstanceTdeStateRefreshFunc(d, client, d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
log.Print("enabled TDE")
}
if ssl := d.Get("enable_ssl"); ssl == true {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceSSL", "")
PolardbModifydbinstancesslResponse := PolardbModifydbinstancesslResponse{}
//request.QueryParams["Forwardedregionid"] = client.RegionId
request.QueryParams["DBInstanceId"] = d.Id()
request.QueryParams["SSLEnabled"] = "1"
request.QueryParams["ConnectionString"] = d.Get("connection_string").(string)
bresponse, err := client.ProcessCommonRequest(request)
addDebug("ModifyDBInstanceSSL", bresponse, request, request.QueryParams)
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_polardb_db_instance", "ModifyDBInstanceSSL", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancesslResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceSSL", errmsgs.AlibabacloudStackSdkGoERROR)
}
var target, process string
if engine == "MySQL" {
target = "Yes"
process = "No"
} else {
target = "on"
process = "off"
}
stateConf := BuildStateConf([]string{process}, []string{target}, d.Timeout(schema.TimeoutCreate), 2*time.Minute, PolardbService.PolardbDBInstanceSslStateRefreshFunc(d, client, d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
log.Print("enabled SSL")
}
return nil
}