terraform

package
v0.0.0-...-a438c6f Latest Latest
Warning

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

Go to latest
Published: Feb 7, 2024 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ApplyResult

type ApplyResult struct {
	State *json.StateV4
}

ApplyResult contains the state after the apply operation.

type CallbackFn

type CallbackFn func(error, context.Context) error

CallbackFn is the type of accepted function that can be called after an async operation is completed.

type ExecMode

type ExecMode int

ExecMode is the Terraform CLI execution mode label

const (
	// ModeSync represents the synchronous execution mode
	ModeSync ExecMode = iota
	// ModeASync represents the asynchronous execution mode
	ModeASync
)

func (ExecMode) String

func (em ExecMode) String() string

String converts an execMode to string

type FileProducer

type FileProducer struct {
	Resource resource.Terraformed
	Setup    Setup
	Dir      string
	Config   *config.Resource
	// contains filtered or unexported fields
}

FileProducer exist to serve as cache for the data that is costly to produce every time like parameters and observation maps.

func NewFileProducer

func NewFileProducer(ctx context.Context, client resource.SecretClient, dir string, tr resource.Terraformed, ts Setup, cfg *config.Resource, opts ...FileProducerOption) (*FileProducer, error)

NewFileProducer returns a new FileProducer.

func (*FileProducer) BuildMainTF

func (fp *FileProducer) BuildMainTF() map[string]any

BuildMainTF produces the contents of the mainTF file as a map. This format is conducive to inspection for tests. WriteMainTF calls this function an serializes the result to a file as JSON.

func (*FileProducer) EnsureTFState

func (fp *FileProducer) EnsureTFState(_ context.Context, tfID string) error

EnsureTFState writes the Terraform state that should exist in the filesystem to start any Terraform operation.

func (*FileProducer) WriteMainTF

func (fp *FileProducer) WriteMainTF() (ProviderHandle, error)

WriteMainTF writes the content main configuration file that has the desired state configuration for Terraform.

type FileProducerOption

type FileProducerOption func(*FileProducer)

FileProducerOption allows you to configure FileProducer

func WithFileProducerFeatures

func WithFileProducerFeatures(f *feature.Flags) FileProducerOption

WithFileProducerFeatures configures the active features for the FileProducer.

func WithFileSystem

func WithFileSystem(fs afero.Fs) FileProducerOption

WithFileSystem configures the filesystem to use. Used mostly for testing.

type ImportResult

type ImportResult RefreshResult

ImportResult contains information about the current state of the resource. Same as RefreshResult.

type InUse

type InUse interface {
	// Increment marks one more user of a shared resource
	// such as a native plugin process.
	Increment()
	// Decrement marks when a user of a shared resource,
	// such as a native plugin process, has released the resource.
	Decrement()
}

InUse keeps track of the usage of a shared resource, like a native plugin process.

type MainConfiguration

type MainConfiguration struct {
	Terraform Terraform `json:"terraform,omitempty"`
}

type NoOpProviderRunner

type NoOpProviderRunner struct{}

NoOpProviderRunner is a no-op ProviderRunner

func NewNoOpProviderRunner

func NewNoOpProviderRunner() NoOpProviderRunner

NewNoOpProviderRunner constructs a new NoOpProviderRunner

func (NoOpProviderRunner) Start

func (NoOpProviderRunner) Start() (string, error)

Start takes no action

func (NoOpProviderRunner) Stop

func (NoOpProviderRunner) Stop() error

Stop takes no action

type NoOpProviderScheduler

type NoOpProviderScheduler struct{}

NoOpProviderScheduler satisfied the ProviderScheduler interface and is a noop implementation, i.e., it does not schedule any native plugin processes.

func NewNoOpProviderScheduler

func NewNoOpProviderScheduler() NoOpProviderScheduler

NewNoOpProviderScheduler initializes a new NoOpProviderScheduler.

func (NoOpProviderScheduler) Start

func (NoOpProviderScheduler) Stop

type Operation

type Operation struct {
	Type string
	// contains filtered or unexported fields
}

Operation is the representation of a single Terraform CLI operation.

func (*Operation) EndTime

func (o *Operation) EndTime() time.Time

EndTime returns the end time of the current operation.

func (*Operation) Error

func (o *Operation) Error() error

Error returns the recorded error of the current operation.

func (*Operation) Flush

func (o *Operation) Flush()

Flush cleans the operation information.

func (*Operation) IsEnded

func (o *Operation) IsEnded() bool

IsEnded returns whether the operation has ended, regardless of its result.

