gravitational/teleport · info
not available at this version
Error message
not available at this version
What it means
ErrNotAvailable (in updater.go) means the operation exists but is not available at the current version/state of the platform — i.e., a version-gating error. Note there is a same-named sentinel in lib/auth/touchid/api.go for Touch ID unavailability; both express 'feature gated off in this environment'. Callers check with errors.Is to skip or degrade gracefully.
Source
Thrown at lib/autoupdate/agent/updater.go:348
// UnlinkSystem unlinks the system (package) installation of Teleport from the system linking location.
// UnlinkSystem must be idempotent.
UnlinkSystem(ctx context.Context) error
// List the installed revisions of Teleport.
List(ctx context.Context) (revisions []Revision, err error)
// Remove the Teleport agent at revision.
// Remove must be idempotent.
Remove(ctx context.Context, rev Revision) error
// IsLinked returns true if the revision is linked to path.
IsLinked(ctx context.Context, rev Revision, pathDir string) (bool, error)
}
var (
// ErrLinked is returned when a linked version cannot be operated on.
ErrLinked = errors.New("version is linked")
// ErrNotSupported is returned when the operation is not supported on the platform.
ErrNotSupported = errors.New("not supported on this platform")
// ErrNotAvailable is returned when the operation is not available at the current version of the platform.
ErrNotAvailable = errors.New("not available at this version")
// ErrNoBinaries is returned when no binaries are available to be linked.
ErrNoBinaries = errors.New("no binaries available to link")
// ErrFilePresent is returned when a file is present.
ErrFilePresent = errors.New("file present")
// ErrNotInstalled is returned when Teleport is not installed.
ErrNotInstalled = errors.New("not installed")
)
// Process provides an API for interacting with a running Teleport process.
type Process interface {
// Name of the process.
Name() string
// Reload must reload the Teleport process as gracefully as possible.
// If the process is not healthy after reloading, Reload must return an error.
// If the process did not require reloading, Reload must return ErrNotNeeded.
// E.g., if the process is not enabled, or it was already reloaded after the last Sync.
// If the type implementing Process does not support the system process manager,
// Reload must return ErrNotSupported.View on GitHub (pinned to 1283425b60)
Solutions
- Check availability before calling: e.g. touchid.IsAvailable() or the updater's platform/version capability check.
- Handle errors.Is(err, ErrNotAvailable) as a graceful skip — fall back to a non-biometric or manual path.
- Upgrade the platform/OS or Teleport version if the feature is required.
- For Touch ID, ensure biometrics are enrolled in System Settings and the binary is not running headless/over SSH.
Example fix
// before
reg, err := touchid.Register(origin, cc)
if err != nil {
return err
}
// after
if !touchid.IsAvailable() {
return nil, trace.NotImplemented("touch ID unavailable; use password auth")
}
reg, err := touchid.Register(origin, cc) Defensive patterns
Strategy: fallback
Validate before calling
if !touchid.IsAvailable() {
// choose non-biometric auth path before calling Register
} Type guard
func IsNotAvailable(err error) bool { return errors.Is(err, autoupdate.ErrNotAvailable) } Try / catch
reg, err := touchid.Register(origin, cc)
if errors.Is(err, touchid.ErrNotAvailable) {
return fallbackAuth(ctx) // password/key-based flow
} Prevention
- Probe capability (IsAvailable / version checks) before invoking gated features
- Provide a non-biometric or manual fallback path
- Keep platform/OS versions aligned with feature requirements
When it happens
Trigger: Calling updater operations that require a newer platform state or feature than the current install provides; the sentinel is returned directly by functions listed as consumers (Register/Login style entry points in other packages share the name). On macOS Touch ID: calling touchid.Register when IsAvailable() is false (api.go:231).
Common situations: Attempting managed-update features on an OS version that lacks support; invoking Touch ID registration on a Mac without Touch ID configured, or in an SSH/CI context where biometrics are unavailable.
Related errors
- credential not found
- touch ID not available
- cannot fulfill credential parameters, only ES256 are support
- updater config file not found
- executable has unstable path
AI-assisted analysis of gravitational/teleport@1283425b60 (2026-09-02).
Data as JSON: /api/errors/a0624905e0dcc71e.
Report an issue: GitHub.