Documentation
¶
Index ¶
- Constants
- func ExitWithCode(code int, err error) error
- func ExitWithErrorFromStatusCode(statusCode int, err error) error
- func GenerateServiceName() string
- func GetPassword(service api.Service, role string) (string, error)
- func IsValidAddon(addon string) bool
- func ParseCPUMemory(cpuMemoryStr string) (string, string, error)
- func ValidAddons() []string
- func ValidateAddons(addons []string) ([]string, error)
- func ValidateAndNormalizeCPUMemory(cpuMillis, memoryGBs string) (*string, *string, error)
- func WaitForService(ctx context.Context, args WaitForServiceArgs) error
- type CPUMemoryConfig
- type CPUMemoryConfigs
- type ConnectionDetails
- type ConnectionDetailsOptions
- type DeletionWaitHandler
- type ExitCodeError
- type KeyringStorage
- func (k *KeyringStorage) Get(service api.Service, role string) (string, error)
- func (k *KeyringStorage) GetStorageResult(err error, password string) PasswordStorageResult
- func (k *KeyringStorage) Remove(service api.Service, role string) error
- func (k *KeyringStorage) Save(service api.Service, password string, role string) error
- type NoStorage
- func (n *NoStorage) Get(service api.Service, role string) (string, error)
- func (n *NoStorage) GetStorageResult(err error, password string) PasswordStorageResult
- func (n *NoStorage) Remove(service api.Service, role string) error
- func (n *NoStorage) Save(service api.Service, password string, role string) error
- type PasswordStorage
- type PasswordStorageResult
- type PgpassStorage
- func (p *PgpassStorage) Get(service api.Service, role string) (string, error)
- func (p *PgpassStorage) GetStorageResult(err error, password string) PasswordStorageResult
- func (p *PgpassStorage) Remove(service api.Service, role string) error
- func (p *PgpassStorage) Save(service api.Service, password string, role string) error
- type Spinner
- type StatusWaitHandler
- type WaitForServiceArgs
- type WaitHandler
Constants ¶
const ( ExitSuccess = 0 // Success ExitGeneralError = 1 // General error ExitTimeout = 2 // Operation timeout (wait-timeout exceeded) or connection timeout ExitInvalidParameters = 3 // Invalid parameters ExitAuthenticationError = 4 // Authentication error ExitPermissionDenied = 5 // Permission denied ExitServiceNotFound = 6 // Service not found ExitUpdateAvailable = 7 // Update available )
Exit codes as defined in the CLI specification
const ( AddonNone = "none" // Special value for no add-ons AddonTimeSeries = "time-series" AddonAI = "ai" )
Addon constants - these match the ServiceCreateAddons from the API
Variables ¶
This section is empty.
Functions ¶
func ExitWithCode ¶
ExitWithCode returns an error that will cause the program to exit with the specified code
func ExitWithErrorFromStatusCode ¶
ExitWithErrorFromStatusCode maps HTTP status codes to CLI exit codes
func GenerateServiceName ¶
func GenerateServiceName() string
Matches front-end logic for generating a random service name
func GetPassword ¶
GetPassword fetches the password for the specified service from the configured password storage mechanism. It returns an error if it fails to find the password.
func IsValidAddon ¶
IsValidAddon checks if the given add-on is valid (case-sensitive as per API spec)
func ParseCPUMemory ¶
ParseCPUMemory parses a CPU/memory combination string (e.g., "2 CPU/8GB") and returns millicores and GB. If "shared" is given, returns "shared" for both CPU and memory.
func ValidAddons ¶
func ValidAddons() []string
ValidAddons returns a slice of all valid add-on values
func ValidateAddons ¶
ValidateAddons validates a slice of add-ons and removes duplicate values
func ValidateAndNormalizeCPUMemory ¶
ValidateAndNormalizeCPUMemory validates CPU/Memory values and applies auto-configuration logic
func WaitForService ¶
func WaitForService(ctx context.Context, args WaitForServiceArgs) error
Types ¶
type CPUMemoryConfig ¶
CPUMemoryConfig represents an allowed CPU/Memory configuration
func (*CPUMemoryConfig) Matches ¶
func (c *CPUMemoryConfig) Matches(cpuMillis, memoryGBs string) (string, string, bool)
func (*CPUMemoryConfig) String ¶
func (c *CPUMemoryConfig) String() string
type CPUMemoryConfigs ¶
type CPUMemoryConfigs []CPUMemoryConfig
func GetAllowedCPUMemoryConfigs ¶
func GetAllowedCPUMemoryConfigs() CPUMemoryConfigs
GetAllowedCPUMemoryConfigs returns the allowed CPU/Memory configurations from the spec
func (CPUMemoryConfigs) String ¶
func (c CPUMemoryConfigs) String() string
String returns a user-friendly string of allowed CPU/Memory combinations
func (CPUMemoryConfigs) Strings ¶
func (c CPUMemoryConfigs) Strings() []string
Strings returns a slice of user-friendly strings of allowed CPU/Memory combinations
type ConnectionDetails ¶
type ConnectionDetails struct {
Role string `json:"role,omitempty" yaml:"role,omitempty"`
Password string `json:"password,omitempty" yaml:"password,omitempty"`
Host string `json:"host,omitempty" yaml:"host,omitempty"`
Port int `json:"port,omitempty" yaml:"port,omitempty"`
Database string `json:"database,omitempty" yaml:"database,omitempty"`
IsPooler bool `json:"is_pooler,omitempty" yaml:"is_pooler,omitempty"`
}
func GetConnectionDetails ¶
func GetConnectionDetails(service api.Service, opts ConnectionDetailsOptions) (*ConnectionDetails, error)
func (*ConnectionDetails) String ¶
func (d *ConnectionDetails) String() string
String creates a PostgreSQL connection string from service details
type ConnectionDetailsOptions ¶
type ConnectionDetailsOptions struct {
// Pooled determines whether to use the pooler endpoint (if available)
Pooled bool
// Role is the database role/username to use (e.g., "tsdbadmin")
Role string
// WithPassword determines whether to include the password in the output
WithPassword bool
// InitialPassword is an optional password to use directly (e.g., from service creation response)
// If provided and WithPassword is true, this password will be used
// instead of fetching from password storage. This is useful when password_storage=none.
InitialPassword string
}
ConnectionDetailsOptions configures how the connection string is built
type DeletionWaitHandler ¶
type DeletionWaitHandler struct {
ServiceID string
}
func (*DeletionWaitHandler) Check ¶
func (h *DeletionWaitHandler) Check(resp *api.GetProjectsProjectIdServicesServiceIdResponse) (bool, error)
func (*DeletionWaitHandler) Message ¶
func (h *DeletionWaitHandler) Message() string
type ExitCodeError ¶
type ExitCodeError struct {
// contains filtered or unexported fields
}
ExitCodeError creates an error that will cause the program to exit with the specified code
func (ExitCodeError) Error ¶
func (e ExitCodeError) Error() string
func (ExitCodeError) ExitCode ¶
func (e ExitCodeError) ExitCode() int
type KeyringStorage ¶
type KeyringStorage struct{}
KeyringStorage implements password storage using system keyring
func (*KeyringStorage) GetStorageResult ¶
func (k *KeyringStorage) GetStorageResult(err error, password string) PasswordStorageResult
type NoStorage ¶
type NoStorage struct{}
NoStorage implements no password storage (passwords are not saved)
func (*NoStorage) GetStorageResult ¶
func (n *NoStorage) GetStorageResult(err error, password string) PasswordStorageResult
type PasswordStorage ¶
type PasswordStorage interface {
Save(service api.Service, password string, role string) error
Get(service api.Service, role string) (string, error)
Remove(service api.Service, role string) error
GetStorageResult(err error, password string) PasswordStorageResult
}
PasswordStorage defines the interface for password storage implementations
func GetPasswordStorage ¶
func GetPasswordStorage() PasswordStorage
GetPasswordStorage returns the appropriate PasswordStorage implementation based on configuration
type PasswordStorageResult ¶
type PasswordStorageResult struct {
Success bool `json:"success"`
Method string `json:"method"` // "keyring", "pgpass", or "none"
Message string `json:"message"` // Human-readable message
}
PasswordStorageResult contains the result of password storage operations
func SavePasswordWithResult ¶
func SavePasswordWithResult(service api.Service, password string, role string) (PasswordStorageResult, error)
SavePasswordWithResult handles saving a password and returns both error and result info
type PgpassStorage ¶
type PgpassStorage struct{}
PgpassStorage implements password storage using ~/.pgpass file
func (*PgpassStorage) GetStorageResult ¶
func (p *PgpassStorage) GetStorageResult(err error, password string) PasswordStorageResult
type Spinner ¶
type Spinner interface {
// Update changes the spinner's displayed message.
Update(message string)
// Stop terminates the spinner program and waits for it to finish.
Stop()
}
func NewSpinner ¶
NewSpinner creates and returns a new Spinner for displaying animated status messages. If the output is nil or io.Discard, it returns a no-op spinner. If output is a terminal, it uses bubbletea to dynamically update the spinner and message in place. If output is not a terminal, it prints each message on a new line without animation.
type StatusWaitHandler ¶
func (*StatusWaitHandler) Check ¶
func (h *StatusWaitHandler) Check(resp *api.GetProjectsProjectIdServicesServiceIdResponse) (bool, error)
func (*StatusWaitHandler) Message ¶
func (h *StatusWaitHandler) Message() string
type WaitForServiceArgs ¶
type WaitForServiceArgs struct {
Client *api.ClientWithResponses
ProjectID string
ServiceID string
Handler WaitHandler
Output io.Writer
Timeout time.Duration
TimeoutMsg string
}
type WaitHandler ¶
type WaitHandler interface {
// Message returns the current status message that should be displayed next
// to the spinner while waiting for a service to reach some state.
Message() string
// Check returns true if we're done waiting/polling, and false if we should
// continue. It also returns an error, which is either immediately returned
// from WaitForService or temporarily shown next to the spinner depending
// on the first return value.
Check(resp *api.GetProjectsProjectIdServicesServiceIdResponse) (bool, error)
}