workspace

package
v0.1.18 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 2023 License: MPL-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package workspace provides access to terraform workspaces

Index

Constants

View Source
const (

	//
	// VCS trigger strategies to present to the user.
	//
	// every vcs event trigger runs
	VCSTriggerAlways string = "always"
	// only vcs events with changed files matching a set of glob patterns
	// triggers run
	VCSTriggerPatterns string = "patterns"
	// only push tag vcs events trigger runs
	VCSTriggerTags string = "tags"
)

Variables

View Source
var (
	ErrTagsRegexAndTriggerPatterns     = errors.New("cannot specify both tags-regex and trigger-patterns")
	ErrTagsRegexAndAlwaysTrigger       = errors.New("cannot specify both tags-regex and always-trigger")
	ErrTriggerPatternsAndAlwaysTrigger = errors.New("cannot specify both trigger-patterns and always-trigger")
	ErrInvalidTriggerPattern           = errors.New("invalid trigger glob pattern")
	ErrInvalidTagsRegex                = errors.New("invalid vcs tags regular expression")
)
View Source
var ErrInvalidTagSpec = errors.New("invalid tag spec: must provide either an ID or a name")

Functions

func NewCommand added in v0.1.9

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

func NewService

func NewService(opts Options) *service

Types

type CLI added in v0.1.9

type CLI struct {
	Service
}

type Client

type Client struct {
	*otfapi.Client

	WorkspaceService
}

func (*Client) GetWorkspace

func (c *Client) GetWorkspace(ctx context.Context, workspaceID string) (*Workspace, error)

func (*Client) GetWorkspaceByName

func (c *Client) GetWorkspaceByName(ctx context.Context, organization, workspace string) (*Workspace, error)

func (*Client) ListWorkspaces

func (c *Client) ListWorkspaces(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)

func (*Client) LockWorkspace

func (c *Client) LockWorkspace(ctx context.Context, workspaceID string, runID *string) (*Workspace, error)

func (*Client) UnlockWorkspace

func (c *Client) UnlockWorkspace(ctx context.Context, workspaceID string, runID *string, force bool) (*Workspace, error)

func (*Client) UpdateWorkspace

func (c *Client) UpdateWorkspace(ctx context.Context, workspaceID string, opts UpdateOptions) (*Workspace, error)

type ConnectOptions

type ConnectOptions struct {
	RepoPath      *string
	VCSProviderID *string

	Branch        *string
	TagsRegex     *string
	AllowCLIApply *bool
}

type Connection added in v0.1.4

type Connection struct {
	// Pushes to this VCS branch trigger runs. Empty string means the default
	// branch is used. Ignored if TagsRegex is non-empty.
	Branch string
	// Pushed tags matching this regular expression trigger runs. Mutually
	// exclusive with TriggerPatterns.
	TagsRegex string

	VCSProviderID string
	Repo          string

	// By default, once a workspace is connected to a repo it is not
	// possible to run a terraform apply via the CLI. Setting this to true
	// overrides this behaviour.
	AllowCLIApply bool
}

type CreateOptions

type CreateOptions struct {
	AllowDestroyPlan           *bool
	AutoApply                  *bool
	Description                *string
	ExecutionMode              *ExecutionMode
	GlobalRemoteState          *bool
	MigrationEnvironment       *string
	Name                       *string
	QueueAllRuns               *bool
	SpeculativeEnabled         *bool
	SourceName                 *string
	SourceURL                  *string
	StructuredRunOutputEnabled *bool
	Tags                       []TagSpec
	TerraformVersion           *string
	TriggerPrefixes            []string
	TriggerPatterns            []string
	WorkingDirectory           *string
	Organization               *string

	// Always trigger runs. A value of true is mutually exclusive with
	// setting TriggerPatterns or ConnectOptions.TagsRegex.
	AlwaysTrigger *bool

	*ConnectOptions
}

CreateOptions represents the options for creating a new workspace.

type ExecutionMode

type ExecutionMode string
const (
	RemoteExecutionMode ExecutionMode = "remote"
	LocalExecutionMode  ExecutionMode = "local"
	AgentExecutionMode  ExecutionMode = "agent"

	DefaultAllowDestroyPlan = true
	MinTerraformVersion     = "1.2.0"
)

func ExecutionModePtr

func ExecutionModePtr(m ExecutionMode) *ExecutionMode

ExecutionModePtr returns a pointer to an execution mode.

type LatestRun

type LatestRun struct {
	ID     string
	Status runStatus
}

LatestRun is a summary of the latest run for a workspace

type ListOptions

type ListOptions struct {
	Search       string
	Tags         []string
	Organization *string `schema:"organization_name"`

	resource.PageOptions
}

ListOptions are options for paginating and filtering a list of Workspaces

type ListTagsOptions

