dbconfigs

package
v0.16.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 9, 2023 License: Apache-2.0 Imports: 18 Imported by: 42

Documentation

Overview

Package dbconfigs provides the registration for command line options to collect db connection parameters. Once registered and collected, it provides variables and functions to build connection parameters for connecting to the database.

Index

Constants

View Source
const (
	App      = "app"
	AppDebug = "appdebug"
	// AllPrivs user should have more privileges than App (should include possibility to do
	// schema changes and write to internal Vitess tables), but it shouldn't have SUPER
	// privilege like Dba has.
	AllPrivs     = "allprivs"
	Dba          = "dba"
	Filtered     = "filtered"
	Repl         = "repl"
	ExternalRepl = "erepl"
)

config flags

Variables

View Source
var AllCredentialsServers = make(map[string]CredentialsServer)

AllCredentialsServers contains all the known CredentialsServer implementations. Note we will only access this after flags have been parsed.

View Source
var (

	// ErrUnknownUser is returned by credential server when the
	// user doesn't exist
	ErrUnknownUser = errors.New("unknown user")
)

Functions

func RegisterFlags

func RegisterFlags(userKeys ...string)

RegisterFlags registers the base DBFlags, credentials flags, and the user specific ones for the specified system users for the requesting command. For instance, the vttablet command will register flags for all users as defined in the dbconfigs.All variable.

Types

type Connector

type Connector struct {
	// contains filtered or unexported fields
}

Connector contains Connection Parameters for mysql connection

func New

func New(mcp *mysql.ConnParams) Connector

New initializes a ConnParams from mysql connection parameters

func (*Connector) Connect

func (c *Connector) Connect(ctx context.Context) (*mysql.Conn, error)

Connect will invoke the mysql.connect method and return a connection

func (Connector) DBName

func (c Connector) DBName() string

DBName gets the dbname from mysql.ConnParams

func (Connector) Host

func (c Connector) Host() string

Host gets the host from mysql.ConnParams

func (Connector) MysqlParams

func (c Connector) MysqlParams() (*mysql.ConnParams, error)

MysqlParams returns the connections params

type CredentialsServer

type CredentialsServer interface {
	// GetUserAndPassword returns the user / password to use for a given
	// user. May return ErrUnknownUser. The user might be altered
	// to support versioned users.
	// Note this call needs to be thread safe, as we may call this from
	// multiple go routines.
	GetUserAndPassword(user string) (string, string, error)
}

CredentialsServer is the interface for a credential server

func GetCredentialsServer

func GetCredentialsServer() CredentialsServer

GetCredentialsServer returns the current CredentialsServer. Only valid after flag.Init was called.

type DBConfigs

type DBConfigs struct {
	Socket                     string        `json:"socket,omitempty"`
	Host                       string        `json:"host,omitempty"`
	Port                       int           `json:"port,omitempty"`
	Charset                    string        `json:"charset,omitempty"`
	Flags                      uint64        `json:"flags,omitempty"`
	Flavor                     string        `json:"flavor,omitempty"`
	SslMode                    vttls.SslMode `json:"sslMode,omitempty"`
	SslCa                      string        `json:"sslCa,omitempty"`
	SslCaPath                  string        `json:"sslCaPath,omitempty"`
	SslCert                    string        `json:"sslCert,omitempty"`
	SslKey                     string        `json:"sslKey,omitempty"`
	TLSMinVersion              string        `json:"tlsMinVersion,omitempty"`
	ServerName                 string        `json:"serverName,omitempty"`
	ConnectTimeoutMilliseconds int           `json:"connectTimeoutMilliseconds,omitempty"`
	DBName                     string        `json:"dbName,omitempty"`
	EnableQueryInfo            bool          `json:"enableQueryInfo,omitempty"`

	App      UserConfig `json:"app,omitempty"`
	Dba      UserConfig `json:"dba,omitempty"`
	Filtered UserConfig `json:"filtered,omitempty"`
	Repl     UserConfig `json:"repl,omitempty"`
	Appdebug UserConfig `json:"appdebug,omitempty"`
	Allprivs UserConfig `json:"allprivs,omitempty"`
	// contains filtered or unexported fields
}

DBConfigs stores all the data needed to build various connection parameters for the db. It stores credentials for app, appdebug, allprivs, dba, filtered and repl users. It contains other connection parameters like socket, charset, etc. It also stores the default db name, which it can combine with the rest of the data to build db-sepcific connection parameters.

The legacy way of initializing is as follows: App must call RegisterFlags to request the types of connections it wants support for. This must be done before invoking flags.Parse. After flag parsing, app invokes the Init function, which will return a DBConfigs object. The app must store the DBConfigs object internally, and use it to build connection parameters as needed.

var (
	// GlobalDBConfigs contains the initial values of dbconfigs from flags.
	GlobalDBConfigs DBConfigs

	// All can be used to register all flags: RegisterFlags(All...)
	All = []string{App, AppDebug, AllPrivs, Dba, Filtered, Repl, ExternalRepl}
)