func (*Operation) IsRunning

func (o *Operation) IsRunning() bool

IsRunning returns whether there is an ongoing operation.

func (*Operation) MarkEnd

func (o *Operation) MarkEnd()

MarkEnd marks the operation as ended.

func (*Operation) MarkStart

func (o *Operation) MarkStart(t string) bool

MarkStart marks the operation as started atomically after checking no previous operation is already running. Returns `false` if a previous operation is still in progress.

func (*Operation) SetError

func (o *Operation) SetError(err error)

SetError records the given error on the current operation.

func (*Operation) StartTime

func (o *Operation) StartTime() time.Time

StartTime returns the start time of the current operation.

type PlanResult

type PlanResult struct {
	Exists   bool
	UpToDate bool
}

PlanResult returns a summary of comparison between desired and current state of the resource.

type ProviderConfiguration

type ProviderConfiguration map[string]any

ProviderConfiguration holds the setup configuration body

func (ProviderConfiguration) ToProviderHandle

func (pc ProviderConfiguration) ToProviderHandle() (ProviderHandle, error)

ToProviderHandle converts a provider configuration to a handle for the provider scheduler.

type ProviderHandle

type ProviderHandle string

ProviderHandle represents native plugin (Terraform provider) process handles used by the various schedulers to map Terraform workspaces to these processes.

const (
	// InvalidProviderHandle is an invalid ProviderHandle.
	InvalidProviderHandle ProviderHandle = ""
)

type ProviderRequirement

type ProviderRequirement struct {
	// Source of the provider. An example value is "hashicorp/aws".
	Source string

	// Version of the provider. An example value is "4.0"
	Version string
}

ProviderRequirement holds values for the Terraform HCL setup requirements

type ProviderRunner

type ProviderRunner interface {
	Start() (string, error)
	Stop() error
}

ProviderRunner is the interface for running Terraform native provider processes in the shared gRPC server mode

type ProviderScheduler

type ProviderScheduler interface {
	// Start forks or reuses a native plugin process associated with
	// the supplied ProviderHandle.
	Start(ProviderHandle) (InUse, string, error)
	// Stop terminates the native plugin process, if it exists, for
	// the specified ProviderHandle.
	Stop(ProviderHandle) error
}

ProviderScheduler represents a shared native plugin process scheduler.

type RefreshResult

type RefreshResult struct {
	Exists          bool
	ASyncInProgress bool
	State           *json.StateV4
}

RefreshResult contains information about the current state of the resource.

type Setup

type Setup struct {
	// Version is the version of Terraform that this workspace would require as
	// minimum.
	Version string

	// Requirement contains the provider requirements of the workspace to work,
	// which is mostly the version and source of the provider.
	Requirement ProviderRequirement

	// Configuration contains the provider configuration parameters of the given
	// Terraform provider, such as access token.
	Configuration ProviderConfiguration

	// ClientMetadata contains arbitrary metadata that the provider would like
	// to pass but not available as part of Terraform's provider configuration.
	// For example, AWS account id is needed for certain ID calculations but is
	// not part of the Terraform AWS Provider configuration, so it could be
	// made available only by this map.
	ClientMetadata map[string]string

	// Scheduler specifies the provider scheduler to be used for the Terraform
	// workspace being setup. If not set, no scheduler is configured and
	// the lifecycle of Terraform provider processes will be managed by
	// the Terraform CLI.
	Scheduler ProviderScheduler

	Meta any

	FrameworkProvider fwprovider.Provider
}

Setup holds values for the Terraform version and setup requirements and configuration body

func (Setup) Map

func (s Setup) Map() map[string]any

Map returns the Setup object in map form. The initial reason was so that we don't import the terraform package in places where GetIDFn is overridden because it can cause circular dependency.

type SetupFn

type SetupFn func(ctx context.Context, client client.Client, mg xpresource.Managed) (Setup, error)

SetupFn is a function that returns Terraform setup which contains provider requirement, configuration and Terraform version.

type SharedProvider

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

SharedProvider runs the configured native provider plugin using the supplied command-line args

func NewSharedProvider

func NewSharedProvider(opts ...SharedProviderOption) *SharedProvider

NewSharedProvider instantiates a SharedProvider runner with an OS executor using the supplied options.

func (*SharedProvider) Start

func (sr *SharedProvider) Start() (string, error)

Start starts a shared gRPC server if not already running A logger, native provider's path and command-line arguments to be passed to it must have been properly configured. Returns any errors encountered and the reattachment configuration for the native provider.

func (*SharedProvider) Stop

