| 11 | ) |
| 12 | |
| 13 | func (ctl *controller) createDatabase(ctx context.Context, project *v1pb.Project, instance *v1pb.Instance, environment *v1pb.EnvironmentSetting_Environment, databaseName string, owner string) error { |
| 14 | characterSet, collation := "utf8mb4", "utf8mb4_general_ci" |
| 15 | if instance.Engine == v1pb.Engine_POSTGRES { |
| 16 | characterSet = "UTF8" |
| 17 | collation = "en_US.UTF-8" |
| 18 | } |
| 19 | environmentName := "" |
| 20 | if environment != nil { |
| 21 | environmentName = environment.Name |
| 22 | } |
| 23 | |
| 24 | planResp, err := ctl.planServiceClient.CreatePlan(ctx, connect.NewRequest(&v1pb.CreatePlanRequest{ |
| 25 | Parent: project.Name, |
| 26 | Plan: &v1pb.Plan{ |
| 27 | Specs: []*v1pb.Plan_Spec{ |
| 28 | { |
| 29 | Id: uuid.NewString(), |
| 30 | Config: &v1pb.Plan_Spec_CreateDatabaseConfig{ |
| 31 | CreateDatabaseConfig: &v1pb.Plan_CreateDatabaseConfig{ |
| 32 | Target: instance.Name, |
| 33 | Database: databaseName, |
| 34 | CharacterSet: characterSet, |
| 35 | Collation: collation, |
| 36 | Owner: owner, |
| 37 | Environment: environmentName, |
| 38 | }, |
| 39 | }, |
| 40 | }, |
| 41 | }, |
| 42 | }, |
| 43 | })) |
| 44 | if err != nil { |
| 45 | return err |
| 46 | } |
| 47 | issueResp, err := ctl.issueServiceClient.CreateIssue(ctx, connect.NewRequest(&v1pb.CreateIssueRequest{ |
| 48 | Parent: project.Name, |
| 49 | Issue: &v1pb.Issue{ |
| 50 | Title: fmt.Sprintf("create database %q", databaseName), |
| 51 | Description: fmt.Sprintf("This creates a database %q.", databaseName), |
| 52 | Plan: planResp.Msg.Name, |
| 53 | Type: v1pb.Issue_DATABASE_CHANGE, |
| 54 | }, |
| 55 | })) |
| 56 | if err != nil { |
| 57 | return err |
| 58 | } |
| 59 | rolloutResp, err := ctl.rolloutServiceClient.CreateRollout(ctx, connect.NewRequest(&v1pb.CreateRolloutRequest{Parent: planResp.Msg.Name})) |
| 60 | if err != nil { |
| 61 | return err |
| 62 | } |
| 63 | |
| 64 | return ctl.waitRollout(ctx, issueResp.Msg.Name, rolloutResp.Msg.Name) |
| 65 | } |