func NewTestDBConfigs

func NewTestDBConfigs(genParams, appDebugParams mysql.ConnParams, dbname string) *DBConfigs

NewTestDBConfigs returns a DBConfigs meant for testing.

func (*DBConfigs) AllPrivsConnector added in v0.8.0

func (dbcfgs *DBConfigs) AllPrivsConnector() Connector

AllPrivsConnector returns connection parameters for appdebug with no dbname set.

func (*DBConfigs) AllPrivsWithDB

func (dbcfgs *DBConfigs) AllPrivsWithDB() Connector

AllPrivsWithDB returns connection parameters for appdebug with dbname set.

func (*DBConfigs) AppDebugWithDB

func (dbcfgs *DBConfigs) AppDebugWithDB() Connector

AppDebugWithDB returns connection parameters for appdebug with dbname set.

func (*DBConfigs) AppWithDB

func (dbcfgs *DBConfigs) AppWithDB() Connector

AppWithDB returns connection parameters for app with dbname set.

func (*DBConfigs) Clone

func (dbcfgs *DBConfigs) Clone() *DBConfigs

Clone returns a clone of the DBConfig.

func (*DBConfigs) DbaConnector

func (dbcfgs *DBConfigs) DbaConnector() Connector

DbaConnector returns connection parameters for dba with no dbname set.

func (*DBConfigs) DbaWithDB

func (dbcfgs *DBConfigs) DbaWithDB() Connector

DbaWithDB returns connection parameters for appdebug with dbname set.

func (*DBConfigs) ExternalRepl

func (dbcfgs *DBConfigs) ExternalRepl() Connector

ExternalRepl returns connection parameters for repl with no dbname set.

func (*DBConfigs) ExternalReplWithDB

func (dbcfgs *DBConfigs) ExternalReplWithDB() Connector

ExternalReplWithDB returns connection parameters for repl with dbname set.

func (*DBConfigs) FilteredWithDB

func (dbcfgs *DBConfigs) FilteredWithDB() Connector

FilteredWithDB returns connection parameters for filtered with dbname set.

func (*DBConfigs) HasGlobalSettings

func (dbcfgs *DBConfigs) HasGlobalSettings() bool

HasGlobalSettings returns true if DBConfigs contains values for global configs.

func (*DBConfigs) InitWithSocket

func (dbcfgs *DBConfigs) InitWithSocket(defaultSocketFile string)

InitWithSocket will initialize all the necessary connection parameters. Precedence is as follows: if UserConfig settings are set, they supersede all other settings. The next priority is with per-user connection parameters. This is only for legacy support. If no per-user parameters are supplied, then the defaultSocketFile is used to initialize the per-user conn params.

func (*DBConfigs) IsZero

func (dbcfgs *DBConfigs) IsZero() bool

IsZero returns true if DBConfigs was uninitialized.

func (*DBConfigs) MarshalJSON

func (dbcfgs *DBConfigs) MarshalJSON() ([]byte, error)

MarshalJSON marshals after redacting passwords.

func (*DBConfigs) Redacted

func (dbcfgs *DBConfigs) Redacted() *DBConfigs

Redacted redacts passwords from DBConfigs.

func (*DBConfigs) ReplConnector

func (dbcfgs *DBConfigs) ReplConnector() Connector

ReplConnector returns connection parameters for repl with no dbname set.

func (*DBConfigs) SetDbParams

func (dbcfgs *DBConfigs) SetDbParams(dbaParams, appParams, filteredParams mysql.ConnParams)

SetDbParams sets the dba and app params

func (*DBConfigs) String

func (dbcfgs *DBConfigs) String() string

type FileCredentialsServer

type FileCredentialsServer struct {
	// contains filtered or unexported fields
}

FileCredentialsServer is a simple implementation of CredentialsServer using a json file. Protected by mu.

func (*FileCredentialsServer) GetUserAndPassword

func (fcs *FileCredentialsServer) GetUserAndPassword(user string) (string, string, error)

GetUserAndPassword is part of the CredentialsServer interface

type UserConfig

type UserConfig struct {
	User     string `json:"user,omitempty"`
	Password string `json:"password,omitempty"`
	UseSSL   bool   `json:"useSsl,omitempty"`
	UseTCP   bool   `json:"useTcp,omitempty"`
}

UserConfig contains user-specific configs.

type VaultCredentialsServer added in v0.9.0

type VaultCredentialsServer struct {
	// contains filtered or unexported fields
}

VaultCredentialsServer implements CredentialsServer using a Vault backend from HashiCorp.

func (*VaultCredentialsServer) GetUserAndPassword added in v0.9.0

func (vcs *VaultCredentialsServer) GetUserAndPassword(user string) (string, string, error)

GetUserAndPassword for Vault implementation

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL