Documentation
¶
Overview ¶
Package workspace provides access to terraform workspaces
Index ¶
- Constants
- Variables
- func NewCommand(apiClient *otfapi.Client) *cobra.Command
- type CLI
- type Client
- func (c *Client) Get(ctx context.Context, workspaceID string) (*Workspace, error)
- func (c *Client) GetByName(ctx context.Context, organization, workspace string) (*Workspace, error)
- func (c *Client) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
- func (c *Client) Lock(ctx context.Context, workspaceID string, runID *string) (*Workspace, error)
- func (c *Client) Unlock(ctx context.Context, workspaceID string, runID *string, force bool) (*Workspace, error)
- func (c *Client) Update(ctx context.Context, workspaceID string, opts UpdateOptions) (*Workspace, error)
- type ConnectOptions
- type Connection
- type CreateOptions
- type ExecutionMode
- type FakeService
- func (f *FakeService) AddTags(ctx context.Context, workspaceID string, tags []TagSpec) error
- func (f *FakeService) Create(context.Context, CreateOptions) (*Workspace, error)
- func (f *FakeService) Delete(context.Context, string) (*Workspace, error)
- func (f *FakeService) Get(context.Context, string) (*Workspace, error)
- func (f *FakeService) GetByName(context.Context, string, string) (*Workspace, error)
- func (f *FakeService) GetPolicy(context.Context, string) (internal.WorkspacePolicy, error)
- func (f *FakeService) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
- func (f *FakeService) ListConnectedWorkspaces(ctx context.Context, vcsProviderID, repoPath string) ([]*Workspace, error)
- func (f *FakeService) ListTags(context.Context, string, ListTagsOptions) (*resource.Page[*Tag], error)
- func (f *FakeService) Lock(context.Context, string, *string) (*Workspace, error)
- func (f *FakeService) RemoveTags(ctx context.Context, workspaceID string, tags []TagSpec) error
- func (f *FakeService) SetPermission(ctx context.Context, workspaceID, teamID string, role rbac.Role) error
- func (f *FakeService) Unlock(context.Context, string, *string, bool) (*Workspace, error)
- func (f *FakeService) UnsetPermission(ctx context.Context, workspaceID, teamID string) error
- func (f *FakeService) Update(_ context.Context, _ string, opts UpdateOptions) (*Workspace, error)
- type LatestRun
- type ListOptions
- type ListTagsOptions
- type ListWorkspaceTagsOptions
- type Lock
- type LockButton
- type LockKind
- type Options
- type Service
- func (s *Service) AddHandlers(r *mux.Router)
- func (s *Service) AddTags(ctx context.Context, workspaceID string, tags []TagSpec) error
- func (s *Service) AfterCreateWorkspace(hook func(context.Context, *Workspace) error)
- func (s *Service) BeforeCreateWorkspace(hook func(context.Context, *Workspace) error)
- func (s *Service) BeforeUpdateWorkspace(hook func(context.Context, *Workspace) error)
- func (s *Service) Create(ctx context.Context, opts CreateOptions) (*Workspace, error)
- func (s *Service) Delete(ctx context.Context, workspaceID string) (*Workspace, error)
- func (s *Service) DeleteTags(ctx context.Context, organization string, tagIDs []string) error
- func (s *Service) Get(ctx context.Context, workspaceID string) (*Workspace, error)
- func (s *Service) GetByName(ctx context.Context, organization, workspace string) (*Workspace, error)
- func (s *Service) GetPolicy(ctx context.Context, workspaceID string) (internal.WorkspacePolicy, error)
- func (s *Service) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
- func (s *Service) ListConnectedWorkspaces(ctx context.Context, vcsProviderID, repoPath string) ([]*Workspace, error)
- func (s *Service) ListTags(ctx context.Context, organization string, opts ListTagsOptions) (*resource.Page[*Tag], error)
- func (s *Service) ListWorkspaceTags(ctx context.Context, workspaceID string, opts ListWorkspaceTagsOptions) (*resource.Page[*Tag], error)
- func (s *Service) Lock(ctx context.Context, workspaceID string, runID *string) (*Workspace, error)
- func (s *Service) RemoveTags(ctx context.Context, workspaceID string, tags []TagSpec) error
- func (s *Service) SetCurrentRun(ctx context.Context, workspaceID, runID string) (*Workspace, error)
- func (s *Service) SetPermission(ctx context.Context, workspaceID, teamID string, role rbac.Role) error
- func (s *Service) TagWorkspaces(ctx context.Context, tagID string, workspaceIDs []string) error
- func (s *Service) Unlock(ctx context.Context, workspaceID string, runID *string, force bool) (*Workspace, error)
- func (s *Service) UnsetPermission(ctx context.Context, workspaceID, teamID string) error
- func (s *Service) Update(ctx context.Context, workspaceID string, opts UpdateOptions) (*Workspace, error)
- func (s *Service) Watch(ctx context.Context) (<-chan pubsub.Event[*Workspace], func())
- type Tag
- type TagSpec
- type TagSpecs
- type UpdateOptions
- type VCSTriggerStrategy
- type Workspace
- func (ws *Workspace) Enlock(id string, kind LockKind) error
- func (ws *Workspace) ExecutionModes() []string
- func (ws *Workspace) Locked() bool
- func (ws *Workspace) LogValue() slog.Value
- func (ws *Workspace) String() string
- func (ws *Workspace) Unlock(id string, kind LockKind, force bool) error
- func (ws *Workspace) Update(opts UpdateOptions) (*bool, error)
- type WorkspacePage
Constants ¶
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 ¶
var ( ErrWorkspaceAlreadyLocked = errors.New("workspace already locked") ErrWorkspaceLockedByDifferentUser = errors.New("workspace locked by different user") ErrWorkspaceLockedByRun = errors.New("workspace is locked by Run") ErrWorkspaceAlreadyUnlocked = errors.New("workspace already unlocked") ErrWorkspaceUnlockDenied = errors.New("unauthorized to unlock workspace") ErrWorkspaceInvalidLock = errors.New("invalid workspace lock") ErrUnsupportedTerraformVersion = errors.New("unsupported terraform version") 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") ErrAgentExecutionModeWithoutPool = errors.New("agent execution mode requires agent pool ID") ErrNonAgentExecutionModeWithPool = errors.New("agent pool ID can only be specified with agent execution mode") )
var ErrInvalidTagSpec = errors.New("invalid tag spec: must provide either an ID or a name")
Functions ¶
Types ¶
type Client ¶
type ConnectOptions ¶
type Connection ¶
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 {
AgentPoolID *string
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 FakeService ¶
type FakeService struct {
Workspaces []*Workspace
Policy internal.WorkspacePolicy
}
func (*FakeService) Create ¶
func (f *FakeService) Create(context.Context, CreateOptions) (*Workspace, error)
func (*FakeService) GetPolicy ¶
func (f *FakeService) GetPolicy(context.Context, string) (internal.WorkspacePolicy, error)
func (*FakeService) List ¶
func (f *FakeService) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
func (*FakeService) ListConnectedWorkspaces ¶
func (*FakeService) ListTags ¶
func (f *FakeService) ListTags(context.Context, string, ListTagsOptions) (*resource.Page[*Tag], error)
func (*FakeService) RemoveTags ¶
func (*FakeService) SetPermission ¶
func (*FakeService) UnsetPermission ¶
func (f *FakeService) UnsetPermission(ctx context.Context, workspaceID, teamID string) error
func (*FakeService) Update ¶
func (f *FakeService) Update(_ context.Context, _ string, opts UpdateOptions) (*Workspace, error)
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 Service ¶
type Service struct {
internal.Authorizer // workspace authorizer
// contains filtered or unexported fields
}
func NewService ¶
func (*Service) AddHandlers ¶
func (*Service) AfterCreateWorkspace ¶
func (*Service) BeforeCreateWorkspace ¶
func (*Service) BeforeUpdateWorkspace ¶
func (*Service) DeleteTags ¶
func (*Service) GetPolicy ¶
func (s *Service) GetPolicy(ctx context.Context, workspaceID string) (internal.WorkspacePolicy, error)
GetPolicy retrieves a workspace policy.
NOTE: no authz protects this endpoint because it's used in the process of making authz decisions.
func (*Service) ListConnectedWorkspaces ¶
func (*Service) ListWorkspaceTags ¶
func (*Service) Lock ¶
Lock locks the workspace. A workspace can only be locked on behalf of a run or a user. If the former then runID must be populated. Otherwise a user is extracted from the context.
func (*Service) RemoveTags ¶
func (*Service) SetCurrentRun ¶
SetCurrentRun sets the current run for the workspace
func (*Service) SetPermission ¶
func (*Service) TagWorkspaces ¶
func (*Service) Unlock ¶
func (s *Service) Unlock(ctx context.Context, workspaceID string, runID *string, force bool) (*Workspace, error)
Unlock unlocks the workspace. A workspace can only be unlocked on behalf of a run or a user. If the former then runID must be non-nil; otherwise a user is extracted from the context.
func (*Service) UnsetPermission ¶
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 UpdateOptions ¶
type UpdateOptions struct {
AgentPoolID *string `json:"agent-pool-id,omitempty"`
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 VCSTriggerStrategy ¶
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"`
AgentPoolID *string `jsonapi:"attribute" json:"agent-pool-id"`
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) ExecutionModes ¶
ExecutionModes returns a list of possible execution modes
type WorkspacePage ¶
type WorkspacePage struct {
organization.OrganizationPage
Workspace *Workspace
}
WorkspacePage contains data shared by all workspace-based pages.