( ctx context.Context, projectID string, instanceMessage *store.InstanceMessage, schemaSyncer *schemasync.Syncer, )
| 216 | } |
| 217 | |
| 218 | func (m *Manager) generateInstance( |
| 219 | ctx context.Context, |
| 220 | projectID string, |
| 221 | instanceMessage *store.InstanceMessage, |
| 222 | schemaSyncer *schemasync.Syncer, |
| 223 | ) error { |
| 224 | // Generate Sample Instance |
| 225 | instance, err := m.store.GetInstance(ctx, &store.FindInstanceMessage{ |
| 226 | Workspace: instanceMessage.Workspace, |
| 227 | ResourceID: &instanceMessage.ResourceID, |
| 228 | }) |
| 229 | if err != nil { |
| 230 | return errors.Wrapf(err, "failed to find onboarding instance %v", instanceMessage.ResourceID) |
| 231 | } |
| 232 | if instance == nil { |
| 233 | sampleInstance, err := m.store.CreateInstance(ctx, &store.InstanceMessage{ |
| 234 | Workspace: instanceMessage.Workspace, |
| 235 | ResourceID: instanceMessage.ResourceID, |
| 236 | EnvironmentID: instanceMessage.EnvironmentID, |
| 237 | Metadata: &storepb.Instance{ |
| 238 | Title: instanceMessage.Metadata.Title, |
| 239 | Engine: storepb.Engine_POSTGRES, |
| 240 | ExternalLink: "", |
| 241 | Activation: false, |
| 242 | DataSources: []*storepb.DataSource{ |
| 243 | { |
| 244 | Id: "admin", |
| 245 | Type: storepb.DataSourceType_ADMIN, |
| 246 | Username: postgres.SampleUser, |
| 247 | Password: "", |
| 248 | Host: common.GetPostgresSocketDir(), |
| 249 | Port: instanceMessage.Metadata.DataSources[0].Port, |
| 250 | Database: instanceMessage.Metadata.DataSources[0].Database, |
| 251 | }, |
| 252 | }, |
| 253 | }, |
| 254 | }) |
| 255 | if err != nil { |
| 256 | return errors.Wrapf(err, "failed to create onboarding instance %v", instanceMessage.ResourceID) |
| 257 | } |
| 258 | instance = sampleInstance |
| 259 | |
| 260 | // Start the sample instance if needed |
| 261 | if err := m.HandleInstanceCreation(ctx, instance.ResourceID); err != nil { |
| 262 | slog.Warn("failed to start sample instance during onboarding", log.BBError(err), slog.String("instance", instance.ResourceID)) |
| 263 | } |
| 264 | } |
| 265 | |
| 266 | // Sync the instance schema so we can transfer the sample database later. |
| 267 | if _, _, _, err := schemaSyncer.SyncInstance(ctx, instance); err != nil { |
| 268 | return errors.Wrapf(err, "failed to sync onboarding instance %v", instance.ResourceID) |
| 269 | } |
| 270 | |
| 271 | dbName := instanceMessage.Metadata.DataSources[0].Database |
| 272 | // Transfer sample database to the just created project. |
| 273 | transferDatabaseMessage := &store.UpdateDatabaseMessage{ |
| 274 | InstanceID: instance.ResourceID, |
| 275 | DatabaseName: dbName, |
no test coverage detected