func (sr *SharedProvider) Stop() error

Stop attempts to stop a shared gRPC server if it's already running.

type SharedProviderOption

type SharedProviderOption func(runner *SharedProvider)

SharedProviderOption lets you configure the shared gRPC runner.

func WithNativeProviderArgs

func WithNativeProviderArgs(args ...string) SharedProviderOption

WithNativeProviderArgs are the arguments to be passed to the native provider

func WithNativeProviderExecutor

func WithNativeProviderExecutor(e exec.Interface) SharedProviderOption

WithNativeProviderExecutor sets the process executor to be used

func WithNativeProviderLogger

func WithNativeProviderLogger(logger logging.Logger) SharedProviderOption

WithNativeProviderLogger configures the logger for the runner.

func WithNativeProviderName

func WithNativeProviderName(n string) SharedProviderOption

WithNativeProviderName configures the Terraform provider name for the runner.

func WithNativeProviderPath

func WithNativeProviderPath(p string) SharedProviderOption

WithNativeProviderPath configures the Terraform provider executable path for the runner.

func WithProtocolVersion

func WithProtocolVersion(protocolVersion int) SharedProviderOption

WithProtocolVersion sets the gRPC protocol version in use between the Terraform CLI and the native provider.

type SharedProviderScheduler

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

SharedProviderScheduler is a ProviderScheduler that shares a native plugin (Terraform provider) process between MR reconciliation loops whose MRs yield the same ProviderHandle, i.e., whose Terraform resource blocks are configuration-wise identical. SharedProviderScheduler is configured with a max TTL and it will gracefully attempt to replace ProviderRunners whose TTL exceed this maximum, if they are not in-use.

func NewSharedProviderScheduler

func NewSharedProviderScheduler(l logging.Logger, ttl int, opts ...SharedProviderSchedulerOption) *SharedProviderScheduler

NewSharedProviderScheduler initializes a new SharedProviderScheduler with the specified logger and options.

func (*SharedProviderScheduler) Start

func (*SharedProviderScheduler) Stop

type SharedProviderSchedulerOption

type SharedProviderSchedulerOption func(scheduler *SharedProviderScheduler)

SharedProviderSchedulerOption represents an option to configure the SharedProviderScheduler.

func WithSharedProviderOptions

func WithSharedProviderOptions(opts ...SharedProviderOption) SharedProviderSchedulerOption

WithSharedProviderOptions configures the SharedProviderOptions to be passed down to the managed SharedProviders.

type StoreCleaner

type StoreCleaner interface {
	Remove(obj xpresource.Object) error
}

StoreCleaner is the interface that the workspace finalizer needs to work with.

type Terraform

type Terraform struct {
	RequiredProviders map[string]any `json:"required_providers,omitempty"`
}

type Workspace

type Workspace struct {
	// LastOperation contains information about the last operation performed.
	LastOperation *Operation
	// ProviderHandle is the handle of the associated native Terraform provider
	// computed from the generated provider resource configuration block
	// of the Terraform workspace.
	ProviderHandle ProviderHandle
	// contains filtered or unexported fields
}

Workspace runs Terraform operations in its directory and holds the information about their statuses.

func NewWorkspace

func NewWorkspace(dir string, opts ...WorkspaceOption) *Workspace

NewWorkspace returns a new Workspace object that operates in the given directory.

func (*Workspace) Apply

func (w *Workspace) Apply(ctx context.Context) (ApplyResult, error)

Apply makes a blocking terraform apply call.

func (*Workspace) ApplyAsync

func (w *Workspace) ApplyAsync(callback CallbackFn) error

ApplyAsync makes a terraform apply call without blocking and calls the given function once that apply call finishes.

func (*Workspace) Destroy

func (w *Workspace) Destroy(ctx context.Context) error

Destroy makes a blocking terraform destroy call.

func (*Workspace) DestroyAsync

func (w *Workspace) DestroyAsync(callback CallbackFn) error

DestroyAsync makes a non-blocking terraform destroy call. It doesn't accept a callback because destroy operations are not time sensitive as ApplyAsync where you might need to store the server-side computed information as soon as possible.

func (*Workspace) Import

Import makes a blocking terraform import call where only the state file is changed with the current state of the resource.

func (*Workspace) Plan

func (w *Workspace) Plan(ctx context.Context) (PlanResult, error)

Plan makes a blocking terraform plan call.

func (*Workspace) Refresh

func (w *Workspace) Refresh(ctx context.Context) (RefreshResult, error)

