mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
226
vendor/github.com/digitalocean/godo/databases.go
generated
vendored
226
vendor/github.com/digitalocean/godo/databases.go
generated
vendored
@ -4,29 +4,88 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
databaseBasePath = "/v2/databases"
|
||||
databaseSinglePath = databaseBasePath + "/%s"
|
||||
databaseResizePath = databaseBasePath + "/%s/resize"
|
||||
databaseMigratePath = databaseBasePath + "/%s/migrate"
|
||||
databaseMaintenancePath = databaseBasePath + "/%s/maintenance"
|
||||
databaseBackupsPath = databaseBasePath + "/%s/backups"
|
||||
databaseUsersPath = databaseBasePath + "/%s/users"
|
||||
databaseUserPath = databaseBasePath + "/%s/users/%s"
|
||||
databaseDBPath = databaseBasePath + "/%s/dbs/%s"
|
||||
databaseDBsPath = databaseBasePath + "/%s/dbs"
|
||||
databasePoolPath = databaseBasePath + "/%s/pools/%s"
|
||||
databasePoolsPath = databaseBasePath + "/%s/pools"
|
||||
databaseReplicaPath = databaseBasePath + "/%s/replicas/%s"
|
||||
databaseReplicasPath = databaseBasePath + "/%s/replicas"
|
||||
evictionPolicyPath = databaseBasePath + "/%s/eviction_policy"
|
||||
databaseBasePath = "/v2/databases"
|
||||
databaseSinglePath = databaseBasePath + "/%s"
|
||||
databaseResizePath = databaseBasePath + "/%s/resize"
|
||||
databaseMigratePath = databaseBasePath + "/%s/migrate"
|
||||
databaseMaintenancePath = databaseBasePath + "/%s/maintenance"
|
||||
databaseBackupsPath = databaseBasePath + "/%s/backups"
|
||||
databaseUsersPath = databaseBasePath + "/%s/users"
|
||||
databaseUserPath = databaseBasePath + "/%s/users/%s"
|
||||
databaseDBPath = databaseBasePath + "/%s/dbs/%s"
|
||||
databaseDBsPath = databaseBasePath + "/%s/dbs"
|
||||
databasePoolPath = databaseBasePath + "/%s/pools/%s"
|
||||
databasePoolsPath = databaseBasePath + "/%s/pools"
|
||||
databaseReplicaPath = databaseBasePath + "/%s/replicas/%s"
|
||||
databaseReplicasPath = databaseBasePath + "/%s/replicas"
|
||||
databaseEvictionPolicyPath = databaseBasePath + "/%s/eviction_policy"
|
||||
databaseSQLModePath = databaseBasePath + "/%s/sql_mode"
|
||||
databaseFirewallRulesPath = databaseBasePath + "/%s/firewall"
|
||||
)
|
||||
|
||||
// DatabasesService is an interface for interfacing with the databases endpoints
|
||||
// of the DigitalOcean API.
|
||||
// SQL Mode constants allow for MySQL-specific SQL flavor configuration.
|
||||
const (
|
||||
SQLModeAllowInvalidDates = "ALLOW_INVALID_DATES"
|
||||
SQLModeANSIQuotes = "ANSI_QUOTES"
|
||||
SQLModeHighNotPrecedence = "HIGH_NOT_PRECEDENCE"
|
||||
SQLModeIgnoreSpace = "IGNORE_SPACE"
|
||||
SQLModeNoAuthCreateUser = "NO_AUTO_CREATE_USER"
|
||||
SQLModeNoAutoValueOnZero = "NO_AUTO_VALUE_ON_ZERO"
|
||||
SQLModeNoBackslashEscapes = "NO_BACKSLASH_ESCAPES"
|
||||
SQLModeNoDirInCreate = "NO_DIR_IN_CREATE"
|
||||
SQLModeNoEngineSubstitution = "NO_ENGINE_SUBSTITUTION"
|
||||
SQLModeNoFieldOptions = "NO_FIELD_OPTIONS"
|
||||
SQLModeNoKeyOptions = "NO_KEY_OPTIONS"
|
||||
SQLModeNoTableOptions = "NO_TABLE_OPTIONS"
|
||||
SQLModeNoUnsignedSubtraction = "NO_UNSIGNED_SUBTRACTION"
|
||||
SQLModeNoZeroDate = "NO_ZERO_DATE"
|
||||
SQLModeNoZeroInDate = "NO_ZERO_IN_DATE"
|
||||
SQLModeOnlyFullGroupBy = "ONLY_FULL_GROUP_BY"
|
||||
SQLModePadCharToFullLength = "PAD_CHAR_TO_FULL_LENGTH"
|
||||
SQLModePipesAsConcat = "PIPES_AS_CONCAT"
|
||||
SQLModeRealAsFloat = "REAL_AS_FLOAT"
|
||||
SQLModeStrictAllTables = "STRICT_ALL_TABLES"
|
||||
SQLModeStrictTransTables = "STRICT_TRANS_TABLES"
|
||||
SQLModeANSI = "ANSI"
|
||||
SQLModeDB2 = "DB2"
|
||||
SQLModeMaxDB = "MAXDB"
|
||||
SQLModeMSSQL = "MSSQL"
|
||||
SQLModeMYSQL323 = "MYSQL323"
|
||||
SQLModeMYSQL40 = "MYSQL40"
|
||||
SQLModeOracle = "ORACLE"
|
||||
SQLModePostgreSQL = "POSTGRESQL"
|
||||
SQLModeTraditional = "TRADITIONAL"
|
||||
)
|
||||
|
||||
// SQL Auth constants allow for MySQL-specific user auth plugins
|
||||
const (
|
||||
SQLAuthPluginNative = "mysql_native_password"
|
||||
SQLAuthPluginCachingSHA2 = "caching_sha2_password"
|
||||
)
|
||||
|
||||
// Redis eviction policies supported by the managed Redis product.
|
||||
const (
|
||||
EvictionPolicyNoEviction = "noeviction"
|
||||
EvictionPolicyAllKeysLRU = "allkeys_lru"
|
||||
EvictionPolicyAllKeysRandom = "allkeys_random"
|
||||
EvictionPolicyVolatileLRU = "volatile_lru"
|
||||
EvictionPolicyVolatileRandom = "volatile_random"
|
||||
EvictionPolicyVolatileTTL = "volatile_ttl"
|
||||
)
|
||||
|
||||
// The DatabasesService provides access to the DigitalOcean managed database
|
||||
// suite of products through the public API. Customers can create new database
|
||||
// clusters, migrate them between regions, create replicas and interact with
|
||||
// their configurations. Each database service is refered to as a Database. A
|
||||
// SQL database service can have multiple databases residing in the system. To
|
||||
// help make these entities distinct from Databases in godo, we refer to them
|
||||
// here as DatabaseDBs.
|
||||
//
|
||||
// See: https://developers.digitalocean.com/documentation/v2#databases
|
||||
type DatabasesService interface {
|
||||
List(context.Context, *ListOptions) ([]Database, *Response, error)
|
||||
@ -55,6 +114,10 @@ type DatabasesService interface {
|
||||
DeleteReplica(context.Context, string, string) (*Response, error)
|
||||
GetEvictionPolicy(context.Context, string) (string, *Response, error)
|
||||
SetEvictionPolicy(context.Context, string, string) (*Response, error)
|
||||
GetSQLMode(context.Context, string) (string, *Response, error)
|
||||
SetSQLMode(context.Context, string, ...string) (*Response, error)
|
||||
GetFirewallRules(context.Context, string) ([]DatabaseFirewallRule, *Response, error)
|
||||
UpdateFirewallRules(context.Context, string, *DatabaseUpdateFirewallRulesRequest) (*Response, error)
|
||||
}
|
||||
|
||||
// DatabasesServiceOp handles communication with the Databases related methods
|
||||
@ -86,6 +149,7 @@ type Database struct {
|
||||
MaintenanceWindow *DatabaseMaintenanceWindow `json:"maintenance_window,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
PrivateNetworkUUID string `json:"private_network_uuid,omitempty"`
|
||||
Tags []string `json:"tags,omitempty"`
|
||||
}
|
||||
|
||||
// DatabaseConnection represents a database connection
|
||||
@ -101,9 +165,15 @@ type DatabaseConnection struct {
|
||||
|
||||
// DatabaseUser represents a user in the database
|
||||
type DatabaseUser struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Role string `json:"role,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Role string `json:"role,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
MySQLSettings *DatabaseMySQLUserSettings `json:"mysql_settings,omitempty"`
|
||||
}
|
||||
|
||||
// DatabaseMySQLUserSettings contains MySQL-specific user settings
|
||||
type DatabaseMySQLUserSettings struct {
|
||||
AuthPlugin string `json:"auth_plugin"`
|
||||
}
|
||||
|
||||
// DatabaseMaintenanceWindow represents the maintenance_window of a database
|
||||
@ -123,12 +193,14 @@ type DatabaseBackup struct {
|
||||
|
||||
// DatabaseCreateRequest represents a request to create a database cluster
|
||||
type DatabaseCreateRequest struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
EngineSlug string `json:"engine,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
SizeSlug string `json:"size,omitempty"`
|
||||
Region string `json:"region,omitempty"`
|
||||
NumNodes int `json:"num_nodes,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
EngineSlug string `json:"engine,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
SizeSlug string `json:"size,omitempty"`
|
||||
Region string `json:"region,omitempty"`
|
||||
NumNodes int `json:"num_nodes,omitempty"`
|
||||
PrivateNetworkUUID string `json:"private_network_uuid"`
|
||||
Tags []string `json:"tags,omitempty"`
|
||||
}
|
||||
|
||||
// DatabaseResizeRequest can be used to initiate a database resize operation.
|
||||
@ -139,7 +211,8 @@ type DatabaseResizeRequest struct {
|
||||
|
||||
// DatabaseMigrateRequest can be used to initiate a database migrate operation.
|
||||
type DatabaseMigrateRequest struct {
|
||||
Region string `json:"region,omitempty"`
|
||||
Region string `json:"region,omitempty"`
|
||||
PrivateNetworkUUID string `json:"private_network_uuid"`
|
||||
}
|
||||
|
||||
// DatabaseUpdateMaintenanceRequest can be used to update the database's maintenance window.
|
||||
@ -165,6 +238,7 @@ type DatabaseReplica struct {
|
||||
Status string `json:"status"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
PrivateNetworkUUID string `json:"private_network_uuid,omitempty"`
|
||||
Tags []string `json:"tags,omitempty"`
|
||||
}
|
||||
|
||||
// DatabasePool represents a database connection pool
|
||||
@ -189,7 +263,8 @@ type DatabaseCreatePoolRequest struct {
|
||||
|
||||
// DatabaseCreateUserRequest is used to create a new database user
|
||||
type DatabaseCreateUserRequest struct {
|
||||
Name string `json:"name"`
|
||||
Name string `json:"name"`
|
||||
MySQLSettings *DatabaseMySQLUserSettings `json:"mysql_settings,omitempty"`
|
||||
}
|
||||
|
||||
// DatabaseCreateDBRequest is used to create a new engine-specific database within the cluster
|
||||
@ -199,9 +274,25 @@ type DatabaseCreateDBRequest struct {
|
||||
|
||||
// DatabaseCreateReplicaRequest is used to create a new read-only replica
|
||||
type DatabaseCreateReplicaRequest struct {
|
||||
Name string `json:"name"`
|
||||
Region string `json:"region"`
|
||||
Size string `json:"size"`
|
||||
Name string `json:"name"`
|
||||
Region string `json:"region"`
|
||||
Size string `json:"size"`
|
||||
PrivateNetworkUUID string `json:"private_network_uuid"`
|
||||
Tags []string `json:"tags,omitempty"`
|
||||
}
|
||||
|
||||
// DatabaseUpdateFirewallRulesRequest is used to set the firewall rules for a database
|
||||
type DatabaseUpdateFirewallRulesRequest struct {
|
||||
Rules []*DatabaseFirewallRule `json:"rules"`
|
||||
}
|
||||
|
||||
// DatabaseFirewallRule is a rule describing an inbound source to a database
|
||||
type DatabaseFirewallRule struct {
|
||||
UUID string `json:"uuid"`
|
||||
ClusterUUID string `json:"cluster_uuid"`
|
||||
Type string `json:"type"`
|
||||
Value string `json:"value"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
type databaseUserRoot struct {
|
||||
@ -252,6 +343,15 @@ type evictionPolicyRoot struct {
|
||||
EvictionPolicy string `json:"eviction_policy"`
|
||||
}
|
||||
|
||||
type sqlModeRoot struct {
|
||||
SQLMode string `json:"sql_mode"`
|
||||
}
|
||||
|
||||
type databaseFirewallRuleRoot struct {
|
||||
Rules []DatabaseFirewallRule `json:"rules"`
|
||||
}
|
||||
|
||||
// URN returns a URN identifier for the database
|
||||
func (d Database) URN() string {
|
||||
return ToURN("dbaas", d.ID)
|
||||
}
|
||||
@ -635,7 +735,7 @@ func (svc *DatabasesServiceOp) DeleteReplica(ctx context.Context, databaseID, na
|
||||
|
||||
// GetEvictionPolicy loads the eviction policy for a given Redis cluster.
|
||||
func (svc *DatabasesServiceOp) GetEvictionPolicy(ctx context.Context, databaseID string) (string, *Response, error) {
|
||||
path := fmt.Sprintf(evictionPolicyPath, databaseID)
|
||||
path := fmt.Sprintf(databaseEvictionPolicyPath, databaseID)
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodGet, path, nil)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
@ -649,8 +749,11 @@ func (svc *DatabasesServiceOp) GetEvictionPolicy(ctx context.Context, databaseID
|
||||
}
|
||||
|
||||
// SetEvictionPolicy updates the eviction policy for a given Redis cluster.
|
||||
//
|
||||
// The valid eviction policies are documented by the exported string constants
|
||||
// with the prefix `EvictionPolicy`.
|
||||
func (svc *DatabasesServiceOp) SetEvictionPolicy(ctx context.Context, databaseID, policy string) (*Response, error) {
|
||||
path := fmt.Sprintf(evictionPolicyPath, databaseID)
|
||||
path := fmt.Sprintf(databaseEvictionPolicyPath, databaseID)
|
||||
root := &evictionPolicyRoot{EvictionPolicy: policy}
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodPut, path, root)
|
||||
if err != nil {
|
||||
@ -662,3 +765,60 @@ func (svc *DatabasesServiceOp) SetEvictionPolicy(ctx context.Context, databaseID
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// GetSQLMode loads the SQL Mode settings for a given MySQL cluster.
|
||||
func (svc *DatabasesServiceOp) GetSQLMode(ctx context.Context, databaseID string) (string, *Response, error) {
|
||||
path := fmt.Sprintf(databaseSQLModePath, databaseID)
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodGet, path, nil)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
root := &sqlModeRoot{}
|
||||
resp, err := svc.client.Do(ctx, req, root)
|
||||
if err != nil {
|
||||
return "", resp, err
|
||||
}
|
||||
return root.SQLMode, resp, nil
|
||||
}
|
||||
|
||||
// SetSQLMode updates the SQL Mode settings for a given MySQL cluster.
|
||||
func (svc *DatabasesServiceOp) SetSQLMode(ctx context.Context, databaseID string, sqlModes ...string) (*Response, error) {
|
||||
path := fmt.Sprintf(databaseSQLModePath, databaseID)
|
||||
root := &sqlModeRoot{SQLMode: strings.Join(sqlModes, ",")}
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodPut, path, root)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp, err := svc.client.Do(ctx, req, nil)
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// GetFirewallRules loads the inbound sources for a given cluster.
|
||||
func (svc *DatabasesServiceOp) GetFirewallRules(ctx context.Context, databaseID string) ([]DatabaseFirewallRule, *Response, error) {
|
||||
path := fmt.Sprintf(databaseFirewallRulesPath, databaseID)
|
||||
root := new(databaseFirewallRuleRoot)
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodGet, path, nil)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
resp, err := svc.client.Do(ctx, req, root)
|
||||
if err != nil {
|
||||
return nil, resp, err
|
||||
}
|
||||
|
||||
return root.Rules, resp, nil
|
||||
}
|
||||
|
||||
// UpdateFirewallRules sets the inbound sources for a given cluster.
|
||||
func (svc *DatabasesServiceOp) UpdateFirewallRules(ctx context.Context, databaseID string, firewallRulesReq *DatabaseUpdateFirewallRulesRequest) (*Response, error) {
|
||||
path := fmt.Sprintf(databaseFirewallRulesPath, databaseID)
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodPut, path, firewallRulesReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return svc.client.Do(ctx, req, nil)
|
||||
}
|
||||
|
Reference in New Issue
Block a user