state

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Dec 15, 2025 License: MPL-2.0 Imports: 31 Imported by: 0

Documentation

Overview

Package state manages terraform state.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrSerialNotGreaterThanCurrent = errors.New("the serial provided in the state file is not greater than the serial currently known remotely")
	ErrSerialMD5Mismatch           = errors.New("the MD5 hash of the state provided does not match what is currently known for the same serial number")
	ErrUploadNonPending            = errors.New("cannot upload state to a state version with a non-pending status")
)
View Source
var ErrCurrentVersionDeletionAttempt = errors.New("deleting the current state version is not allowed")

Functions

func NewCommand added in v0.1.9

func NewCommand(client *otfapi.Client) *cobra.Command

Types

type CLI added in v0.1.9

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

type Client

type Client struct {
	*otfapi.Client
}

func (*Client) Create added in v0.2.2

func (c *Client) Create(ctx context.Context, opts CreateStateVersionOptions) (*Version, error)

func (*Client) Delete added in v0.2.2

func (c *Client) Delete(ctx context.Context, svID resource.TfeID) error

func (*Client) Download added in v0.2.2

func (c *Client) Download(ctx context.Context, svID resource.TfeID) ([]byte, error)

func (*Client) DownloadCurrent added in v0.2.2

func (c *Client) DownloadCurrent(ctx context.Context, workspaceID resource.TfeID) ([]byte, error)

func (*Client) GetCurrent added in v0.2.2

func (c *Client) GetCurrent(ctx context.Context, workspaceID resource.TfeID) (*Version, error)

func (*Client) List added in v0.2.2

func (c *Client) List(ctx context.Context, workspaceID resource.TfeID, opts resource.PageOptions) (*resource.Page[*Version], error)

func (*Client) Rollback added in v0.2.2

func (c *Client) Rollback(ctx context.Context, svID resource.TfeID) (*Version, error)

type CreateStateVersionOptions

type CreateStateVersionOptions struct {
	State       []byte         // Terraform state file. Optional.
	WorkspaceID resource.TfeID // ID of state version's workspace. Required.
	Serial      *int64         // State serial number. Required.
}

CreateStateVersionOptions are options for creating a state version.

type File

type File struct {
	Version          int
	TerraformVersion string `json:"terraform_version"`
	Serial           int64
	Lineage          string
	Outputs          map[string]FileOutput
	Resources        []Resource
}

File is the terraform state file contents

type FileOutput

type FileOutput struct {
	Value     json.RawMessage
	Sensitive bool
}

FileOutput is an output in the terraform state file

func (FileOutput) StringValue added in v0.1.3

func (r FileOutput) StringValue() string

func (FileOutput) Type added in v0.1.3

func (r FileOutput) Type() (string, error)

Type determines the HCL type of the output value

type Options

type Options struct {
	logr.Logger
	internal.Cache
	*sql.DB
	*tfeapi.Responder
	*surl.Signer

	WorkspaceService *workspace.Service
	Authorizer       *authz.Authorizer
}

type Output

type Output struct {
	ID             resource.TfeID
	Name           string
	Type           string
	Value          json.RawMessage
	Sensitive      bool
	StateVersionID resource.TfeID
}

type Resource added in v0.1.3

type Resource struct {
	Name        string
	ProviderURI string `json:"provider"`
	Type        string
	Module      string
}

func (Resource) ModuleName added in v0.1.3

func (r Resource) ModuleName() string

func (Resource) Provider added in v0.1.3

func (r Resource) Provider() string

Provider extracts the provider from the provider URI

type Service

type Service struct {
	logr.Logger

	*authz.Authorizer
	// contains filtered or unexported fields
}

Service provides access to state and state versions

func NewService

func NewService(opts Options) *Service

func (*Service) AddHandlers added in v0.2.2

func (a *Service) AddHandlers(r *mux.Router)

func (*Service) Create added in v0.2.2

func (a *Service) Create(ctx context.Context, opts CreateStateVersionOptions) (*Version, error)

func (*Service) Delete added in v0.2.2

func (a *Service) Delete(ctx context.Context, versionID resource.TfeID) error

func (*Service) Download added in v0.2.2

func (a *Service) Download(ctx context.Context, svID resource.TfeID) ([]byte, error)

func (*Service) DownloadCurrent added in v0.2.2

func (a *Service) DownloadCurrent(ctx context.Context, workspaceID resource.TfeID) ([]byte, error)

func (*Service) Get added in v0.2.2

func (a *Service) Get(ctx context.Context, versionID resource.TfeID) (*Version, error)

func (*Service) GetCurrent added in v0.2.2

func (a *Service) GetCurrent(ctx context.Context, workspaceID resource.TfeID) (*Version, error)

func (*Service) GetOutput added in v0.2.2

func (a *Service) GetOutput(ctx context.Context, outputID resource.TfeID) (*Output, error)

func (*Service) List added in v0.2.2

func (a *Service) List(ctx context.Context, workspaceID resource.TfeID, opts resource.PageOptions) (*resource.Page[*Version], error)

func (*Service) Rollback added in v0.2.2

func (a *Service) Rollback(ctx context.Context, versionID resource.TfeID) (*Version, error)

