Documentation
¶
Index ¶
- Constants
- func ConfirmRunningServicesLoss(cfg *config.Config, u *ui.UI, action string, skipConfirm bool) (bool, error)
- func DetectExistingBackend(cfg *config.Config) string
- func Down(cfg *config.Config, u *ui.UI, skipConfirm bool) error
- func ErrSafetyAborted() error
- func GetStackID(cfg *config.Config) string
- func Init(cfg *config.Config, u *ui.UI, force bool, backendName string) error
- func LocalIngressURL(cfg *config.Config) string
- func Purge(cfg *config.Config, u *ui.UI, force, skipConfirm bool) error
- func SaveBackend(cfg *config.Config, name string) error
- func Up(cfg *config.Config, u *ui.UI, wildcardDNS bool) error
- type Backend
- type K3dBackend
- func (b *K3dBackend) DataDir(cfg *config.Config) string
- func (b *K3dBackend) Destroy(cfg *config.Config, u *ui.UI, stackID string) error
- func (b *K3dBackend) Down(cfg *config.Config, u *ui.UI, stackID string) error
- func (b *K3dBackend) Init(cfg *config.Config, u *ui.UI, stackID string) error
- func (b *K3dBackend) IsRunning(cfg *config.Config, stackID string) (bool, error)
- func (b *K3dBackend) Name() string
- func (b *K3dBackend) Prerequisites(cfg *config.Config) error
- func (b *K3dBackend) Up(cfg *config.Config, u *ui.UI, stackID string) ([]byte, error)
- type K3sBackend
- func (b *K3sBackend) DataDir(cfg *config.Config) string
- func (b *K3sBackend) Destroy(cfg *config.Config, u *ui.UI, stackID string) error
- func (b *K3sBackend) Down(cfg *config.Config, u *ui.UI, stackID string) error
- func (b *K3sBackend) Init(cfg *config.Config, u *ui.UI, stackID string) error
- func (b *K3sBackend) IsRunning(cfg *config.Config, stackID string) (bool, error)
- func (b *K3sBackend) Name() string
- func (b *K3sBackend) Prerequisites(cfg *config.Config) error
- func (b *K3sBackend) Up(cfg *config.Config, u *ui.UI, stackID string) ([]byte, error)
- type LiveHostGateway
- type LiveServiceOffer
- type LiveServices
Constants ¶
const ( // BackendK3d is the k3d backend (Docker-based, default) BackendK3d = "k3d" // BackendK3s is the standalone k3s backend (bare-metal) BackendK3s = "k3s" )
Variables ¶
This section is empty.
Functions ¶
func ConfirmRunningServicesLoss ¶ added in v0.10.0
func ConfirmRunningServicesLoss(cfg *config.Config, u *ui.UI, action string, skipConfirm bool) (bool, error)
ConfirmRunningServicesLoss warns the operator when a destructive action (`obol stack down` / `obol stack purge`) is about to tear down a cluster that is currently serving traffic, and asks whether to proceed.
Returns true when the caller should continue. The rules:
- No live offers and no live gateways -> pass through (no prompt).
- skipConfirm (operator passed --yes) -> pass through.
- Interactive TTY -> render the list and ask `ui.Confirm` (default N).
- Non-interactive without --yes -> return a non-nil error so the caller fails closed. This is the safety bar that prevents a stray `ssh host '<obol stack down>'` from a non-prod worktree wiping the production stack without an explicit operator decision.
func DetectExistingBackend ¶ added in v0.3.1
DetectExistingBackend reads the persisted backend choice without falling back to a default. Returns empty string if no backend file exists, which lets Init() apply its own default.
func ErrSafetyAborted ¶ added in v0.10.0
func ErrSafetyAborted() error
ErrSafetyAborted is exported for callers that want to detect the abort path with errors.Is.
func GetStackID ¶
GetStackID reads the stored stack ID (exported for use in main)
func LocalIngressURL ¶ added in v0.8.0
LocalIngressURL returns the best local HTTP base URL for the current stack. For k3d, it prefers the first host port mapped to container port 80 in the generated k3d config. For historical/default setups it falls back to http://obol.stack or http://obol.stack:8080.
func SaveBackend ¶ added in v0.3.1
SaveBackend persists the backend choice
Types ¶
type Backend ¶ added in v0.3.1
type Backend interface {
// Name returns the backend identifier (e.g., "k3d", "k3s")
Name() string
// Init generates backend-specific cluster configuration files
Init(cfg *config.Config, u *ui.UI, stackID string) error
// Up creates or starts the cluster and returns kubeconfig contents
Up(cfg *config.Config, u *ui.UI, stackID string) (kubeconfigData []byte, err error)
// IsRunning returns true if the cluster is currently running
IsRunning(cfg *config.Config, stackID string) (bool, error)
// Down stops the cluster without destroying configuration or data
Down(cfg *config.Config, u *ui.UI, stackID string) error
// Destroy removes the cluster entirely (containers/processes)
Destroy(cfg *config.Config, u *ui.UI, stackID string) error
// DataDir returns the storage path for the local-path-provisioner.
// For k3d this is "/data" (Docker volume mount point).
// For k3s this is the absolute host path to cfg.DataDir.
DataDir(cfg *config.Config) string
// Prerequisites checks that required software/permissions are available
Prerequisites(cfg *config.Config) error
}
Backend abstracts the Kubernetes cluster runtime (k3d, k3s)
func LoadBackend ¶ added in v0.3.1
LoadBackend reads the persisted backend choice from .stack-backend file. Falls back to k3d if no file exists (backward compatibility).
func NewBackend ¶ added in v0.3.1
NewBackend creates a Backend by name
type K3dBackend ¶ added in v0.3.1
type K3dBackend struct{}
K3dBackend manages clusters via k3d (k3s inside Docker containers)
func (*K3dBackend) DataDir ¶ added in v0.3.1
func (b *K3dBackend) DataDir(cfg *config.Config) string
func (*K3dBackend) Name ¶ added in v0.3.1
func (b *K3dBackend) Name() string
func (*K3dBackend) Prerequisites ¶ added in v0.3.1
func (b *K3dBackend) Prerequisites(cfg *config.Config) error
type K3sBackend ¶ added in v0.3.1
type K3sBackend struct{}
K3sBackend manages a standalone k3s cluster (bare-metal)
func (*K3sBackend) DataDir ¶ added in v0.3.1
func (b *K3sBackend) DataDir(cfg *config.Config) string
func (*K3sBackend) Name ¶ added in v0.3.1
func (b *K3sBackend) Name() string
func (*K3sBackend) Prerequisites ¶ added in v0.3.1
func (b *K3sBackend) Prerequisites(cfg *config.Config) error
type LiveHostGateway ¶ added in v0.10.0
LiveHostGateway is a sell-inference offer with a still-running host gateway process (PID file present and alive). These survive `obol stack down` of the cluster and need a separate signal.
type LiveServiceOffer ¶ added in v0.10.0
type LiveServiceOffer struct {
Namespace string
Name string
Type string
Model string
Path string
Price string
}
LiveServiceOffer is the subset of a ServiceOffer relevant to the safety check: enough to render the prompt without pulling in monetizeapi.
type LiveServices ¶ added in v0.10.0
type LiveServices struct {
Offers []LiveServiceOffer
Gateways []LiveHostGateway
}
LiveServices captures the snapshot used by ConfirmRunningServicesLoss.
func DiscoverLiveServices ¶ added in v0.10.0
func DiscoverLiveServices(cfg *config.Config) LiveServices
DiscoverLiveServices snapshots cluster-side ServiceOffers in a payment-gate-ready state and host-side sell-inference gateways with alive PID files. Errors are intentionally swallowed: a discovery failure must not block `obol stack down`. A best-effort empty snapshot is returned so the caller falls through to "no prompt needed" only when we have positive evidence of nothing live.
func (LiveServices) Empty ¶ added in v0.10.0
func (s LiveServices) Empty() bool
Empty returns true when no live cluster services and no live host gateways were found. The caller treats this as "safe to proceed without prompting".