mirror of
https://github.com/hashicorp/terraform.git
synced 2026-03-21 10:00:09 -04:00
106 lines
4.4 KiB
Go
106 lines
4.4 KiB
Go
// Copyright IBM Corp. 2014, 2026
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
// Package backend provides interfaces that the CLI uses to interact with
|
|
// Terraform. A backend provides the abstraction that allows the same CLI
|
|
// to simultaneously support both local and remote operations for seamlessly
|
|
// using Terraform in a team environment.
|
|
package backend
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
|
|
"github.com/hashicorp/terraform/internal/configs/configschema"
|
|
"github.com/hashicorp/terraform/internal/states/statemgr"
|
|
"github.com/hashicorp/terraform/internal/tfdiags"
|
|
)
|
|
|
|
// DefaultStateName is the name of the default, initial state that every
|
|
// backend must have. This state cannot be deleted.
|
|
const DefaultStateName = "default"
|
|
|
|
var (
|
|
// ErrDefaultWorkspaceNotSupported is returned when an operation does not
|
|
// support using the default workspace, but requires a named workspace to
|
|
// be selected.
|
|
ErrDefaultWorkspaceNotSupported = errors.New("default workspace not supported\n" +
|
|
"You can create a new workspace with the \"workspace new\" command.")
|
|
|
|
// ErrWorkspacesNotSupported is an error returned when a caller attempts
|
|
// to perform an operation on a workspace other than "default" for a
|
|
// backend that doesn't support multiple workspaces.
|
|
//
|
|
// The caller can detect this to do special fallback behavior or produce
|
|
// a specific, helpful error message.
|
|
ErrWorkspacesNotSupported = errors.New("workspaces not supported")
|
|
)
|
|
|
|
// InitFn is used to initialize a new backend.
|
|
type InitFn func() Backend
|
|
|
|
// Backend is the minimal interface that must be implemented to enable Terraform.
|
|
type Backend interface {
|
|
// ConfigSchema returns a description of the expected configuration
|
|
// structure for the receiving backend.
|
|
//
|
|
// This method does not have any side-effects for the backend and can
|
|
// be safely used before configuring.
|
|
ConfigSchema() *configschema.Block
|
|
|
|
// PrepareConfig checks the validity of the values in the given
|
|
// configuration, and inserts any missing defaults, assuming that its
|
|
// structure has already been validated per the schema returned by
|
|
// ConfigSchema.
|
|
//
|
|
// This method does not have any side-effects for the backend and can
|
|
// be safely used before configuring. It also does not consult any
|
|
// external data such as environment variables, disk files, etc. Validation
|
|
// that requires such external data should be deferred until the
|
|
// Configure call.
|
|
//
|
|
// If error diagnostics are returned then the configuration is not valid
|
|
// and must not subsequently be passed to the Configure method.
|
|
//
|
|
// This method may return configuration-contextual diagnostics such
|
|
// as tfdiags.AttributeValue, and so the caller should provide the
|
|
// necessary context via the diags.InConfigBody method before returning
|
|
// diagnostics to the user.
|
|
PrepareConfig(cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|
|
|
// Configure uses the provided configuration to set configuration fields
|
|
// within the backend.
|
|
//
|
|
// The given configuration is assumed to have already been validated
|
|
// against the schema returned by ConfigSchema and passed validation
|
|
// via PrepareConfig.
|
|
//
|
|
// This method may be called only once per backend instance, and must be
|
|
// called before all other methods except where otherwise stated.
|
|
//
|
|
// If error diagnostics are returned, the internal state of the instance
|
|
// is undefined and no other methods may be called.
|
|
Configure(cty.Value) tfdiags.Diagnostics
|
|
|
|
// StateMgr returns the state manager for the given workspace name.
|
|
//
|
|
// If the returned state manager also implements statemgr.Locker then
|
|
// it's the caller's responsibility to call Lock and Unlock as appropriate.
|
|
//
|
|
// If the named workspace doesn't exist, or if it has no state, it will
|
|
// be created either immediately on this call or the first time
|
|
// PersistState is called, depending on the state manager implementation.
|
|
StateMgr(workspace string) (statemgr.Full, tfdiags.Diagnostics)
|
|
|
|
// DeleteWorkspace removes the workspace with the given name if it exists.
|
|
//
|
|
// DeleteWorkspace cannot prevent deleting a state that is in use. It is
|
|
// the responsibility of the caller to hold a Lock for the state manager
|
|
// belonging to this workspace before calling this method.
|
|
DeleteWorkspace(name string, force bool) tfdiags.Diagnostics
|
|
|
|
// States returns a list of the names of all of the workspaces that exist
|
|
// in this backend.
|
|
Workspaces() ([]string, tfdiags.Diagnostics)
|
|
}
|