type ListTagsOptions struct {
	resource.PageOptions
}

ListTagsOptions are options for paginating and filtering a list of tags

type ListWorkspaceTagsOptions

type ListWorkspaceTagsOptions struct {
	resource.PageOptions
}

ListWorkspaceTagsOptions are options for paginating and filtering a list of workspace tags

type Lock

type Lock struct {
	LockKind // kind of entity holding lock
	// contains filtered or unexported fields
}

Lock is a workspace Lock, which blocks runs from running and prevents state from being uploaded.

https://developer.hashicorp.com/terraform/cloud-docs/workspaces/settings#locking

type LockButton

type LockButton struct {
	State    string // locked or unlocked
	Text     string // button text
	Tooltip  string // button tooltip
	Disabled bool   // button greyed out or not
	Message  string // message accompanying button
	Action   string // form URL
}

type LockKind

type LockKind int

kind of entity holding a lock

const (
	UserLock LockKind = iota
	RunLock
)

type LockService

type LockService interface {
	LockWorkspace(ctx context.Context, workspaceID string, runID *string) (*Workspace, error)
	UnlockWorkspace(ctx context.Context, workspaceID string, runID *string, force bool) (*Workspace, error)
}

type OrganizationService

type OrganizationService organization.Service

type PermissionsService

type PermissionsService interface {
	GetPolicy(ctx context.Context, workspaceID string) (internal.WorkspacePolicy, error)

	SetPermission(ctx context.Context, workspaceID, team string, role rbac.Role) error
	UnsetPermission(ctx context.Context, workspaceID, team string) error
}

type Service