func (*Service) Upload added in v0.2.2

func (a *Service) Upload(ctx context.Context, svID resource.TfeID, state []byte) error

type Status added in v0.1.15

type Status string
const (
	Pending   Status = "pending"
	Finalized Status = "finalized"
	Discarded Status = "discarded"
)

type TFERollbackStateVersionOptions added in v0.3.17

type TFERollbackStateVersionOptions struct {
	// Type is a public field utilized by JSON:API to
	// set the resource type via the field tag.
	// It is not a user-defined value and does not need to be set.
	// https://jsonapi.org/format/#crud-creating
	Type string `jsonapi:"primary,state-versions"`
	// Specifies state version to rollback to. Only its ID is specified.
	RollbackStateVersion *TFEStateVersion `jsonapi:"relationship" json:"state-version"`
}

TFERollbackStateVersionOptions are options for rolling back a state version

type TFEStateVersion added in v0.3.17

type TFEStateVersion struct {
	ID                 resource.TfeID        `jsonapi:"primary,state-versions"`
	CreatedAt          time.Time             `jsonapi:"attribute" json:"created-at"`
	DownloadURL        string                `jsonapi:"attribute" json:"hosted-state-download-url"`
	UploadURL          string                `jsonapi:"attribute" json:"hosted-state-upload-url"`
	JSONUploadURL      string                `jsonapi:"attribute" json:"hosted-json-state-upload-url"`
	Status             TFEStateVersionStatus `jsonapi:"attribute" json:"status"`
	Serial             int64                 `jsonapi:"attribute" json:"serial"`
	VCSCommitSHA       string                `jsonapi:"attribute" json:"vcs-commit-sha"`
	ResourcesProcessed bool                  `jsonapi:"attribute" json:"resources-processed"`
	StateVersion       int                   `jsonapi:"attribute" json:"state-version"`
	TerraformVersion   string                `jsonapi:"attribute" json:"terraform-version"`

	// Relations
	Outputs []*TFEStateVersionOutput `jsonapi:"relationship" json:"outputs"`
}

TFEStateVersion is a state version suitable for marshaling into JSONAPI

type TFEStateVersionCreateVersionOptions added in v0.3.17

type TFEStateVersionCreateVersionOptions struct {
	// Type is a public field utilized by JSON:API to
	// set the resource type via the field tag.
	// It is not a user-defined value and does not need to be set.
	// https://jsonapi.org/format/#crud-creating
	Type string `jsonapi:"primary,state-versions"`
	// The lineage of the state.
	Lineage *string `jsonapi:"attribute" json:"lineage,omitempty"`
	// The MD5 hash of the state version.
	MD5 *string `jsonapi:"attribute" json:"md5"`
	// The serial of the state.
	Serial *int64 `jsonapi:"attribute" json:"serial"`
	// The base64 encoded state.
	State *string `jsonapi:"attribute" json:"state"`
	// Force can be set to skip certain validations. Wrong use of this flag can
	// cause data loss, so USE WITH CAUTION!
	Force *bool `jsonapi:"attribute" json:"force"`
}

TFEStateVersionCreateVersionOptions are options for creating a state version via JSONAPI

type TFEStateVersionList added in v0.3.17

type TFEStateVersionList struct {
	*types.Pagination
	Items []*TFEStateVersion
}

TFEStateVersionList is a list of state versions suitable for marshaling into JSONAPI

type TFEStateVersionOutput added in v0.3.17

type TFEStateVersionOutput struct {
	ID        resource.TfeID `jsonapi:"primary,state-version-outputs"`
	Name      string         `jsonapi:"attribute" json:"name"`
	Sensitive bool           `jsonapi:"attribute" json:"sensitive"`
	Type      string         `jsonapi:"attribute" json:"type"`
	Value     any            `jsonapi:"attribute" json:"value"`
}

type TFEStateVersionStatus added in v0.3.17

type TFEStateVersionStatus string

TFEStateVersionStatus are available state version status values

const (
	StateVersionPending   TFEStateVersionStatus = "pending"
	StateVersionFinalized TFEStateVersionStatus = "finalized"
	StateVersionDiscarded TFEStateVersionStatus = "discarded"
)

Available state version statuses.

type Version

type Version struct {
	ID          resource.TfeID     `jsonapi:"primary,state-versions"`
	CreatedAt   time.Time          `jsonapi:"attribute" json:"created-at"`
	Serial      int64              `jsonapi:"attribute" json:"serial"`
	State       []byte             `jsonapi:"attribute" json:"state"`
	Status      Status             `jsonapi:"attribute" json:"status"`
	Outputs     map[string]*Output `jsonapi:"attribute" json:"outputs"`
	WorkspaceID resource.TfeID     `jsonapi:"attribute" json:"workspace-id"`
}

Version is a specific version of terraform state. It includes important metadata as well as the state file itself.

https://developer.hashicorp.com/terraform/cloud-docs/api-docs/state-versions

func (*Version) File added in v0.1.3

func (v *Version) File() (*File, error)

func (*Version) LogValue added in v0.1.15

func (v *Version) LogValue() slog.Value

func (*Version) String

func (v *Version) String() string

Jump to

Keyboard shortcuts

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