database.go raw
1 package govultr
2
3 import (
4 "context"
5 "fmt"
6 "net/http"
7
8 "github.com/google/go-querystring/query"
9 )
10
11 const databasePath = "/v2/databases"
12
13 // DatabaseService is the interface to interact with the Database endpoints on the Vultr API
14 // Link: https://www.vultr.com/api/#tag/managed-databases
15 type DatabaseService interface {
16 ListPlans(ctx context.Context, options *DBPlanListOptions) ([]DatabasePlan, *Meta, *http.Response, error)
17
18 List(ctx context.Context, options *DBListOptions) ([]Database, *Meta, *http.Response, error)
19 Create(ctx context.Context, databaseReq *DatabaseCreateReq) (*Database, *http.Response, error)
20 Get(ctx context.Context, databaseID string) (*Database, *http.Response, error)
21 Update(ctx context.Context, databaseID string, databaseReq *DatabaseUpdateReq) (*Database, *http.Response, error)
22 Delete(ctx context.Context, databaseID string) error
23
24 GetUsage(ctx context.Context, databaseID string) (*DatabaseUsage, *http.Response, error)
25
26 ListUsers(ctx context.Context, databaseID string) ([]DatabaseUser, *Meta, *http.Response, error)
27 CreateUser(ctx context.Context, databaseID string, databaseUserReq *DatabaseUserCreateReq) (*DatabaseUser, *http.Response, error)
28 GetUser(ctx context.Context, databaseID string, username string) (*DatabaseUser, *http.Response, error)
29 UpdateUser(ctx context.Context, databaseID string, username string, databaseUserReq *DatabaseUserUpdateReq) (*DatabaseUser, *http.Response, error) //nolint:lll
30 DeleteUser(ctx context.Context, databaseID string, username string) error
31 UpdateUserACL(ctx context.Context, databaseID string, username string, databaseUserACLReq *DatabaseUserACLReq) (*DatabaseUser, *http.Response, error) //nolint:lll
32
33 ListDBs(ctx context.Context, databaseID string) ([]DatabaseDB, *Meta, *http.Response, error)
34 CreateDB(ctx context.Context, databaseID string, databaseDBReq *DatabaseDBCreateReq) (*DatabaseDB, *http.Response, error)
35 GetDB(ctx context.Context, databaseID string, dbname string) (*DatabaseDB, *http.Response, error)
36 DeleteDB(ctx context.Context, databaseID string, dbname string) error
37
38 ListTopics(ctx context.Context, databaseID string) ([]DatabaseTopic, *Meta, *http.Response, error)
39 CreateTopic(ctx context.Context, databaseID string, databaseTopicReq *DatabaseTopicCreateReq) (*DatabaseTopic, *http.Response, error)
40 GetTopic(ctx context.Context, databaseID string, topicName string) (*DatabaseTopic, *http.Response, error)
41 UpdateTopic(ctx context.Context, databaseID string, topicName string, databaseTopicReq *DatabaseTopicUpdateReq) (*DatabaseTopic, *http.Response, error) //nolint:lll
42 DeleteTopic(ctx context.Context, databaseID string, topicName string) error
43
44 ListQuotas(ctx context.Context, databaseID string) ([]DatabaseQuota, *Meta, *http.Response, error)
45 CreateQuota(ctx context.Context, databaseID string, databaseQuotaReq *DatabaseQuotaCreateReq) (*DatabaseQuota, *http.Response, error)
46 GetQuota(ctx context.Context, databaseID string, clientID, username string) (*DatabaseQuota, *http.Response, error)
47 UpdateQuota(ctx context.Context, databaseID string, clientID, username string, databaseQuotaReq *DatabaseQuotaUpdateReq) (*DatabaseQuota, *http.Response, error) //nolint:lll
48 DeleteQuota(ctx context.Context, databaseID string, clientID, username string) error
49
50 ListMaintenanceUpdates(ctx context.Context, databaseID string) ([]string, *http.Response, error)
51 StartMaintenance(ctx context.Context, databaseID string) (string, *http.Response, error)
52
53 ListAvailableConnectors(ctx context.Context, databaseID string) ([]DatabaseAvailableConnector, *http.Response, error)
54 GetConnectorConfigurationSchema(ctx context.Context, databaseID string, connectorClass string) ([]DatabaseConnectorConfigurationOption, *http.Response, error) //nolint:lll
55 ListConnectors(ctx context.Context, databaseID string) ([]DatabaseConnector, *Meta, *http.Response, error)
56 CreateConnector(ctx context.Context, databaseID string, databaseConnectorReq *DatabaseConnectorCreateReq) (*DatabaseConnector, *http.Response, error) //nolint:lll
57 GetConnector(ctx context.Context, databaseID string, connectorName string) (*DatabaseConnector, *http.Response, error)
58 UpdateConnector(ctx context.Context, databaseID string, connectorName string, databaseConnectorReq *DatabaseConnectorUpdateReq) (*DatabaseConnector, *http.Response, error) //nolint:lll
59 DeleteConnector(ctx context.Context, databaseID string, connectorName string) error
60 GetConnectorStatus(ctx context.Context, databaseID string, connectorName string) (*DatabaseConnectorStatus, *http.Response, error)
61 RestartConnector(ctx context.Context, databaseID string, connectorName string) error
62 PauseConnector(ctx context.Context, databaseID string, connectorName string) error
63 ResumeConnector(ctx context.Context, databaseID string, connectorName string) error
64 RestartConnectorTask(ctx context.Context, databaseID string, connectorName string, taskID int) error
65
66 ListServiceAlerts(ctx context.Context, databaseID string, databaseAlertsReq *DatabaseListAlertsReq) ([]DatabaseAlert, *http.Response, error) //nolint:lll
67
68 GetMigrationStatus(ctx context.Context, databaseID string) (*DatabaseMigration, *http.Response, error)
69 StartMigration(ctx context.Context, databaseID string, databaseMigrationReq *DatabaseMigrationStartReq) (*DatabaseMigration, *http.Response, error) //nolint:lll
70 DetachMigration(ctx context.Context, databaseID string) error
71
72 AddReadOnlyReplica(ctx context.Context, databaseID string, databaseReplicaReq *DatabaseAddReplicaReq) (*Database, *http.Response, error)
73 PromoteReadReplica(ctx context.Context, databaseID string) error
74
75 GetBackupInformation(ctx context.Context, databaseID string) (*DatabaseBackups, *http.Response, error)
76 RestoreFromBackup(ctx context.Context, databaseID string, databaseRestoreReq *DatabaseBackupRestoreReq) (*Database, *http.Response, error)
77 Fork(ctx context.Context, databaseID string, databaseForkReq *DatabaseForkReq) (*Database, *http.Response, error)
78
79 ListConnectionPools(ctx context.Context, databaseID string) (*DatabaseConnections, []DatabaseConnectionPool, *Meta, *http.Response, error)
80 CreateConnectionPool(ctx context.Context, databaseID string, databaseConnectionPoolReq *DatabaseConnectionPoolCreateReq) (*DatabaseConnectionPool, *http.Response, error) //nolint:lll
81 GetConnectionPool(ctx context.Context, databaseID string, poolName string) (*DatabaseConnectionPool, *http.Response, error)
82 UpdateConnectionPool(ctx context.Context, databaseID string, poolName string, databaseConnectionPoolReq *DatabaseConnectionPoolUpdateReq) (*DatabaseConnectionPool, *http.Response, error) //nolint:lll
83 DeleteConnectionPool(ctx context.Context, databaseID string, poolName string) error
84
85 ListAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error)
86 UpdateAdvancedOptions(ctx context.Context, databaseID string, databaseAdvancedOptionsReq *DatabaseAdvancedOptions) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
87 ListKafkaRESTAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
88 UpdateKafkaRESTAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaRESTAdvancedOptionsReq *DatabaseKafkaRESTAdvancedOptions) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
89 ListSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
90 UpdateSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string, databaseSchemaRegistryAdvancedOptionsReq *DatabaseSchemaRegistryAdvancedOptions) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
91 ListKafkaConnectAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
92 UpdateKafkaConnectAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaConnectAdvancedOptionsReq *DatabaseKafkaConnectAdvancedOptions) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error) //nolint:lll
93
94 ListAvailableVersions(ctx context.Context, databaseID string) ([]string, *http.Response, error)
95 StartVersionUpgrade(ctx context.Context, databaseID string, databaseVersionUpgradeReq *DatabaseVersionUpgradeReq) (string, *http.Response, error) //nolint:lll
96 }
97
98 // DatabaseServiceHandler handles interaction with the server methods for the Vultr API
99 type DatabaseServiceHandler struct {
100 client *Client
101 }
102
103 // DBPlanListOptions handles GET request parameters for the ListPlans endpoint
104 type DBPlanListOptions struct {
105 Engine string `url:"engine,omitempty"`
106 Nodes int `url:"nodes,omitempty"`
107 Region string `url:"region,omitempty"`
108 }
109
110 // DatabasePlan represents a Managed Database plan
111 type DatabasePlan struct {
112 ID string `json:"id"`
113 NumberOfNodes int `json:"number_of_nodes"`
114 Type string `json:"type"`
115 VCPUCount int `json:"vcpu_count"`
116 RAM int `json:"ram"`
117 Disk int `json:"disk"`
118 MonthlyCost int `json:"monthly_cost"`
119 SupportedEngines SupportedEngines `json:"supported_engines"`
120 MaxConnections *MaxConnections `json:"max_connections,omitempty"`
121 Locations []string `json:"locations"`
122 }
123
124 // SupportedEngines represents an object containing supported database engine types for Managed Database plans
125 type SupportedEngines struct {
126 MySQL *bool `json:"mysql"`
127 PG *bool `json:"pg"`
128 Valkey *bool `json:"valkey"`
129 Kafka *bool `json:"kafka"`
130 }
131
132 // MaxConnections represents an object containing the maximum number of connections by engine type for Managed Database plans
133 type MaxConnections struct {
134 MySQL int `json:"mysql,omitempty"`
135 PG int `json:"pg,omitempty"`
136 }
137
138 // databasePlansBase holds the entire ListPlans API response
139 type databasePlansBase struct {
140 DatabasePlans []DatabasePlan `json:"plans"`
141 Meta *Meta `json:"meta"`
142 }
143
144 // DBListOptions handles GET request parameters for the List endpoint
145 type DBListOptions struct {
146 Label string `url:"label,omitempty"`
147 Tag string `url:"tag,omitempty"`
148 Region string `url:"region,omitempty"`
149 }
150
151 // Database represents a Managed Database subscription
152 type Database struct {
153 ID string `json:"id"`
154 DateCreated string `json:"date_created"`
155 Plan string `json:"plan"`
156 PlanDisk int `json:"plan_disk"`
157 PlanRAM int `json:"plan_ram"`
158 PlanVCPUs int `json:"plan_vcpus"`
159 PlanReplicas *int `json:"plan_replicas,omitempty"`
160 PlanBrokers int `json:"plan_brokers,omitempty"`
161 Region string `json:"region"`
162 DatabaseEngine string `json:"database_engine"`
163 DatabaseEngineVersion string `json:"database_engine_version"`
164 VPCID string `json:"vpc_id"`
165 Status string `json:"status"`
166 Label string `json:"label"`
167 Tag string `json:"tag"`
168 DBName string `json:"dbname,omitempty"`
169 FerretDBCredentials *FerretDBCredentials `json:"ferretdb_credentials,omitempty"`
170 Host string `json:"host"`
171 PublicHost string `json:"public_host,omitempty"`
172 Port string `json:"port"`
173 SASLPort string `json:"sasl_port,omitempty"`
174 EnableKafkaREST *bool `json:"enable_kafka_rest,omitempty"`
175 KafkaRESTURI string `json:"kafka_rest_uri,omitempty"`
176 EnableSchemaRegistry *bool `json:"enable_schema_registry,omitempty"`
177 SchemaRegistryURI string `json:"schema_registry_uri,omitempty"`
178 EnableKafkaConnect *bool `json:"enable_kafka_connect,omitempty"`
179 User string `json:"user"`
180 Password string `json:"password"`
181 AccessKey string `json:"access_key,omitempty"`
182 AccessCert string `json:"access_cert,omitempty"`
183 MaintenanceDOW string `json:"maintenance_dow"`
184 MaintenanceTime string `json:"maintenance_time"`
185 BackupHour *string `json:"backup_hour,omitempty"`
186 BackupMinute *string `json:"backup_minute,omitempty"`
187 LatestBackup string `json:"latest_backup"`
188 TrustedIPs []string `json:"trusted_ips"`
189 CACertificate string `json:"ca_certificate"`
190 MySQLSQLModes []string `json:"mysql_sql_modes,omitempty"`
191 MySQLRequirePrimaryKey *bool `json:"mysql_require_primary_key,omitempty"`
192 MySQLSlowQueryLog *bool `json:"mysql_slow_query_log,omitempty"`
193 MySQLLongQueryTime int `json:"mysql_long_query_time,omitempty"`
194 PGAvailableExtensions []PGExtension `json:"pg_available_extensions,omitempty"`
195 EvictionPolicy string `json:"eviction_policy,omitempty"`
196 ClusterTimeZone string `json:"cluster_time_zone,omitempty"`
197 ReadReplicas []Database `json:"read_replicas,omitempty"`
198 }
199
200 // FerretDBCredentials represents connection details and IP address information for FerretDB engine type subscriptions
201 type FerretDBCredentials struct {
202 Host string `json:"host"`
203 Port int `json:"port"`
204 User string `json:"user"`
205 Password string `json:"password"`
206 PublicIP string `json:"public_ip"`
207 PrivateIP string `json:"private_ip,omitempty"`
208 }
209
210 // PGExtension represents an object containing extension name and version information
211 type PGExtension struct {
212 Name string `json:"name"`
213 Versions []string `json:"versions,omitempty"`
214 }
215
216 // databasesBase holds the entire List API response
217 type databasesBase struct {
218 Databases []Database `json:"databases"`
219 Meta *Meta `json:"meta"`
220 }
221
222 // databaseBase holds the entire Get API response
223 type databaseBase struct {
224 Database *Database `json:"database"`
225 }
226
227 // DatabaseCreateReq struct used to create a database
228 type DatabaseCreateReq struct {
229 DatabaseEngine string `json:"database_engine,omitempty"`
230 DatabaseEngineVersion string `json:"database_engine_version,omitempty"`
231 Region string `json:"region,omitempty"`
232 Plan string `json:"plan,omitempty"`
233 Label string `json:"label,omitempty"`
234 Tag string `json:"tag,omitempty"`
235 VPCID string `json:"vpc_id,omitempty"`
236 MaintenanceDOW string `json:"maintenance_dow,omitempty"`
237 MaintenanceTime string `json:"maintenance_time,omitempty"`
238 BackupHour *string `json:"backup_hour,omitempty"`
239 BackupMinute *string `json:"backup_minute,omitempty"`
240 TrustedIPs []string `json:"trusted_ips,omitempty"`
241 MySQLSQLModes []string `json:"mysql_sql_modes,omitempty"`
242 MySQLRequirePrimaryKey *bool `json:"mysql_require_primary_key,omitempty"`
243 MySQLSlowQueryLog *bool `json:"mysql_slow_query_log,omitempty"`
244 MySQLLongQueryTime int `json:"mysql_long_query_time,omitempty"`
245 EvictionPolicy string `json:"eviction_policy,omitempty"`
246 EnableKafkaREST *bool `json:"enable_kafka_rest,omitempty"`
247 EnableSchemaRegistry *bool `json:"enable_schema_registry,omitempty"`
248 EnableKafkaConnect *bool `json:"enable_kafka_connect,omitempty"`
249 }
250
251 // DatabaseUpdateReq struct used to update a database
252 type DatabaseUpdateReq struct {
253 Region string `json:"region,omitempty"`
254 Plan string `json:"plan,omitempty"`
255 Label string `json:"label,omitempty"`
256 Tag string `json:"tag,omitempty"`
257 VPCID *string `json:"vpc_id,omitempty"`
258 MaintenanceDOW string `json:"maintenance_dow,omitempty"`
259 MaintenanceTime string `json:"maintenance_time,omitempty"`
260 BackupHour *string `json:"backup_hour,omitempty"`
261 BackupMinute *string `json:"backup_minute,omitempty"`
262 ClusterTimeZone string `json:"cluster_time_zone,omitempty"`
263 TrustedIPs []string `json:"trusted_ips,omitempty"`
264 MySQLSQLModes []string `json:"mysql_sql_modes,omitempty"`
265 MySQLRequirePrimaryKey *bool `json:"mysql_require_primary_key,omitempty"`
266 MySQLSlowQueryLog *bool `json:"mysql_slow_query_log,omitempty"`
267 MySQLLongQueryTime int `json:"mysql_long_query_time,omitempty"`
268 EvictionPolicy string `json:"eviction_policy,omitempty"`
269 EnableKafkaREST *bool `json:"enable_kafka_rest,omitempty"`
270 EnableSchemaRegistry *bool `json:"enable_schema_registry,omitempty"`
271 EnableKafkaConnect *bool `json:"enable_kafka_connect,omitempty"`
272 }
273
274 // DatabaseUsage represents disk, memory, and CPU usage for a Managed Database
275 type DatabaseUsage struct {
276 Disk DatabaseDiskUsage `json:"disk"`
277 Memory DatabaseMemoryUsage `json:"memory"`
278 CPU DatabaseCPUUsage `json:"cpu"`
279 }
280
281 // DatabaseDiskUsage represents disk usage details for a Managed Database
282 type DatabaseDiskUsage struct {
283 CurrentGB float32 `json:"current_gb"`
284 MaxGB int `json:"max_gb"`
285 Percentage float32 `json:"percentage"`
286 }
287
288 // DatabaseMemoryUsage represents memory usage details for a Managed Database
289 type DatabaseMemoryUsage struct {
290 CurrentMB float32 `json:"current_mb"`
291 MaxMB int `json:"max_mb"`
292 Percentage float32 `json:"percentage"`
293 }
294
295 // DatabaseCPUUsage represents average CPU usage for a Managed Database
296 type DatabaseCPUUsage struct {
297 Percentage float32 `json:"percentage"`
298 }
299
300 // databaseUsageBase represents a usage details API response for a Managed Database
301 type databaseUsageBase struct {
302 Usage *DatabaseUsage `json:"usage"`
303 }
304
305 // DatabaseUser represents a user within a Managed Database cluster
306 type DatabaseUser struct {
307 Username string `json:"username"`
308 Password string `json:"password"`
309 Encryption string `json:"encryption,omitempty"`
310 AccessControl *DatabaseUserACL `json:"access_control,omitempty"`
311 Permission string `json:"permission,omitempty"`
312 AccessKey string `json:"access_key,omitempty"`
313 AccessCert string `json:"access_cert,omitempty"`
314 }
315
316 // DatabaseUserACL represents an access control configuration for a user within a Valkey Managed Database cluster
317 type DatabaseUserACL struct {
318 ACLCategories []string `json:"acl_categories"`
319 ACLChannels []string `json:"acl_channels"`
320 ACLCommands []string `json:"acl_commands"`
321 ACLKeys []string `json:"acl_keys"`
322 }
323
324 // DatabaseUserACLReq represents input for updating a user's access control within a Managed Database cluster
325 type DatabaseUserACLReq struct {
326 ACLCategories *[]string `json:"acl_categories,omitempty"`
327 ACLChannels *[]string `json:"acl_channels,omitempty"`
328 ACLCommands *[]string `json:"acl_commands,omitempty"`
329 ACLKeys *[]string `json:"acl_keys,omitempty"`
330 Permission string `json:"permission,omitempty"`
331 }
332
333 // databaseUserBase holds the API response for retrieving a single database user within a Managed Database
334 type databaseUserBase struct {
335 DatabaseUser *DatabaseUser `json:"user"`
336 }
337
338 // databaseUsersBase holds the API response for retrieving a list of database users within a Managed Database
339 type databaseUsersBase struct {
340 DatabaseUsers []DatabaseUser `json:"users"`
341 Meta *Meta `json:"meta"`
342 }
343
344 // DatabaseUserCreateReq struct used to create a user within a Managed Database
345 type DatabaseUserCreateReq struct {
346 Username string `json:"username"`
347 Password string `json:"password,omitempty"`
348 Encryption string `json:"encryption,omitempty"`
349 Permission string `json:"permission,omitempty"`
350 }
351
352 // DatabaseUserUpdateReq struct used to update a user within a Managed Database
353 type DatabaseUserUpdateReq struct {
354 Password string `json:"password"`
355 }
356
357 // DatabaseDB represents a logical database within a Managed Database cluster
358 type DatabaseDB struct {
359 Name string `json:"name"`
360 }
361
362 // databaseDBBase holds the API response for retrieving a single logical database within a Managed Database
363 type databaseDBBase struct {
364 DatabaseDB *DatabaseDB `json:"db"`
365 }
366
367 // databaseDBsBase holds the API response for retrieving a list of logical databases within a Managed Database
368 type databaseDBsBase struct {
369 DatabaseDBs []DatabaseDB `json:"dbs"`
370 Meta *Meta `json:"meta"`
371 }
372
373 // DatabaseDBCreateReq struct used to create a logical database within a Managed Database
374 type DatabaseDBCreateReq struct {
375 Name string `json:"name"`
376 }
377
378 // DatabaseTopic represents a Kafka topic within a Managed Database cluster
379 type DatabaseTopic struct {
380 Name string `json:"name"`
381 Partitions int `json:"partitions"`
382 Replication int `json:"replication"`
383 RetentionHours int `json:"retention_hours"`
384 RetentionBytes int `json:"retention_bytes"`
385 }
386
387 // databaseTopicBase holds the API response for retrieving a single Kafka topic within a Managed Database
388 type databaseTopicBase struct {
389 DatabaseTopic *DatabaseTopic `json:"topic"`
390 }
391
392 // databaseTopicsBase holds the API response for retrieving a list of Kafka topics within a Managed Database
393 type databaseTopicsBase struct {
394 DatabaseTopics []DatabaseTopic `json:"topics"`
395 Meta *Meta `json:"meta"`
396 }
397
398 // DatabaseTopicCreateReq struct used to create a Kafka topic within a Managed Database
399 type DatabaseTopicCreateReq struct {
400 Name string `json:"name"`
401 Partitions int `json:"partitions"`
402 Replication int `json:"replication"`
403 RetentionHours int `json:"retention_hours"`
404 RetentionBytes int `json:"retention_bytes"`
405 }
406
407 // DatabaseTopicUpdateReq struct used to update a Kafka topic within a Managed Database
408 type DatabaseTopicUpdateReq struct {
409 Partitions int `json:"partitions"`
410 Replication int `json:"replication"`
411 RetentionHours int `json:"retention_hours"`
412 RetentionBytes int `json:"retention_bytes"`
413 }
414
415 // DatabaseQuota represents a Kafka quota within a Managed Database cluster
416 type DatabaseQuota struct {
417 ClientID string `json:"client_id"`
418 User string `json:"user"`
419 ConsumerByteRate int `json:"consumer_byte_rate"`
420 ProducerByteRate int `json:"producer_byte_rate"`
421 RequestPercentage int `json:"request_percentage"`
422 }
423
424 // databaseQuotaBase holds the API response for retrieving a single Kafka quota within a Managed Database
425 type databaseQuotaBase struct {
426 DatabaseQuota *DatabaseQuota `json:"quota"`
427 }
428
429 // databaseQuotasBase holds the API response for retrieving a list of Kafka quotas within a Managed Database
430 type databaseQuotasBase struct {
431 DatabaseQuotas []DatabaseQuota `json:"quotas"`
432 Meta *Meta `json:"meta"`
433 }
434
435 // DatabaseQuotaCreateReq struct used to create a Kafka quota within a Managed Database
436 type DatabaseQuotaCreateReq struct {
437 ClientID string `json:"client_id"`
438 User string `json:"user"`
439 ConsumerByteRate int `json:"consumer_byte_rate"`
440 ProducerByteRate int `json:"producer_byte_rate"`
441 RequestPercentage int `json:"request_percentage"`
442 }
443
444 // DatabaseQuotaUpdateReq struct used to update a Kafka quota within a Managed Database
445 type DatabaseQuotaUpdateReq struct {
446 ConsumerByteRate int `json:"consumer_byte_rate"`
447 ProducerByteRate int `json:"producer_byte_rate"`
448 RequestPercentage int `json:"request_percentage"`
449 }
450
451 // DatabaseAvailableConnector represents an available Kafka connector within a Managed Database cluster
452 type DatabaseAvailableConnector struct {
453 Class string `json:"class"`
454 Title string `json:"title"`
455 Version string `json:"version"`
456 Type string `json:"type"`
457 DocURL string `json:"doc_url"`
458 }
459
460 // databaseAvailableConnectorsBase holds the API response for retrieving a list of available Kafka connectors within a Managed Database
461 type databaseAvailableConnectorsBase struct {
462 DatabaseAvailableConnectors []DatabaseAvailableConnector `json:"available_connectors"`
463 }
464
465 // DatabaseConnectorConfigurationOption represents a configuration option for a Kafka connector within a Managed Database cluster
466 type DatabaseConnectorConfigurationOption struct {
467 Name string `json:"name"`
468 Type string `json:"type"`
469 Required bool `json:"required"`
470 DefaultValue string `json:"default_value"`
471 Description string `json:"description"`
472 }
473
474 // databaseConnectorConfigBase holds the API response for retrieving a configuration schema for a Kafka connector within a Managed Database
475 type databaseConnectorConfigBase struct {
476 ConfigurationSchema []DatabaseConnectorConfigurationOption `json:"configuration_schema"`
477 }
478
479 // DatabaseConnector represents a Kafka connector within a Managed Database cluster
480 type DatabaseConnector struct {
481 Name string `json:"name"`
482 Class string `json:"class"`
483 Topics string `json:"topics"`
484 Config map[string]interface{} `json:"config"`
485 }
486
487 // databaseConnectorBase holds the API response for retrieving a single Kafka connector within a Managed Database
488 type databaseConnectorBase struct {
489 DatabaseConnector *DatabaseConnector `json:"connector"`
490 }
491
492 // databaseConnectorsBase holds the API response for retrieving a list of Kafka connectors within a Managed Database
493 type databaseConnectorsBase struct {
494 DatabaseConnectors []DatabaseConnector `json:"connectors"`
495 Meta *Meta `json:"meta"`
496 }
497
498 // DatabaseConnectorCreateReq struct used to create a Kafka connector within a Managed Database
499 type DatabaseConnectorCreateReq struct {
500 Name string `json:"name"`
501 Class string `json:"class"`
502 Topics string `json:"topics"`
503 Config map[string]interface{} `json:"config,omitempty"`
504 }
505
506 // DatabaseConnectorUpdateReq struct used to update a Kafka connector within a Managed Database
507 type DatabaseConnectorUpdateReq struct {
508 Topics string `json:"topics,omitempty"`
509 Config map[string]interface{} `json:"config,omitempty"`
510 }
511
512 // DatabaseConnector represents a Kafka connector status within a Managed Database cluster
513 type DatabaseConnectorStatus struct {
514 State string `json:"state"`
515 Tasks []DatabaseConnectorTask `json:"tasks"`
516 }
517
518 // DatabaseConnectorTask represents a Kafka connector task within a Managed Database cluster
519 type DatabaseConnectorTask struct {
520 ID int `json:"id"`
521 State string `json:"state"`
522 Trace string `json:"trace"`
523 }
524
525 // databaseConnectorStatusBase holds the API response for retrieving a Kafka connector status within a Managed Database
526 type databaseConnectorStatusBase struct {
527 ConnectorStatus *DatabaseConnectorStatus `json:"connector_status"`
528 }
529
530 // databaseUpdatesBase holds the API response for retrieving a list of available maintenance updates within a Managed Database
531 type databaseUpdatesBase struct {
532 AvailableUpdates []string `json:"available_updates"`
533 }
534
535 // databaseMessage is a bsic object holding a return message for certain API endpoints
536 type databaseMessage struct {
537 Message string `json:"message"`
538 }
539
540 // DatabaseAlert represents a service alert for a Managed Database cluster
541 type DatabaseAlert struct {
542 Timestamp string `json:"timestamp"`
543 MessageType string `json:"message_type"`
544 Description string `json:"description"`
545 Recommendation string `json:"recommendation,omitempty"`
546 MaintenanceScheduled string `json:"maintenance_scheduled,omitempty"`
547 ResourceType string `json:"resource_type,omitempty"`
548 TableCount int `json:"table_count,omitempty"`
549 }
550
551 // databaseAlertsBase holds the API response for querying service alerts within a Managed Database
552 type databaseAlertsBase struct {
553 DatabaseAlerts []DatabaseAlert `json:"alerts"`
554 }
555
556 // DatabaseListAlertsReq struct used to query service alerts for a Managed Database
557 type DatabaseListAlertsReq struct {
558 Period string `json:"period"`
559 }
560
561 // DatabaseMigration represents migration details for a Managed Database cluster
562 type DatabaseMigration struct {
563 Status string `json:"status"`
564 Method string `json:"method,omitempty"`
565 Error string `json:"error,omitempty"`
566 Credentials DatabaseCredentials `json:"credentials"`
567 }
568
569 // DatabaseCredentials represents migration credentials for migration within a Managed Database cluster
570 type DatabaseCredentials struct {
571 Host string `json:"host"`
572 Port int `json:"port"`
573 Username string `json:"username"`
574 Password string `json:"password"`
575 Database string `json:"database,omitempty"`
576 IgnoredDatabases string `json:"ignored_databases,omitempty"`
577 SSL *bool `json:"ssl"`
578 }
579
580 // databaseMigrationBase represents a migration status object API response for a Managed Database
581 type databaseMigrationBase struct {
582 Migration *DatabaseMigration `json:"migration"`
583 }
584
585 // DatabaseMigrationStartReq struct used to start a migration for a Managed Database
586 type DatabaseMigrationStartReq struct {
587 Host string `json:"host"`
588 Port int `json:"port"`
589 Username string `json:"username"`
590 Password string `json:"password"`
591 Database string `json:"database,omitempty"`
592 IgnoredDatabases string `json:"ignored_databases,omitempty"`
593 SSL *bool `json:"ssl"`
594 }
595
596 // DatabaseAddReplicaReq struct used to add a read-only replica to a Managed Database
597 type DatabaseAddReplicaReq struct {
598 Region string `json:"region,omitempty"`
599 Label string `json:"label,omitempty"`
600 }
601
602 // DatabaseBackups represents backup information for a Managed Database cluster
603 type DatabaseBackups struct {
604 LatestBackup DatabaseBackup `json:"latest_backup,omitempty"`
605 OldestBackup DatabaseBackup `json:"oldest_backup,omitempty"`
606 }
607
608 // DatabaseBackup represents individual backup details for a Managed Database cluster
609 type DatabaseBackup struct {
610 Date string `json:"date"`
611 Time string `json:"time"`
612 }
613
614 // DatabaseBackupRestoreReq struct used to restore the backup of a Managed Database to a new subscription
615 type DatabaseBackupRestoreReq struct {
616 Label string `json:"label,omitempty"`
617 Type string `json:"type,omitempty"`
618 Date string `json:"date,omitempty"`
619 Time string `json:"time,omitempty"`
620 }
621
622 // DatabaseForkReq struct used to fork a Managed Database to a new subscription from a backup
623 type DatabaseForkReq struct {
624 Label string `json:"label,omitempty"`
625 Region string `json:"region,omitempty"`
626 Plan string `json:"plan,omitempty"`
627 Type string `json:"type,omitempty"`
628 Date string `json:"date,omitempty"`
629 Time string `json:"time,omitempty"`
630 }
631
632 // DatabaseConnectionPool represents a PostgreSQL connection pool within a Managed Database cluster
633 type DatabaseConnectionPool struct {
634 Name string `json:"name"`
635 Database string `json:"database"`
636 Username string `json:"username"`
637 Mode string `json:"mode"`
638 Size int `json:"size"`
639 }
640
641 // DatabaseConnections represents a an object containing used and available connections for a PostgreSQL Managed Database cluster
642 type DatabaseConnections struct {
643 Used int `json:"used"`
644 Available int `json:"available"`
645 Max int `json:"max"`
646 }
647
648 // databaseConnectionPoolBase represents the API response for retrieving a single connection pool for a PostgreSQL Managed Database
649 type databaseConnectionPoolBase struct {
650 ConnectionPool *DatabaseConnectionPool `json:"connection_pool"`
651 }
652
653 // databaseConnectionPoolBase represents the API response for retrieving all connection pool information for a PostgreSQL Managed Database
654 type databaseConnectionPoolsBase struct {
655 Connections *DatabaseConnections `json:"connections"`
656 ConnectionPools []DatabaseConnectionPool `json:"connection_pools"`
657 Meta *Meta `json:"meta"`
658 }
659
660 // DatabaseConnectionPoolCreateReq struct used to create a connection pool within a PostgreSQL Managed Database
661 type DatabaseConnectionPoolCreateReq struct {
662 Name string `json:"name,omitempty"`
663 Database string `json:"database,omitempty"`
664 Username string `json:"username,omitempty"`
665 Mode string `json:"mode,omitempty"`
666 Size int `json:"size,omitempty"`
667 }
668
669 // DatabaseConnectionPoolUpdateReq struct used to update a connection pool within a PostgreSQL Managed Database
670 type DatabaseConnectionPoolUpdateReq struct {
671 Database string `json:"database,omitempty"`
672 Username string `json:"username,omitempty"`
673 Mode string `json:"mode,omitempty"`
674 Size int `json:"size,omitempty"`
675 }
676
677 // DatabaseAdvancedOptions represents user configurable advanced options within a Managed Database cluster
678 type DatabaseAdvancedOptions struct {
679 AutovacuumAnalyzeScaleFactor float32 `json:"autovacuum_analyze_scale_factor,omitempty"`
680 AutovacuumAnalyzeThreshold int `json:"autovacuum_analyze_threshold,omitempty"`
681 AutovacuumFreezeMaxAge int `json:"autovacuum_freeze_max_age,omitempty"`
682 AutovacuumMaxWorkers int `json:"autovacuum_max_workers,omitempty"`
683 AutovacuumNaptime int `json:"autovacuum_naptime,omitempty"`
684 AutovacuumVacuumCostDelay int `json:"autovacuum_vacuum_cost_delay,omitempty"`
685 AutovacuumVacuumCostLimit int `json:"autovacuum_vacuum_cost_limit,omitempty"`
686 AutovacuumVacuumScaleFactor float32 `json:"autovacuum_vacuum_scale_factor,omitempty"`
687 AutovacuumVacuumThreshold int `json:"autovacuum_vacuum_threshold,omitempty"`
688 BGWRITERDelay int `json:"bgwriter_delay,omitempty"`
689 BGWRITERFlushAFter int `json:"bgwriter_flush_after,omitempty"`
690 BGWRITERLRUMaxPages int `json:"bgwriter_lru_maxpages,omitempty"`
691 BGWRITERLRUMultiplier float32 `json:"bgwriter_lru_multiplier,omitempty"`
692 DeadlockTimeout int `json:"deadlock_timeout,omitempty"`
693 DefaultToastCompression string `json:"default_toast_compression,omitempty"`
694 IdleInTransactionSessionTimeout int `json:"idle_in_transaction_session_timeout,omitempty"`
695 Jit *bool `json:"jit,omitempty"`
696 LogAutovacuumMinDuration int `json:"log_autovacuum_min_duration,omitempty"`
697 LogErrorVerbosity string `json:"log_error_verbosity,omitempty"`
698 LogLinePrefix string `json:"log_line_prefix,omitempty"`
699 LogMinDurationStatement int `json:"log_min_duration_statement,omitempty"`
700 MaxFilesPerProcess int `json:"max_files_per_process,omitempty"`
701 MaxLocksPerTransaction int `json:"max_locks_per_transaction,omitempty"`
702 MaxLogicalReplicationWorkers int `json:"max_logical_replication_workers,omitempty"`
703 MaxParallelWorkers int `json:"max_parallel_workers,omitempty"`
704 MaxParallelWorkersPerGather int `json:"max_parallel_workers_per_gather,omitempty"`
705 MaxPredLocksPerTransaction int `json:"max_pred_locks_per_transaction,omitempty"`
706 MaxPreparedTransactions int `json:"max_prepared_transactions,omitempty"`
707 MaxReplicationSlots int `json:"max_replication_slots,omitempty"`
708 MaxStackDepth int `json:"max_stack_depth,omitempty"`
709 MaxStandbyArchiveDelay int `json:"max_standby_archive_delay,omitempty"`
710 MaxStandbyStreamingDelay int `json:"max_standby_streaming_delay,omitempty"`
711 MaxWalSenders int `json:"max_wal_senders,omitempty"`
712 MaxWorkerProcesses int `json:"max_worker_processes,omitempty"`
713 PGPartmanBGWInterval int `json:"pg_partman_bgw.interval,omitempty"`
714 PGPartmanBGWRole string `json:"pg_partman_bgw.role,omitempty"`
715 PGStateStatementsTrack string `json:"pg_stat_statements.track,omitempty"`
716 TempFileLimit int `json:"temp_file_limit,omitempty"`
717 TrackActivityQuerySize int `json:"track_activity_query_size,omitempty"`
718 TrackCommitTimestamp string `json:"track_commit_timestamp,omitempty"`
719 TrackFunctions string `json:"track_functions,omitempty"`
720 TrackIOTiming string `json:"track_io_timing,omitempty"`
721 WALSenderTImeout int `json:"wal_sender_timeout,omitempty"`
722 WALWriterDelay int `json:"wal_writer_delay,omitempty"`
723 ConnectTimeout int `json:"connect_timeout,omitempty"`
724 GroupConcatMaxLen int `json:"group_concat_max_len,omitempty"`
725 InnoDBChangeBufferMaxSize int `json:"innodb_change_buffer_max_size,omitempty"`
726 InnoDBFlushNeighbors int `json:"innodb_flush_neighbors,omitempty"`
727 InnoDBFTMinTokenSize int `json:"innodb_ft_min_token_size,omitempty"`
728 InnoDBFTServerStopwordTable string `json:"innodb_ft_server_stopword_table,omitempty"`
729 InnoDBLockWaitTimeout int `json:"innodb_lock_wait_timeout,omitempty"`
730 InnoDBLogBufferSize int `json:"innodb_log_buffer_size,omitempty"`
731 InnoDBOnlineAlterLogMaxSize int `json:"innodb_online_alter_log_max_size,omitempty"`
732 InnoDBPrintAllDeadlocks *bool `json:"innodb_print_all_deadlocks,omitempty"`
733 InnoDBReadIOThreads int `json:"innodb_read_io_threads,omitempty"`
734 InnoDBRollbackOnTimeout *bool `json:"innodb_rollback_on_timeout,omitempty"`
735 InnoDBThreadConcurrency int `json:"innodb_thread_concurrency,omitempty"`
736 InnoDBWriteIOThreads int `json:"innodb_write_io_threads,omitempty"`
737 InteractiveTimeout int `json:"interactive_timeout,omitempty"`
738 InternalTmpMemStorageEngine string `json:"internal_tmp_mem_storage_engine,omitempty"`
739 MaxAllowedPacket int `json:"max_allowed_packet,omitempty"`
740 MaxHeapTableSize int `json:"max_heap_table_size,omitempty"`
741 NetBufferLength int `json:"net_buffer_length,omitempty"`
742 NetReadTimeout int `json:"net_read_timeout,omitempty"`
743 NetWriteTimeout int `json:"net_write_timeout,omitempty"`
744 SortBufferSize int `json:"sort_buffer_size,omitempty"`
745 TmpTableSize int `json:"tmp_table_size,omitempty"`
746 WaitTimeout int `json:"wait_timeout,omitempty"`
747 CompressionType string `json:"compression_type,omitempty"`
748 GroupInitialRebalanceDelayMS int `json:"group_initial_rebalance_delay_ms,omitempty"`
749 GroupMinSessinTimeoutMS int `json:"group_min_session_timeout_ms,omitempty"`
750 GroupMaxSessionTimeoutMS int `json:"group_max_session_timeout_ms,omitempty"`
751 ConnectionsMaxIdleMS int `json:"connections_max_idle_ms,omitempty"`
752 MaxIncrementalFetchSessionCacheSlots int `json:"max_incremental_fetch_session_cache_slots,omitempty"`
753 MessageMaxBytes int `json:"message_max_bytes,omitempty"`
754 OffsetsRetentionMinutes int `json:"offsets_retention_minutes,omitempty"`
755 LogCleanerDeleteRetentionMS int `json:"log_cleaner_delete_retention_ms,omitempty"`
756 LogCleanerMinCleanableRatio float32 `json:"log_cleaner_min_cleanable_ratio,omitempty"`
757 LogCleanerMaxCompactionLagMS int `json:"log_cleaner_max_compaction_lag_ms,omitempty"`
758 LogCleanerMinCompactionLagMS int `json:"log_cleaner_min_compaction_lag_ms,omitempty"`
759 LogCleanupPolicy string `json:"log_cleanup_policy,omitempty"`
760 LogFlushIntervalMessages int `json:"log_flush_interval_messages,omitempty"`
761 LogFlushIntervalMS int `json:"log_flush_interval_ms,omitempty"`
762 LogIndexIntervalBytes int `json:"log_index_interval_bytes,omitempty"`
763 LogIndexSizeMaxBytes int `json:"log_index_size_max_bytes,omitempty"`
764 LogLocalRetentionMS int `json:"log_local_retention_ms,omitempty"`
765 LogLocalRetentionBytes int `json:"log_local_retention_bytes,omitempty"`
766 LogMessageDownconversionEnable *bool `json:"log_message_downconversion_enable,omitempty"`
767 LogMessageTimestampType string `json:"log_message_timestamp_type,omitempty"`
768 LogMessageTimestampDifferenceMaxMS int `json:"log_message_timestamp_difference_max_ms,omitempty"`
769 LogPreallocate *bool `json:"log_preallocate,omitempty"`
770 LogRetentionBytes int `json:"log_retention_bytes,omitempty"`
771 LogRetentionHours int `json:"log_retention_hours,omitempty"`
772 LogRetentionMS int `json:"log_retention_ms,omitempty"`
773 LogRollJitterMS int `json:"log_roll_jitter_ms,omitempty"`
774 LogRollMS int `json:"log_roll_ms,omitempty"`
775 LogSegmentBytes int `json:"log_segment_bytes,omitempty"`
776 LogSegmentDeleteDelayMS int `json:"log_segment_delete_delay_ms,omitempty"`
777 AutoCreateTopicsEnable *bool `json:"auto_create_topics_enable,omitempty"`
778 MinInsyncReplicas int `json:"min_insync_replicas,omitempty"`
779 NumPartitions int `json:"num_partitions,omitempty"`
780 DefaultReplicationFactor int `json:"default_replication_factor,omitempty"`
781 ReplicaFetchMaxBytes int `json:"replica_fetch_max_bytes,omitempty"`
782 ReplicaFetchResponseMaxBytes int `json:"replica_fetch_response_max_bytes,omitempty"`
783 MaxConnectionsPerIP int `json:"max_connections_per_ip,omitempty"`
784 ProducerPurgatoryPurgeIntervalRequests int `json:"producer_purgatory_purge_interval_requests,omitempty"`
785 SASLOauthbearerExpectedAudience string `json:"sasl_oauthbearer_expected_audience,omitempty"`
786 SASLOauthbearerExpectedIssuer string `json:"sasl_oauthbearer_expected_issuer,omitempty"`
787 SASLOauthbearerJWKSEndpointURL string `json:"sasl_oauthbearer_jwks_endpoint_url,omitempty"`
788 SASLOauthbearerSubClaimName string `json:"sasl_oauthbearer_sub_claim_name,omitempty"`
789 SocketRequestMaxBytes int `json:"socket_request_max_bytes,omitempty"`
790 TransactionStateLogSegmentBytes int `json:"transaction_state_log_segment_bytes,omitempty"`
791 TransactionRemoveExpiredTransactionCleanupIntervalMS int `json:"transaction_remove_expired_transaction_cleanup_interval_ms,omitempty"`
792 TransactionPartitionVerificationEnable *bool `json:"transaction_partition_verification_enable,omitempty"`
793 }
794
795 // AvailableOption represents an available advanced configuration option for a Managed Database cluster
796 type AvailableOption struct {
797 Name string `json:"name"`
798 Type string `json:"type"`
799 Enumerals []string `json:"enumerals,omitempty"`
800 MinValue *float32 `json:"min_value,omitempty"`
801 MaxValue *float32 `json:"max_value,omitempty"`
802 AltValues []int `json:"alt_values,omitempty"`
803 Units string `json:"units,omitempty"`
804 }
805
806 // databaseAdvancedOptionsBase represents the API response for advanced configuration options for a Managed Database
807 type databaseAdvancedOptionsBase struct {
808 ConfiguredOptions *DatabaseAdvancedOptions `json:"configured_options"`
809 AvailableOptions []AvailableOption `json:"available_options"`
810 }
811
812 // DatabaseKafkaRESTAdvancedOptions represents user configurable Kafka REST advanced options within a Managed Database cluster
813 type DatabaseKafkaRESTAdvancedOptions struct {
814 ProducerAcks string `json:"producer_acks,omitempty"`
815 ProducerCompressionType string `json:"producer_compression_type,omitempty"`
816 ProducerLingerMS int `json:"producer_linger_ms,omitempty"`
817 ProducerMaxRequestSize int `json:"producer_max_request_size,omitempty"`
818 ConsumerEnableAutoCommit *bool `json:"consumer_enable_auto_commit,omitempty"`
819 ConsumerRequestMaxBytes int `json:"consumer_request_max_bytes,omitempty"`
820 ConsumerRequestTimeoutMS int `json:"consumer_request_timeout_ms,omitempty"`
821 NameStrategy string `json:"name_strategy,omitempty"`
822 NameStrategyValidation *bool `json:"name_strategy_validation,omitempty"`
823 SimpleConsumerPoolSizeMax int `json:"simpleconsumer_pool_size_max,omitempty"`
824 }
825
826 // databaseKafkaRESTAdvancedOptionsBase represents the API response for Kafka REST advanced configuration options for a Managed Database
827 type databaseKafkaRESTAdvancedOptionsBase struct {
828 ConfiguredOptions *DatabaseKafkaRESTAdvancedOptions `json:"configured_options"`
829 AvailableOptions []AvailableOption `json:"available_options"`
830 }
831
832 // DatabaseSchemaRegistryAdvancedOptions represents user configurable Schema Registry advanced options within a Managed Database cluster
833 type DatabaseSchemaRegistryAdvancedOptions struct {
834 LeaderEligibility *bool `json:"leader_eligibility,omitempty"`
835 SchemaReaderStrictMode *bool `json:"schema_reader_strict_mode,omitempty"`
836 RetriableErrorsSilenced *bool `json:"retriable_errors_silenced,omitempty"`
837 }
838
839 // databaseSchemaRegistryAdvancedOptionsBase represents the API response for Schema Registry advanced options for a Managed Database
840 type databaseSchemaRegistryAdvancedOptionsBase struct {
841 ConfiguredOptions *DatabaseSchemaRegistryAdvancedOptions `json:"configured_options"`
842 AvailableOptions []AvailableOption `json:"available_options"`
843 }
844
845 // DatabaseKafkaConnectAdvancedOptions represents user configurable Kafka Connect advanced options within a Managed Database cluster
846 type DatabaseKafkaConnectAdvancedOptions struct {
847 ConnectorClientConfigOverridePolicy string `json:"connector_client_config_override_policy,omitempty"`
848 ConsumerAutoOffsetReset string `json:"consumer_auto_offset_reset,omitempty"`
849 ConsumerFetchMaxBytes int `json:"consumer_fetch_max_bytes,omitempty"`
850 ConsumerIsolationLevel string `json:"consumer_isolation_level,omitempty"`
851 ConsumerMaxPartitionFetchBytes int `json:"consumer_max_partition_fetch_bytes,omitempty"`
852 ConsumerMaxPollIntervalMS int `json:"consumer_max_poll_interval_ms,omitempty"`
853 ConsumerMaxPollRecords int `json:"consumer_max_poll_records,omitempty"`
854 OffsetFlushIntervalMS int `json:"offset_flush_interval_ms,omitempty"`
855 OffsetFlushTimeoutMS int `json:"offset_flush_timeout_ms,omitempty"`
856 ProducerBatchSize int `json:"producer_batch_size,omitempty"`
857 ProducerBufferMemory int `json:"producer_buffer_memory,omitempty"`
858 ProducerCompressionType string `json:"producer_compression_type,omitempty"`
859 ProducerLingerMS int `json:"producer_linger_ms,omitempty"`
860 ProducerMaxRequestSize int `json:"producer_max_request_size,omitempty"`
861 ScheduledRebalanceMaxDelayMS int `json:"scheduled_rebalance_max_delay_ms,omitempty"`
862 SessionTimeoutMS int `json:"session_timeout_ms,omitempty"`
863 }
864
865 // databaseKafkaConnectAdvancedOptionsBase represents the API response for Kafka Connect advanced options for a Managed Database
866 type databaseKafkaConnectAdvancedOptionsBase struct {
867 ConfiguredOptions *DatabaseKafkaConnectAdvancedOptions `json:"configured_options"`
868 AvailableOptions []AvailableOption `json:"available_options"`
869 }
870
871 // DatabaseAvailableVersions represents available versions upgrades for a Managed Database cluster
872 type DatabaseAvailableVersions struct {
873 AvailableVersions []string `json:"available_versions"`
874 }
875
876 // DatabaseVersionUpgradeReq struct used to initiate a version upgrade for a PostgreSQL Managed Database
877 type DatabaseVersionUpgradeReq struct {
878 Version string `json:"version,omitempty"`
879 }
880
881 // ListPlans retrieves all database plans
882 func (d *DatabaseServiceHandler) ListPlans(ctx context.Context, options *DBPlanListOptions) ([]DatabasePlan, *Meta, *http.Response, error) {
883 uri := fmt.Sprintf("%s/plans", databasePath)
884
885 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
886 if err != nil {
887 return nil, nil, nil, err
888 }
889
890 newValues, err := query.Values(options)
891 if err != nil {
892 return nil, nil, nil, err
893 }
894
895 req.URL.RawQuery = newValues.Encode()
896
897 databasePlans := new(databasePlansBase)
898 resp, err := d.client.DoWithContext(ctx, req, databasePlans)
899 if err != nil {
900 return nil, nil, nil, err
901 }
902
903 return databasePlans.DatabasePlans, databasePlans.Meta, resp, nil
904 }
905
906 // List retrieves all databases on your account
907 func (d *DatabaseServiceHandler) List(ctx context.Context, options *DBListOptions) ([]Database, *Meta, *http.Response, error) { //nolint:dupl,lll
908 req, err := d.client.NewRequest(ctx, http.MethodGet, databasePath, nil)
909 if err != nil {
910 return nil, nil, nil, err
911 }
912
913 newValues, err := query.Values(options)
914 if err != nil {
915 return nil, nil, nil, err
916 }
917
918 req.URL.RawQuery = newValues.Encode()
919
920 databases := new(databasesBase)
921 resp, err := d.client.DoWithContext(ctx, req, databases)
922 if err != nil {
923 return nil, nil, nil, err
924 }
925
926 return databases.Databases, databases.Meta, resp, nil
927 }
928
929 // Create will create a Managed Database with the given parameters
930 func (d *DatabaseServiceHandler) Create(ctx context.Context, databaseReq *DatabaseCreateReq) (*Database, *http.Response, error) {
931 req, err := d.client.NewRequest(ctx, http.MethodPost, databasePath, databaseReq)
932 if err != nil {
933 return nil, nil, err
934 }
935
936 database := new(databaseBase)
937 resp, err := d.client.DoWithContext(ctx, req, database)
938 if err != nil {
939 return nil, nil, err
940 }
941
942 return database.Database, resp, nil
943 }
944
945 // Get will get a Managed Database with the given databaseID
946 func (d *DatabaseServiceHandler) Get(ctx context.Context, databaseID string) (*Database, *http.Response, error) {
947 uri := fmt.Sprintf("%s/%s", databasePath, databaseID)
948
949 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
950 if err != nil {
951 return nil, nil, err
952 }
953
954 database := new(databaseBase)
955 resp, err := d.client.DoWithContext(ctx, req, database)
956 if err != nil {
957 return nil, nil, err
958 }
959
960 return database.Database, resp, nil
961 }
962
963 // Update will update a Managed Database with the given parameters
964 func (d *DatabaseServiceHandler) Update(ctx context.Context, databaseID string, databaseReq *DatabaseUpdateReq) (*Database, *http.Response, error) { //nolint:lll
965 uri := fmt.Sprintf("%s/%s", databasePath, databaseID)
966
967 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseReq)
968 if err != nil {
969 return nil, nil, err
970 }
971
972 database := new(databaseBase)
973 resp, err := d.client.DoWithContext(ctx, req, database)
974 if err != nil {
975 return nil, nil, err
976 }
977
978 return database.Database, resp, nil
979 }
980
981 // Delete a Managed database, all data will be permanently lost
982 func (d *DatabaseServiceHandler) Delete(ctx context.Context, databaseID string) error {
983 uri := fmt.Sprintf("%s/%s", databasePath, databaseID)
984
985 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
986 if err != nil {
987 return err
988 }
989
990 _, err = d.client.DoWithContext(ctx, req, nil)
991 return err
992 }
993
994 // GetUsage retrieves disk, memory, and CPU usage information for a Managed Database
995 func (d *DatabaseServiceHandler) GetUsage(ctx context.Context, databaseID string) (*DatabaseUsage, *http.Response, error) {
996 uri := fmt.Sprintf("%s/%s/usage", databasePath, databaseID)
997
998 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
999 if err != nil {
1000 return nil, nil, err
1001 }
1002
1003 databaseUsage := new(databaseUsageBase)
1004 resp, err := d.client.DoWithContext(ctx, req, databaseUsage)
1005 if err != nil {
1006 return nil, nil, err
1007 }
1008
1009 return databaseUsage.Usage, resp, nil
1010 }
1011
1012 // ListUsers retrieves all database users on a Managed Database
1013 func (d *DatabaseServiceHandler) ListUsers(ctx context.Context, databaseID string) ([]DatabaseUser, *Meta, *http.Response, error) { //nolint:dupl,lll
1014 uri := fmt.Sprintf("%s/%s/users", databasePath, databaseID)
1015
1016 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1017 if err != nil {
1018 return nil, nil, nil, err
1019 }
1020
1021 databaseUsers := new(databaseUsersBase)
1022 resp, err := d.client.DoWithContext(ctx, req, databaseUsers)
1023 if err != nil {
1024 return nil, nil, nil, err
1025 }
1026
1027 return databaseUsers.DatabaseUsers, databaseUsers.Meta, resp, nil
1028 }
1029
1030 // CreateUser will create a user within a Managed Database with the given parameters
1031 func (d *DatabaseServiceHandler) CreateUser(ctx context.Context, databaseID string, databaseUserReq *DatabaseUserCreateReq) (*DatabaseUser, *http.Response, error) { //nolint:lll
1032 uri := fmt.Sprintf("%s/%s/users", databasePath, databaseID)
1033
1034 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseUserReq)
1035 if err != nil {
1036 return nil, nil, err
1037 }
1038
1039 databaseUser := new(databaseUserBase)
1040 resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1041 if err != nil {
1042 return nil, nil, err
1043 }
1044
1045 return databaseUser.DatabaseUser, resp, nil
1046 }
1047
1048 // GetUser retrieves information on an individual user within a Managed Database based on a username and databaseID
1049 func (d *DatabaseServiceHandler) GetUser(ctx context.Context, databaseID, username string) (*DatabaseUser, *http.Response, error) {
1050 uri := fmt.Sprintf("%s/%s/users/%s", databasePath, databaseID, username)
1051
1052 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1053 if err != nil {
1054 return nil, nil, err
1055 }
1056
1057 databaseUser := new(databaseUserBase)
1058 resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1059 if err != nil {
1060 return nil, nil, err
1061 }
1062
1063 return databaseUser.DatabaseUser, resp, nil
1064 }
1065
1066 // UpdateUser will update a user within a Managed Database with the given parameters
1067 func (d *DatabaseServiceHandler) UpdateUser(ctx context.Context, databaseID, username string, databaseUserReq *DatabaseUserUpdateReq) (*DatabaseUser, *http.Response, error) { //nolint:lll,dupl
1068 uri := fmt.Sprintf("%s/%s/users/%s", databasePath, databaseID, username)
1069
1070 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseUserReq)
1071 if err != nil {
1072 return nil, nil, err
1073 }
1074
1075 databaseUser := new(databaseUserBase)
1076 resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1077 if err != nil {
1078 return nil, nil, err
1079 }
1080
1081 return databaseUser.DatabaseUser, resp, nil
1082 }
1083
1084 // DeleteUser will delete a user within a Managed Database
1085 func (d *DatabaseServiceHandler) DeleteUser(ctx context.Context, databaseID, username string) error {
1086 uri := fmt.Sprintf("%s/%s/users/%s", databasePath, databaseID, username)
1087
1088 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1089 if err != nil {
1090 return err
1091 }
1092
1093 _, err = d.client.DoWithContext(ctx, req, nil)
1094 return err
1095 }
1096
1097 // UpdateUserACL will update a user's access control within the Valkey Managed Database
1098 func (d *DatabaseServiceHandler) UpdateUserACL(ctx context.Context, databaseID, username string, databaseUserACLReq *DatabaseUserACLReq) (*DatabaseUser, *http.Response, error) { //nolint:lll,dupl
1099 uri := fmt.Sprintf("%s/%s/users/%s/access-control", databasePath, databaseID, username)
1100
1101 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseUserACLReq)
1102 if err != nil {
1103 return nil, nil, err
1104 }
1105
1106 databaseUser := new(databaseUserBase)
1107 resp, err := d.client.DoWithContext(ctx, req, databaseUser)
1108 if err != nil {
1109 return nil, nil, err
1110 }
1111
1112 return databaseUser.DatabaseUser, resp, nil
1113 }
1114
1115 // ListDBs retrieves all logical databases on a Managed Database
1116 func (d *DatabaseServiceHandler) ListDBs(ctx context.Context, databaseID string) ([]DatabaseDB, *Meta, *http.Response, error) { //nolint:dupl,lll
1117 uri := fmt.Sprintf("%s/%s/dbs", databasePath, databaseID)
1118
1119 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1120 if err != nil {
1121 return nil, nil, nil, err
1122 }
1123
1124 databaseDBs := new(databaseDBsBase)
1125 resp, err := d.client.DoWithContext(ctx, req, databaseDBs)
1126 if err != nil {
1127 return nil, nil, nil, err
1128 }
1129
1130 return databaseDBs.DatabaseDBs, databaseDBs.Meta, resp, nil
1131 }
1132
1133 // CreateDB will create a logical database within a Managed Database with the given parameters
1134 func (d *DatabaseServiceHandler) CreateDB(ctx context.Context, databaseID string, databaseDBReq *DatabaseDBCreateReq) (*DatabaseDB, *http.Response, error) { //nolint:lll
1135 uri := fmt.Sprintf("%s/%s/dbs", databasePath, databaseID)
1136
1137 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseDBReq)
1138 if err != nil {
1139 return nil, nil, err
1140 }
1141
1142 databaseDB := new(databaseDBBase)
1143 resp, err := d.client.DoWithContext(ctx, req, databaseDB)
1144 if err != nil {
1145 return nil, nil, err
1146 }
1147
1148 return databaseDB.DatabaseDB, resp, nil
1149 }
1150
1151 // GetDB retrieves information on an individual logical database within a Managed Database based on a dbname and databaseID
1152 func (d *DatabaseServiceHandler) GetDB(ctx context.Context, databaseID, dbname string) (*DatabaseDB, *http.Response, error) {
1153 uri := fmt.Sprintf("%s/%s/dbs/%s", databasePath, databaseID, dbname)
1154
1155 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1156 if err != nil {
1157 return nil, nil, err
1158 }
1159
1160 databaseDB := new(databaseDBBase)
1161 resp, err := d.client.DoWithContext(ctx, req, databaseDB)
1162 if err != nil {
1163 return nil, nil, err
1164 }
1165
1166 return databaseDB.DatabaseDB, resp, nil
1167 }
1168
1169 // DeleteDB will delete a user within a Managed Database
1170 func (d *DatabaseServiceHandler) DeleteDB(ctx context.Context, databaseID, dbname string) error {
1171 uri := fmt.Sprintf("%s/%s/dbs/%s", databasePath, databaseID, dbname)
1172
1173 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1174 if err != nil {
1175 return err
1176 }
1177
1178 _, err = d.client.DoWithContext(ctx, req, nil)
1179 return err
1180 }
1181
1182 // ListTopics retrieves all Kafka topics on a Managed Database
1183 func (d *DatabaseServiceHandler) ListTopics(ctx context.Context, databaseID string) ([]DatabaseTopic, *Meta, *http.Response, error) { //nolint:dupl,lll
1184 uri := fmt.Sprintf("%s/%s/topics", databasePath, databaseID)
1185
1186 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1187 if err != nil {
1188 return nil, nil, nil, err
1189 }
1190
1191 databaseTopics := new(databaseTopicsBase)
1192 resp, err := d.client.DoWithContext(ctx, req, databaseTopics)
1193 if err != nil {
1194 return nil, nil, nil, err
1195 }
1196
1197 return databaseTopics.DatabaseTopics, databaseTopics.Meta, resp, nil
1198 }
1199
1200 // CreateTopic will create a Kafka topic within a Managed Database with the given parameters
1201 func (d *DatabaseServiceHandler) CreateTopic(ctx context.Context, databaseID string, databaseTopicReq *DatabaseTopicCreateReq) (*DatabaseTopic, *http.Response, error) { //nolint:lll
1202 uri := fmt.Sprintf("%s/%s/topics", databasePath, databaseID)
1203
1204 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseTopicReq)
1205 if err != nil {
1206 return nil, nil, err
1207 }
1208
1209 databaseTopic := new(databaseTopicBase)
1210 resp, err := d.client.DoWithContext(ctx, req, databaseTopic)
1211 if err != nil {
1212 return nil, nil, err
1213 }
1214
1215 return databaseTopic.DatabaseTopic, resp, nil
1216 }
1217
1218 // GetTopic retrieves information on an individual Kafka topic within a Managed Database based on a topicName and databaseID
1219 func (d *DatabaseServiceHandler) GetTopic(ctx context.Context, databaseID, topicName string) (*DatabaseTopic, *http.Response, error) {
1220 uri := fmt.Sprintf("%s/%s/topics/%s", databasePath, databaseID, topicName)
1221
1222 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1223 if err != nil {
1224 return nil, nil, err
1225 }
1226
1227 databaseTopic := new(databaseTopicBase)
1228 resp, err := d.client.DoWithContext(ctx, req, databaseTopic)
1229 if err != nil {
1230 return nil, nil, err
1231 }
1232
1233 return databaseTopic.DatabaseTopic, resp, nil
1234 }
1235
1236 // UpdateTopic will update a Kafka topic within a Managed Database with the given parameters
1237 func (d *DatabaseServiceHandler) UpdateTopic(ctx context.Context, databaseID, topicName string, databaseTopicReq *DatabaseTopicUpdateReq) (*DatabaseTopic, *http.Response, error) { //nolint:lll,dupl
1238 uri := fmt.Sprintf("%s/%s/topics/%s", databasePath, databaseID, topicName)
1239
1240 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseTopicReq)
1241 if err != nil {
1242 return nil, nil, err
1243 }
1244
1245 databaseTopic := new(databaseTopicBase)
1246 resp, err := d.client.DoWithContext(ctx, req, databaseTopic)
1247 if err != nil {
1248 return nil, nil, err
1249 }
1250
1251 return databaseTopic.DatabaseTopic, resp, nil
1252 }
1253
1254 // DeleteTopic will delete a Kafka topic within a Managed Database
1255 func (d *DatabaseServiceHandler) DeleteTopic(ctx context.Context, databaseID, topicName string) error {
1256 uri := fmt.Sprintf("%s/%s/topics/%s", databasePath, databaseID, topicName)
1257
1258 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1259 if err != nil {
1260 return err
1261 }
1262
1263 _, err = d.client.DoWithContext(ctx, req, nil)
1264 return err
1265 }
1266
1267 // ListQuotas retrieves all Kafka quotas on a Managed Database
1268 func (d *DatabaseServiceHandler) ListQuotas(ctx context.Context, databaseID string) ([]DatabaseQuota, *Meta, *http.Response, error) { //nolint:dupl,lll
1269 uri := fmt.Sprintf("%s/%s/quotas", databasePath, databaseID)
1270
1271 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1272 if err != nil {
1273 return nil, nil, nil, err
1274 }
1275
1276 databaseQuotas := new(databaseQuotasBase)
1277 resp, err := d.client.DoWithContext(ctx, req, databaseQuotas)
1278 if err != nil {
1279 return nil, nil, nil, err
1280 }
1281
1282 return databaseQuotas.DatabaseQuotas, databaseQuotas.Meta, resp, nil
1283 }
1284
1285 // CreateQuota will create a Kafka quota within a Managed Database with the given parameters
1286 func (d *DatabaseServiceHandler) CreateQuota(ctx context.Context, databaseID string, databaseQuotaReq *DatabaseQuotaCreateReq) (*DatabaseQuota, *http.Response, error) { //nolint:lll
1287 uri := fmt.Sprintf("%s/%s/quotas", databasePath, databaseID)
1288
1289 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseQuotaReq)
1290 if err != nil {
1291 return nil, nil, err
1292 }
1293
1294 databaseQuota := new(databaseQuotaBase)
1295 resp, err := d.client.DoWithContext(ctx, req, databaseQuota)
1296 if err != nil {
1297 return nil, nil, err
1298 }
1299
1300 return databaseQuota.DatabaseQuota, resp, nil
1301 }
1302
1303 // GetQuota retrieves information on an individual Kafka quota within a Managed Database based on a clientID and databaseID
1304 func (d *DatabaseServiceHandler) GetQuota(ctx context.Context, databaseID, clientID, username string) (*DatabaseQuota, *http.Response, error) { //nolint:lll
1305 uri := fmt.Sprintf("%s/%s/quotas/%s/%s", databasePath, databaseID, clientID, username)
1306
1307 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1308 if err != nil {
1309 return nil, nil, err
1310 }
1311
1312 databaseQuota := new(databaseQuotaBase)
1313 resp, err := d.client.DoWithContext(ctx, req, databaseQuota)
1314 if err != nil {
1315 return nil, nil, err
1316 }
1317
1318 return databaseQuota.DatabaseQuota, resp, nil
1319 }
1320
1321 // UpdateQuota will update a Kafka quota within a Managed Database with the given parameters
1322 func (d *DatabaseServiceHandler) UpdateQuota(ctx context.Context, databaseID, clientID, username string, databaseQuotaReq *DatabaseQuotaUpdateReq) (*DatabaseQuota, *http.Response, error) { //nolint:lll
1323 uri := fmt.Sprintf("%s/%s/quotas/%s/%s", databasePath, databaseID, clientID, username)
1324
1325 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseQuotaReq)
1326 if err != nil {
1327 return nil, nil, err
1328 }
1329
1330 databaseQuota := new(databaseQuotaBase)
1331 resp, err := d.client.DoWithContext(ctx, req, databaseQuota)
1332 if err != nil {
1333 return nil, nil, err
1334 }
1335
1336 return databaseQuota.DatabaseQuota, resp, nil
1337 }
1338
1339 // DeleteQuota will delete a Kafka quota within a Managed Database
1340 func (d *DatabaseServiceHandler) DeleteQuota(ctx context.Context, databaseID, clientID, username string) error {
1341 uri := fmt.Sprintf("%s/%s/quotas/%s/%s", databasePath, databaseID, clientID, username)
1342
1343 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1344 if err != nil {
1345 return err
1346 }
1347
1348 _, err = d.client.DoWithContext(ctx, req, nil)
1349 return err
1350 }
1351
1352 // ListMaintenanceUpdates retrieves all available maintenance updates for a Managed Database
1353 func (d *DatabaseServiceHandler) ListMaintenanceUpdates(ctx context.Context, databaseID string) ([]string, *http.Response, error) {
1354 uri := fmt.Sprintf("%s/%s/maintenance", databasePath, databaseID)
1355
1356 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1357 if err != nil {
1358 return nil, nil, err
1359 }
1360
1361 databaseUpdates := new(databaseUpdatesBase)
1362 resp, err := d.client.DoWithContext(ctx, req, databaseUpdates)
1363 if err != nil {
1364 return nil, nil, err
1365 }
1366
1367 return databaseUpdates.AvailableUpdates, resp, nil
1368 }
1369
1370 // StartMaintenance will start the maintenance update process for a Managed Database
1371 func (d *DatabaseServiceHandler) StartMaintenance(ctx context.Context, databaseID string) (string, *http.Response, error) {
1372 uri := fmt.Sprintf("%s/%s/maintenance", databasePath, databaseID)
1373
1374 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1375 if err != nil {
1376 return "", nil, err
1377 }
1378
1379 databaseUpdates := new(databaseMessage)
1380 resp, err := d.client.DoWithContext(ctx, req, databaseUpdates)
1381 if err != nil {
1382 return "", nil, err
1383 }
1384
1385 return databaseUpdates.Message, resp, nil
1386 }
1387
1388 // ListAvailableConnectors retrieves all available Kafka connectors for a Managed Database
1389 func (d *DatabaseServiceHandler) ListAvailableConnectors(ctx context.Context, databaseID string) ([]DatabaseAvailableConnector, *http.Response, error) { //nolint:lll
1390 uri := fmt.Sprintf("%s/%s/available-connectors", databasePath, databaseID)
1391
1392 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1393 if err != nil {
1394 return nil, nil, err
1395 }
1396
1397 databaseAvailableConnectors := new(databaseAvailableConnectorsBase)
1398 resp, err := d.client.DoWithContext(ctx, req, databaseAvailableConnectors)
1399 if err != nil {
1400 return nil, nil, err
1401 }
1402
1403 return databaseAvailableConnectors.DatabaseAvailableConnectors, resp, nil
1404 }
1405
1406 // GetConnectorConfigurationSchema retrieves all available configuration options for a Kafka connector on a Managed Database
1407 func (d *DatabaseServiceHandler) GetConnectorConfigurationSchema(ctx context.Context, databaseID, connectorClass string) ([]DatabaseConnectorConfigurationOption, *http.Response, error) { //nolint:lll
1408 uri := fmt.Sprintf("%s/%s/available-connectors/%s/configuration", databasePath, databaseID, connectorClass)
1409
1410 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1411 if err != nil {
1412 return nil, nil, err
1413 }
1414
1415 databaseConnectorConfigurationSchema := new(databaseConnectorConfigBase)
1416 resp, err := d.client.DoWithContext(ctx, req, databaseConnectorConfigurationSchema)
1417 if err != nil {
1418 return nil, nil, err
1419 }
1420
1421 return databaseConnectorConfigurationSchema.ConfigurationSchema, resp, nil
1422 }
1423
1424 // ListConnectors retrieves all Kafka connectors on a Managed Database
1425 func (d *DatabaseServiceHandler) ListConnectors(ctx context.Context, databaseID string) ([]DatabaseConnector, *Meta, *http.Response, error) { //nolint:dupl,lll
1426 uri := fmt.Sprintf("%s/%s/connectors", databasePath, databaseID)
1427
1428 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1429 if err != nil {
1430 return nil, nil, nil, err
1431 }
1432
1433 databaseConnectors := new(databaseConnectorsBase)
1434 resp, err := d.client.DoWithContext(ctx, req, databaseConnectors)
1435 if err != nil {
1436 return nil, nil, nil, err
1437 }
1438
1439 return databaseConnectors.DatabaseConnectors, databaseConnectors.Meta, resp, nil
1440 }
1441
1442 // CreateConnector will create a Kafka connector within a Managed Database with the given parameters
1443 func (d *DatabaseServiceHandler) CreateConnector(ctx context.Context, databaseID string, databaseConnectorReq *DatabaseConnectorCreateReq) (*DatabaseConnector, *http.Response, error) { //nolint:lll
1444 uri := fmt.Sprintf("%s/%s/connectors", databasePath, databaseID)
1445
1446 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseConnectorReq)
1447 if err != nil {
1448 return nil, nil, err
1449 }
1450
1451 databaseConnector := new(databaseConnectorBase)
1452 resp, err := d.client.DoWithContext(ctx, req, databaseConnector)
1453 if err != nil {
1454 return nil, nil, err
1455 }
1456
1457 return databaseConnector.DatabaseConnector, resp, nil
1458 }
1459
1460 // GetConnector retrieves information on an individual Kafka connector within a Managed Database based on a connectorName and databaseID
1461 func (d *DatabaseServiceHandler) GetConnector(ctx context.Context, databaseID, connectorName string) (*DatabaseConnector, *http.Response, error) { //nolint:lll
1462 uri := fmt.Sprintf("%s/%s/connectors/%s", databasePath, databaseID, connectorName)
1463
1464 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1465 if err != nil {
1466 return nil, nil, err
1467 }
1468
1469 databaseConnector := new(databaseConnectorBase)
1470 resp, err := d.client.DoWithContext(ctx, req, databaseConnector)
1471 if err != nil {
1472 return nil, nil, err
1473 }
1474
1475 return databaseConnector.DatabaseConnector, resp, nil
1476 }
1477
1478 // UpdateConnector will update a Kafka connector within a Managed Database with the given parameters
1479 func (d *DatabaseServiceHandler) UpdateConnector(ctx context.Context, databaseID, connectorName string, databaseConnectorReq *DatabaseConnectorUpdateReq) (*DatabaseConnector, *http.Response, error) { //nolint:lll,dupl
1480 uri := fmt.Sprintf("%s/%s/connectors/%s", databasePath, databaseID, connectorName)
1481
1482 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseConnectorReq)
1483 if err != nil {
1484 return nil, nil, err
1485 }
1486
1487 databaseConnector := new(databaseConnectorBase)
1488 resp, err := d.client.DoWithContext(ctx, req, databaseConnector)
1489 if err != nil {
1490 return nil, nil, err
1491 }
1492
1493 return databaseConnector.DatabaseConnector, resp, nil
1494 }
1495
1496 // DeleteConnector will delete a Kafka connector within a Managed Database
1497 func (d *DatabaseServiceHandler) DeleteConnector(ctx context.Context, databaseID, connectorName string) error {
1498 uri := fmt.Sprintf("%s/%s/connectors/%s", databasePath, databaseID, connectorName)
1499
1500 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1501 if err != nil {
1502 return err
1503 }
1504
1505 _, err = d.client.DoWithContext(ctx, req, nil)
1506 return err
1507 }
1508
1509 // GetConnectorStatus retrieves the status of a Kafka connector within a Managed Database based on a connectorName and databaseID
1510 func (d *DatabaseServiceHandler) GetConnectorStatus(ctx context.Context, databaseID, connectorName string) (*DatabaseConnectorStatus, *http.Response, error) { //nolint:lll
1511 uri := fmt.Sprintf("%s/%s/connectors/%s/status", databasePath, databaseID, connectorName)
1512
1513 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1514 if err != nil {
1515 return nil, nil, err
1516 }
1517
1518 databaseConnectorStatus := new(databaseConnectorStatusBase)
1519 resp, err := d.client.DoWithContext(ctx, req, databaseConnectorStatus)
1520 if err != nil {
1521 return nil, nil, err
1522 }
1523
1524 return databaseConnectorStatus.ConnectorStatus, resp, nil
1525 }
1526
1527 // RestartConnector will restart a Kafka connector within a Managed Database
1528 func (d *DatabaseServiceHandler) RestartConnector(ctx context.Context, databaseID, connectorName string) error {
1529 uri := fmt.Sprintf("%s/%s/connectors/%s/restart", databasePath, databaseID, connectorName)
1530
1531 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1532 if err != nil {
1533 return err
1534 }
1535
1536 _, err = d.client.DoWithContext(ctx, req, nil)
1537 return err
1538 }
1539
1540 // PauseConnector will pause a Kafka connector within a Managed Database
1541 func (d *DatabaseServiceHandler) PauseConnector(ctx context.Context, databaseID, connectorName string) error {
1542 uri := fmt.Sprintf("%s/%s/connectors/%s/pause", databasePath, databaseID, connectorName)
1543
1544 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1545 if err != nil {
1546 return err
1547 }
1548
1549 _, err = d.client.DoWithContext(ctx, req, nil)
1550 return err
1551 }
1552
1553 // ResumeConnector will resume a paused Kafka connector within a Managed Database
1554 func (d *DatabaseServiceHandler) ResumeConnector(ctx context.Context, databaseID, connectorName string) error {
1555 uri := fmt.Sprintf("%s/%s/connectors/%s/resume", databasePath, databaseID, connectorName)
1556
1557 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1558 if err != nil {
1559 return err
1560 }
1561
1562 _, err = d.client.DoWithContext(ctx, req, nil)
1563 return err
1564 }
1565
1566 // RestartConnectorTask will restart a Kafka connector task within a Managed Database
1567 func (d *DatabaseServiceHandler) RestartConnectorTask(ctx context.Context, databaseID, connectorName string, taskID int) error {
1568 uri := fmt.Sprintf("%s/%s/connectors/%s/tasks/%d/restart", databasePath, databaseID, connectorName, taskID)
1569
1570 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1571 if err != nil {
1572 return err
1573 }
1574
1575 _, err = d.client.DoWithContext(ctx, req, nil)
1576 return err
1577 }
1578
1579 // ListServiceAlerts queries for service alerts for a Managed Database using the given parameters
1580 func (d *DatabaseServiceHandler) ListServiceAlerts(ctx context.Context, databaseID string, databaseAlertsReq *DatabaseListAlertsReq) ([]DatabaseAlert, *http.Response, error) { //nolint:lll
1581 uri := fmt.Sprintf("%s/%s/alerts", databasePath, databaseID)
1582
1583 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseAlertsReq)
1584 if err != nil {
1585 return nil, nil, err
1586 }
1587
1588 databaseAlerts := new(databaseAlertsBase)
1589 resp, err := d.client.DoWithContext(ctx, req, databaseAlerts)
1590 if err != nil {
1591 return nil, nil, err
1592 }
1593
1594 return databaseAlerts.DatabaseAlerts, resp, nil
1595 }
1596
1597 // GetMigrationStatus retrieves the migration status for a Managed Database
1598 func (d *DatabaseServiceHandler) GetMigrationStatus(ctx context.Context, databaseID string) (*DatabaseMigration, *http.Response, error) {
1599 uri := fmt.Sprintf("%s/%s/migration", databasePath, databaseID)
1600
1601 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1602 if err != nil {
1603 return nil, nil, err
1604 }
1605
1606 databaseMigration := new(databaseMigrationBase)
1607 resp, err := d.client.DoWithContext(ctx, req, databaseMigration)
1608 if err != nil {
1609 return nil, nil, err
1610 }
1611
1612 return databaseMigration.Migration, resp, nil
1613 }
1614
1615 // StartMigration will start a migration for a Managed Database using the given credentials
1616 func (d *DatabaseServiceHandler) StartMigration(ctx context.Context, databaseID string, databaseMigrationReq *DatabaseMigrationStartReq) (*DatabaseMigration, *http.Response, error) { //nolint:lll
1617 uri := fmt.Sprintf("%s/%s/migration", databasePath, databaseID)
1618
1619 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseMigrationReq)
1620 if err != nil {
1621 return nil, nil, err
1622 }
1623
1624 databaseMigration := new(databaseMigrationBase)
1625 resp, err := d.client.DoWithContext(ctx, req, databaseMigration)
1626 if err != nil {
1627 return nil, nil, err
1628 }
1629
1630 return databaseMigration.Migration, resp, nil
1631 }
1632
1633 // DetachMigration will detach a migration from a Managed Database
1634 func (d *DatabaseServiceHandler) DetachMigration(ctx context.Context, databaseID string) error {
1635 uri := fmt.Sprintf("%s/%s/migration", databasePath, databaseID)
1636
1637 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1638 if err != nil {
1639 return err
1640 }
1641
1642 _, err = d.client.DoWithContext(ctx, req, nil)
1643 return err
1644 }
1645
1646 // AddReadOnlyReplica will add a read-only replica node to a Managed Database with the given parameters
1647 func (d *DatabaseServiceHandler) AddReadOnlyReplica(ctx context.Context, databaseID string, databaseReplicaReq *DatabaseAddReplicaReq) (*Database, *http.Response, error) { //nolint:lll
1648 uri := fmt.Sprintf("%s/%s/read-replica", databasePath, databaseID)
1649
1650 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseReplicaReq)
1651 if err != nil {
1652 return nil, nil, err
1653 }
1654
1655 database := new(databaseBase)
1656 resp, err := d.client.DoWithContext(ctx, req, database)
1657 if err != nil {
1658 return nil, nil, err
1659 }
1660
1661 return database.Database, resp, nil
1662 }
1663
1664 // PromoteReadReplica will promote a read-only replica to its own standalone Managed Database subscription
1665 func (d *DatabaseServiceHandler) PromoteReadReplica(ctx context.Context, databaseID string) error {
1666 uri := fmt.Sprintf("%s/%s/promote-read-replica", databasePath, databaseID)
1667
1668 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, nil)
1669 if err != nil {
1670 return err
1671 }
1672
1673 _, err = d.client.DoWithContext(ctx, req, nil)
1674 return err
1675 }
1676
1677 // GetBackupInformation retrieves backup information for a Managed Database
1678 func (d *DatabaseServiceHandler) GetBackupInformation(ctx context.Context, databaseID string) (*DatabaseBackups, *http.Response, error) {
1679 uri := fmt.Sprintf("%s/%s/backups", databasePath, databaseID)
1680
1681 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1682 if err != nil {
1683 return nil, nil, err
1684 }
1685
1686 databaseBackups := new(DatabaseBackups)
1687 resp, err := d.client.DoWithContext(ctx, req, databaseBackups)
1688 if err != nil {
1689 return nil, nil, err
1690 }
1691
1692 return databaseBackups, resp, nil
1693 }
1694
1695 // RestoreFromBackup will create a new subscription of the same plan from a backup of a Managed Database using the given parameters
1696 func (d *DatabaseServiceHandler) RestoreFromBackup(ctx context.Context, databaseID string, databaseRestoreReq *DatabaseBackupRestoreReq) (*Database, *http.Response, error) { //nolint:lll
1697 uri := fmt.Sprintf("%s/%s/restore", databasePath, databaseID)
1698
1699 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseRestoreReq)
1700 if err != nil {
1701 return nil, nil, err
1702 }
1703
1704 database := new(databaseBase)
1705 resp, err := d.client.DoWithContext(ctx, req, database)
1706 if err != nil {
1707 return nil, nil, err
1708 }
1709
1710 return database.Database, resp, nil
1711 }
1712
1713 // Fork will create a new subscription of any plan from a backup of a Managed Database using the given parameters
1714 func (d *DatabaseServiceHandler) Fork(ctx context.Context, databaseID string, databaseForkReq *DatabaseForkReq) (*Database, *http.Response, error) { //nolint:lll
1715 uri := fmt.Sprintf("%s/%s/fork", databasePath, databaseID)
1716
1717 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseForkReq)
1718 if err != nil {
1719 return nil, nil, err
1720 }
1721
1722 database := new(databaseBase)
1723 resp, err := d.client.DoWithContext(ctx, req, database)
1724 if err != nil {
1725 return nil, nil, err
1726 }
1727
1728 return database.Database, resp, nil
1729 }
1730
1731 // ListConnectionPools retrieves all connection pools within your PostgreSQL Managed Database
1732 func (d *DatabaseServiceHandler) ListConnectionPools(ctx context.Context, databaseID string) (*DatabaseConnections, []DatabaseConnectionPool, *Meta, *http.Response, error) { //nolint:lll
1733 uri := fmt.Sprintf("%s/%s/connection-pools", databasePath, databaseID)
1734
1735 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1736 if err != nil {
1737 return nil, nil, nil, nil, err
1738 }
1739
1740 databaseConnectionPools := new(databaseConnectionPoolsBase)
1741 resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPools)
1742 if err != nil {
1743 return nil, nil, nil, nil, err
1744 }
1745
1746 return databaseConnectionPools.Connections, databaseConnectionPools.ConnectionPools, databaseConnectionPools.Meta, resp, nil
1747 }
1748
1749 // CreateConnectionPool will create a connection pool within the PostgreSQL Managed Database with the given parameters
1750 func (d *DatabaseServiceHandler) CreateConnectionPool(ctx context.Context, databaseID string, databaseConnectionPoolReq *DatabaseConnectionPoolCreateReq) (*DatabaseConnectionPool, *http.Response, error) { //nolint:lll
1751 uri := fmt.Sprintf("%s/%s/connection-pools", databasePath, databaseID)
1752
1753 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseConnectionPoolReq)
1754 if err != nil {
1755 return nil, nil, err
1756 }
1757
1758 databaseConnectionPool := new(databaseConnectionPoolBase)
1759 resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPool)
1760 if err != nil {
1761 return nil, nil, err
1762 }
1763
1764 return databaseConnectionPool.ConnectionPool, resp, nil
1765 }
1766
1767 // GetConnectionPool retrieves information on an individual connection pool
1768 // within a PostgreSQL Managed Database based on a poolName and databaseID
1769 func (d *DatabaseServiceHandler) GetConnectionPool(ctx context.Context, databaseID, poolName string) (*DatabaseConnectionPool, *http.Response, error) { //nolint:lll
1770 uri := fmt.Sprintf("%s/%s/connection-pools/%s", databasePath, databaseID, poolName)
1771
1772 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1773 if err != nil {
1774 return nil, nil, err
1775 }
1776
1777 databaseConnectionPool := new(databaseConnectionPoolBase)
1778 resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPool)
1779 if err != nil {
1780 return nil, nil, err
1781 }
1782
1783 return databaseConnectionPool.ConnectionPool, resp, nil
1784 }
1785
1786 // UpdateConnectionPool will update a connection pool within the PostgreSQL Managed Database with the given parameters
1787 func (d *DatabaseServiceHandler) UpdateConnectionPool(ctx context.Context, databaseID, poolName string, databaseConnectionPoolReq *DatabaseConnectionPoolUpdateReq) (*DatabaseConnectionPool, *http.Response, error) { //nolint:lll,dupl
1788 uri := fmt.Sprintf("%s/%s/connection-pools/%s", databasePath, databaseID, poolName)
1789
1790 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseConnectionPoolReq)
1791 if err != nil {
1792 return nil, nil, err
1793 }
1794
1795 databaseConnectionPool := new(databaseConnectionPoolBase)
1796 resp, err := d.client.DoWithContext(ctx, req, databaseConnectionPool)
1797 if err != nil {
1798 return nil, nil, err
1799 }
1800
1801 return databaseConnectionPool.ConnectionPool, resp, nil
1802 }
1803
1804 // DeleteConnectionPool will delete a connection pool within a Managed Database
1805 func (d *DatabaseServiceHandler) DeleteConnectionPool(ctx context.Context, databaseID, poolName string) error {
1806 uri := fmt.Sprintf("%s/%s/connection-pools/%s", databasePath, databaseID, poolName)
1807
1808 req, err := d.client.NewRequest(ctx, http.MethodDelete, uri, nil)
1809 if err != nil {
1810 return err
1811 }
1812
1813 _, err = d.client.DoWithContext(ctx, req, nil)
1814 return err
1815 }
1816
1817 // ListAdvancedOptions retrieves all current and available advanced configuration options within a Managed Database
1818 func (d *DatabaseServiceHandler) ListAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1819 uri := fmt.Sprintf("%s/%s/advanced-options", databasePath, databaseID)
1820
1821 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1822 if err != nil {
1823 return nil, nil, nil, err
1824 }
1825
1826 databaseAdvancedOptions := new(databaseAdvancedOptionsBase)
1827 resp, err := d.client.DoWithContext(ctx, req, databaseAdvancedOptions)
1828 if err != nil {
1829 return nil, nil, nil, err
1830 }
1831
1832 return databaseAdvancedOptions.ConfiguredOptions, databaseAdvancedOptions.AvailableOptions, resp, nil
1833 }
1834
1835 // UpdateAdvancedOptions will update advanced configuration options within a Managed Database with the given parameters
1836 func (d *DatabaseServiceHandler) UpdateAdvancedOptions(ctx context.Context, databaseID string, databaseAdvancedOptionsReq *DatabaseAdvancedOptions) (*DatabaseAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1837 uri := fmt.Sprintf("%s/%s/advanced-options", databasePath, databaseID)
1838
1839 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseAdvancedOptionsReq)
1840 if err != nil {
1841 return nil, nil, nil, err
1842 }
1843
1844 databaseAdvancedOptions := new(databaseAdvancedOptionsBase)
1845 resp, err := d.client.DoWithContext(ctx, req, databaseAdvancedOptions)
1846 if err != nil {
1847 return nil, nil, nil, err
1848 }
1849
1850 return databaseAdvancedOptions.ConfiguredOptions, databaseAdvancedOptions.AvailableOptions, resp, nil
1851 }
1852
1853 // ListKafkaRESTAdvancedOptions retrieves all current and available Kafka REST advanced configuration options within a Managed Database
1854 func (d *DatabaseServiceHandler) ListKafkaRESTAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1855 uri := fmt.Sprintf("%s/%s/advanced-options/kafka-rest", databasePath, databaseID)
1856
1857 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1858 if err != nil {
1859 return nil, nil, nil, err
1860 }
1861
1862 databaseKafkaRESTAdvancedOptions := new(databaseKafkaRESTAdvancedOptionsBase)
1863 resp, err := d.client.DoWithContext(ctx, req, databaseKafkaRESTAdvancedOptions)
1864 if err != nil {
1865 return nil, nil, nil, err
1866 }
1867
1868 return databaseKafkaRESTAdvancedOptions.ConfiguredOptions, databaseKafkaRESTAdvancedOptions.AvailableOptions, resp, nil
1869 }
1870
1871 // UpdateKafkaRESTAdvancedOptions will update Kafka REST advanced configuration options within a Managed Database with the given parameters
1872 func (d *DatabaseServiceHandler) UpdateKafkaRESTAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaRESTAdvancedOptionsReq *DatabaseKafkaRESTAdvancedOptions) (*DatabaseKafkaRESTAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1873 uri := fmt.Sprintf("%s/%s/advanced-options/kafka-rest", databasePath, databaseID)
1874
1875 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseKafkaRESTAdvancedOptionsReq)
1876 if err != nil {
1877 return nil, nil, nil, err
1878 }
1879
1880 databaseKafkaRESTAdvancedOptions := new(databaseKafkaRESTAdvancedOptionsBase)
1881 resp, err := d.client.DoWithContext(ctx, req, databaseKafkaRESTAdvancedOptions)
1882 if err != nil {
1883 return nil, nil, nil, err
1884 }
1885
1886 return databaseKafkaRESTAdvancedOptions.ConfiguredOptions, databaseKafkaRESTAdvancedOptions.AvailableOptions, resp, nil
1887 }
1888
1889 // ListSchemaRegistryAdvancedOptions retrieves all current and available Schema Registry advanced options within a Managed Database
1890 func (d *DatabaseServiceHandler) ListSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1891 uri := fmt.Sprintf("%s/%s/advanced-options/schema-registry", databasePath, databaseID)
1892
1893 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1894 if err != nil {
1895 return nil, nil, nil, err
1896 }
1897
1898 databaseSchemaRegistryAdvancedOptions := new(databaseSchemaRegistryAdvancedOptionsBase)
1899 resp, err := d.client.DoWithContext(ctx, req, databaseSchemaRegistryAdvancedOptions)
1900 if err != nil {
1901 return nil, nil, nil, err
1902 }
1903
1904 return databaseSchemaRegistryAdvancedOptions.ConfiguredOptions, databaseSchemaRegistryAdvancedOptions.AvailableOptions, resp, nil
1905 }
1906
1907 // UpdateSchemaRegistryAdvancedOptions will update Schema Registry advanced options within a Managed Database with the given parameters
1908 func (d *DatabaseServiceHandler) UpdateSchemaRegistryAdvancedOptions(ctx context.Context, databaseID string, databaseSchemaRegistryAdvancedOptionsReq *DatabaseSchemaRegistryAdvancedOptions) (*DatabaseSchemaRegistryAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1909 uri := fmt.Sprintf("%s/%s/advanced-options/schema-registry", databasePath, databaseID)
1910
1911 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseSchemaRegistryAdvancedOptionsReq)
1912 if err != nil {
1913 return nil, nil, nil, err
1914 }
1915
1916 databaseSchemaRegistryAdvancedOptions := new(databaseSchemaRegistryAdvancedOptionsBase)
1917 resp, err := d.client.DoWithContext(ctx, req, databaseSchemaRegistryAdvancedOptions)
1918 if err != nil {
1919 return nil, nil, nil, err
1920 }
1921
1922 return databaseSchemaRegistryAdvancedOptions.ConfiguredOptions, databaseSchemaRegistryAdvancedOptions.AvailableOptions, resp, nil
1923 }
1924
1925 // ListKafkaConnectAdvancedOptions retrieves all current and available Kafka Connect advanced options within a Managed Database
1926 func (d *DatabaseServiceHandler) ListKafkaConnectAdvancedOptions(ctx context.Context, databaseID string) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:dupl,lll
1927 uri := fmt.Sprintf("%s/%s/advanced-options/kafka-connect", databasePath, databaseID)
1928
1929 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1930 if err != nil {
1931 return nil, nil, nil, err
1932 }
1933
1934 databaseKafkaConnectAdvancedOptions := new(databaseKafkaConnectAdvancedOptionsBase)
1935 resp, err := d.client.DoWithContext(ctx, req, databaseKafkaConnectAdvancedOptions)
1936 if err != nil {
1937 return nil, nil, nil, err
1938 }
1939
1940 return databaseKafkaConnectAdvancedOptions.ConfiguredOptions, databaseKafkaConnectAdvancedOptions.AvailableOptions, resp, nil
1941 }
1942
1943 // UpdateKafkaConnectAdvancedOptions will update Kafka Connect advanced options within a Managed Database with the given parameters
1944 func (d *DatabaseServiceHandler) UpdateKafkaConnectAdvancedOptions(ctx context.Context, databaseID string, databaseKafkaConnectAdvancedOptionsReq *DatabaseKafkaConnectAdvancedOptions) (*DatabaseKafkaConnectAdvancedOptions, []AvailableOption, *http.Response, error) { //nolint:lll
1945 uri := fmt.Sprintf("%s/%s/advanced-options/kafka-connect", databasePath, databaseID)
1946
1947 req, err := d.client.NewRequest(ctx, http.MethodPut, uri, databaseKafkaConnectAdvancedOptionsReq)
1948 if err != nil {
1949 return nil, nil, nil, err
1950 }
1951
1952 databaseKafkaConnectAdvancedOptions := new(databaseKafkaConnectAdvancedOptionsBase)
1953 resp, err := d.client.DoWithContext(ctx, req, databaseKafkaConnectAdvancedOptions)
1954 if err != nil {
1955 return nil, nil, nil, err
1956 }
1957
1958 return databaseKafkaConnectAdvancedOptions.ConfiguredOptions, databaseKafkaConnectAdvancedOptions.AvailableOptions, resp, nil
1959 }
1960
1961 // ListAvailableVersions retrieves all available version upgrades for a Managed Database
1962 func (d *DatabaseServiceHandler) ListAvailableVersions(ctx context.Context, databaseID string) ([]string, *http.Response, error) {
1963 uri := fmt.Sprintf("%s/%s/version-upgrade", databasePath, databaseID)
1964
1965 req, err := d.client.NewRequest(ctx, http.MethodGet, uri, nil)
1966 if err != nil {
1967 return nil, nil, err
1968 }
1969
1970 databaseVersions := new(DatabaseAvailableVersions)
1971 resp, err := d.client.DoWithContext(ctx, req, databaseVersions)
1972 if err != nil {
1973 return nil, nil, err
1974 }
1975
1976 return databaseVersions.AvailableVersions, resp, nil
1977 }
1978
1979 // StartVersionUpgrade will start a migration for a Managed Database using the given credentials
1980 func (d *DatabaseServiceHandler) StartVersionUpgrade(ctx context.Context, databaseID string, databaseVersionUpgradeReq *DatabaseVersionUpgradeReq) (string, *http.Response, error) { //nolint:lll
1981 uri := fmt.Sprintf("%s/%s/version-upgrade", databasePath, databaseID)
1982
1983 req, err := d.client.NewRequest(ctx, http.MethodPost, uri, databaseVersionUpgradeReq)
1984 if err != nil {
1985 return "", nil, err
1986 }
1987
1988 databaseVersionUpgrade := new(databaseMessage)
1989 resp, err := d.client.DoWithContext(ctx, req, databaseVersionUpgrade)
1990 if err != nil {
1991 return "", nil, err
1992 }
1993
1994 return databaseVersionUpgrade.Message, resp, nil
1995 }
1996