Refresh makes a blocking terraform apply -refresh-only call where only the state file is changed with the current state of the resource.

func (*Workspace) UseProvider

func (w *Workspace) UseProvider(inuse InUse, attachmentConfig string)

UseProvider shares a native provider with the receiver Workspace.

type WorkspaceFinalizer

type WorkspaceFinalizer struct {
	xpresource.Finalizer
	Store StoreCleaner
}

WorkspaceFinalizer removes the workspace from the workspace store and only then calls RemoveFinalizer of the underlying Finalizer.

func NewWorkspaceFinalizer

func NewWorkspaceFinalizer(ws StoreCleaner, af xpresource.Finalizer) *WorkspaceFinalizer

NewWorkspaceFinalizer returns a new WorkspaceFinalizer.

func (*WorkspaceFinalizer) AddFinalizer

func (wf *WorkspaceFinalizer) AddFinalizer(ctx context.Context, obj xpresource.Object) error

AddFinalizer to the supplied Managed resource.

func (*WorkspaceFinalizer) RemoveFinalizer

func (wf *WorkspaceFinalizer) RemoveFinalizer(ctx context.Context, obj xpresource.Object) error

RemoveFinalizer removes the workspace from workspace store before removing the finalizer.

type WorkspaceOption

type WorkspaceOption func(*Workspace)

WorkspaceOption allows you to configure Workspace objects.

func WithAferoFs

func WithAferoFs(fs afero.Fs) WorkspaceOption

WithAferoFs lets you set the fs of WorkspaceStore.

func WithExecutor

func WithExecutor(e k8sExec.Interface) WorkspaceOption

WithExecutor sets the executor of Workspace.

func WithFilterFn

func WithFilterFn(filterFn func(string) string) WorkspaceOption

WithFilterFn configures the debug log sensitive information filtering func.

func WithLastOperation

func WithLastOperation(lo *Operation) WorkspaceOption

WithLastOperation sets the Last Operation of Workspace.

func WithLogger

func WithLogger(l logging.Logger) WorkspaceOption

WithLogger sets the logger of Workspace.

func WithProviderInUse

func WithProviderInUse(providerInUse InUse) WorkspaceOption

WithProviderInUse configures an InUse for keeping track of the shared provider InUse by this Terraform workspace.

type WorkspaceProviderScheduler

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

WorkspaceProviderScheduler is a ProviderScheduler that shares a native plugin (Terraform provider) process between the Terraform CLI invocations in the context of a single reconciliation loop (belonging to a single workspace). When the managed.ExternalDisconnecter disconnects, the scheduler terminates the native plugin process.

func NewWorkspaceProviderScheduler

func NewWorkspaceProviderScheduler(l logging.Logger, opts ...SharedProviderOption) *WorkspaceProviderScheduler

NewWorkspaceProviderScheduler initializes a new WorkspaceProviderScheduler.

func (*WorkspaceProviderScheduler) Start

func (*WorkspaceProviderScheduler) Stop

type WorkspaceStore

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

WorkspaceStore allows you to manage multiple Terraform workspaces.

func NewWorkspaceStore

func NewWorkspaceStore(l logging.Logger, opts ...WorkspaceStoreOption) *WorkspaceStore

NewWorkspaceStore returns a new WorkspaceStore.

func (*WorkspaceStore) Remove

func (ws *WorkspaceStore) Remove(obj xpresource.Object) error

Remove deletes the workspace directory from the filesystem and erases its record from the store.

func (*WorkspaceStore) Workspace

Workspace makes sure the Terraform workspace for the given resource is ready to be used and returns the Workspace object configured to work in that workspace folder in the filesystem.

type WorkspaceStoreOption

type WorkspaceStoreOption func(*WorkspaceStore)

WorkspaceStoreOption lets you configure the workspace store.

func WithDisableInit

func WithDisableInit(disable bool) WorkspaceStoreOption

WithDisableInit disables `terraform init` invocations in case workspace initialization is not needed (e.g., when using the shared gRPC server runtime).

func WithFeatures

func WithFeatures(f *feature.Flags) WorkspaceStoreOption

WithFeatures sets the features of the workspace store.

func WithFs

func WithFs(fs afero.Fs) WorkspaceStoreOption

WithFs lets you set the fs of WorkspaceStore. Used mostly for testing.

func WithProcessReportInterval

func WithProcessReportInterval(d time.Duration) WorkspaceStoreOption

WithProcessReportInterval enables the upjet.terraform.running_processes metric, which periodically reports the total number of Terraform CLI and Terraform provider processes in the system.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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