type Service interface {
	CreateWorkspace(ctx context.Context, opts CreateOptions) (*Workspace, error)
	UpdateWorkspace(ctx context.Context, workspaceID string, opts UpdateOptions) (*Workspace, error)
	GetWorkspace(ctx context.Context, workspaceID string) (*Workspace, error)
	GetWorkspaceByName(ctx context.Context, organization, workspace string) (*Workspace, error)
	ListWorkspaces(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
	ListConnectedWorkspaces(ctx context.Context, vcsProviderID, repoPath string) ([]*Workspace, error)
	DeleteWorkspace(ctx context.Context, workspaceID string) (*Workspace, error)

	SetCurrentRun(ctx context.Context, workspaceID, runID string) (*Workspace, error)

	AfterCreateWorkspace(l hooks.Listener[*Workspace])

	LockService
	PermissionsService
	TagService
}

type Tag

type Tag struct {
	ID            string // ID of the form 'tag-*'. Globally unique.
	Name          string // Meaningful symbol. Unique to an organization.
	InstanceCount int    // Number of workspaces that have this tag
	Organization  string // Organization this tag belongs to.
}

Tag is a symbol associated with one or more workspaces. Helps searching and grouping workspaces.

type TagService

type TagService interface {
	// ListTags lists tags within an organization
	ListTags(ctx context.Context, organization string, opts ListTagsOptions) (*resource.Page[*Tag], error)

	// DeleteTags deletes tags from an organization
	DeleteTags(ctx context.Context, organization string, tagIDs []string) error

	// TagWorkspaces adds an existing tag to a list of workspaces
	TagWorkspaces(ctx context.Context, tagID string, workspaceIDs []string) error

	// AddTags appends tags to a workspace. Any tag specified by ID must
	// exist. Any tag specified by name is created if it does not
	// exist.
	AddTags(ctx context.Context, workspaceID string, tags []TagSpec) error

	// RemoveTags removes tags from a workspace. The workspace must already
	// exist. Any tag specifying an ID must exist. Any tag specifying a name
	// need not exist and no action is taken. If a tag is no longer
	// associated with any workspaces it is removed.
	RemoveTags(ctx context.Context, workspaceID string, tags []TagSpec) error

	// ListWorkspaceTags lists the tags for a workspace.
	ListWorkspaceTags(ctx context.Context, workspaceID string, options ListWorkspaceTagsOptions) (*resource.Page[*Tag], error)
}

type TagSpec

type TagSpec struct {
	ID   string
	Name string
}

TagSpec specifies a tag. Either ID or Name must be non-nil for it to valid.

func (TagSpec) Valid

func (s TagSpec) Valid() error

type TagSpecs

type TagSpecs []TagSpec

func (TagSpecs) LogValue

func (specs TagSpecs) LogValue() slog.Value

type UpdateOptions

type UpdateOptions struct {
	AllowDestroyPlan           *bool
	AutoApply                  *bool
	Name                       *string
	Description                *string
	ExecutionMode              *ExecutionMode `json:"execution-mode,omitempty"`
	GlobalRemoteState          *bool
	Operations                 *bool
	QueueAllRuns               *bool
	SpeculativeEnabled         *bool
	StructuredRunOutputEnabled *bool
	TerraformVersion           *string
	TriggerPrefixes            []string
	TriggerPatterns            []string
	WorkingDirectory           *string

	// Always trigger runs. A value of true is mutually exclusive with
	// setting TriggerPatterns or ConnectOptions.TagsRegex.
	AlwaysTrigger *bool

	// Disconnect workspace from repo. It is invalid to specify true for an
	// already disconnected workspace.
	Disconnect bool

	// Specifying ConnectOptions either connects a currently
	// disconnected workspace, or modifies a connection if already
	// connected.
	*ConnectOptions
}

type VCSProviderService

type VCSProviderService vcsprovider.Service

type VCSTriggerStrategy added in v0.1.4

type VCSTriggerStrategy string

VCS trigger strategy determines which VCS events trigger runs

type Workspace

type Workspace struct {
	ID                         string        `jsonapi:"primary,workspaces"`
	CreatedAt                  time.Time     `jsonapi:"attribute" json:"created_at"`
	UpdatedAt                  time.Time     `jsonapi:"attribute" json:"updated_at"`
	AllowDestroyPlan           bool          `jsonapi:"attribute" json:"allow_destroy_plan"`
	AutoApply                  bool          `jsonapi:"attribute" json:"auto_apply"`
	CanQueueDestroyPlan        bool          `jsonapi:"attribute" json:"can_queue_destroy_plan"`
	Description                string        `jsonapi:"attribute" json:"description"`
	Environment                string        `jsonapi:"attribute" json:"environment"`
	ExecutionMode              ExecutionMode `jsonapi:"attribute" json:"execution_mode"`
	GlobalRemoteState          bool          `jsonapi:"attribute" json:"global_remote_state"`
	MigrationEnvironment       string        `jsonapi:"attribute" json:"migration_environment"`
	Name                       string        `jsonapi:"attribute" json:"name"`
	QueueAllRuns               bool          `jsonapi:"attribute" json:"queue_all_runs"`
	SpeculativeEnabled         bool          `jsonapi:"attribute" json:"speculative_enabled"`
	StructuredRunOutputEnabled bool          `jsonapi:"attribute" json:"structured_run_output_enabled"`
	SourceName                 string        `jsonapi:"attribute" json:"source_name"`
	SourceURL                  string        `jsonapi:"attribute" json:"source_url"`
	TerraformVersion           string        `jsonapi:"attribute" json:"terraform_version"`
	WorkingDirectory           string        `jsonapi:"attribute" json:"working_directory"`
	Organization               string        `jsonapi:"attribute" json:"organization"`
	LatestRun                  *LatestRun    `jsonapi:"attribute" json:"latest_run"`
	Tags                       []string      `jsonapi:"attribute" json:"tags"`
	Lock                       *Lock         `jsonapi:"attribute" json:"lock"`

	// VCS Connection; nil means the workspace is not connected.
	Connection *Connection

	// TriggerPatterns is mutually exclusive with Connection.TagsRegex.
	//
	// Note: TriggerPatterns ought to belong in Connection but it is included at
	// the root of Workspace because the go-tfe integration tests set
	// this field without setting the connection!
	TriggerPatterns []string

	// TriggerPrefixes exists only to pass the go-tfe integration tests and
	// is not used when determining whether to trigger runs. Use
	// TriggerPatterns instead.
	TriggerPrefixes []string
}

Workspace is a terraform workspace.

func NewWorkspace

func NewWorkspace(opts CreateOptions) (*Workspace, error)

func (*Workspace) Enlock

func (ws *Workspace) Enlock(id string, kind LockKind) error

Enlock locks the workspace

func (*Workspace) ExecutionModes

func (ws *Workspace) ExecutionModes() []string

ExecutionModes returns a list of possible execution modes

func (*Workspace) Locked

func (ws *Workspace) Locked() bool

Locked determines whether workspace is locked.

func (*Workspace) LogValue

func (ws *Workspace) LogValue() slog.Value

LogValue implements slog.LogValuer.

func (*Workspace) String

func (ws *Workspace) String() string

func (*Workspace) Unlock

func (ws *Workspace) Unlock(id string, kind LockKind, force bool) error

Unlock the workspace.

func (*Workspace) Update

func (ws *Workspace) Update(opts UpdateOptions) (*bool, error)

Update updates the workspace with the given options. A boolean is returned to indicate whether the workspace is to be connected to a repo (true), disconnected from a repo (false), or neither (nil).

type WorkspacePage

type WorkspacePage struct {
	organization.OrganizationPage

	Workspace *Workspace
}

WorkspacePage contains data shared by all workspace-based pages.

func NewPage

func NewPage(r *http.Request, title string, workspace *Workspace) WorkspacePage

type WorkspaceService

type WorkspaceService = Service

Jump to

Keyboard shortcuts

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