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 resource.ID) (*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 resource.ID, runID *resource.ID) (*Workspace, error)
- func (c *Client) Unlock(ctx context.Context, workspaceID resource.ID, runID *resource.ID, force bool) (*Workspace, error)
- func (c *Client) Update(ctx context.Context, workspaceID resource.ID, opts UpdateOptions) (*Workspace, error)
- type ConnectOptions
- type Connection
- type CreateOptions
- type ExecutionMode
- type FakeService
- func (f *FakeService) AddTags(ctx context.Context, workspaceID resource.ID, tags []TagSpec) error
- func (f *FakeService) Create(context.Context, CreateOptions) (*Workspace, error)
- func (f *FakeService) Delete(context.Context, resource.ID) (*Workspace, error)
- func (f *FakeService) Get(context.Context, resource.ID) (*Workspace, error)
- func (f *FakeService) GetByName(context.Context, string, string) (*Workspace, error)
- func (f *FakeService) GetWorkspacePolicy(context.Context, resource.ID) (authz.WorkspacePolicy, error)
- func (f *FakeService) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
- func (f *FakeService) ListConnectedWorkspaces(ctx context.Context, vcsProviderID resource.ID, repoPath string) ([]*Workspace, error)
- func (f *FakeService) ListTags(context.Context, string, ListTagsOptions) (*resource.Page[*Tag], error)
- func (f *FakeService) Lock(context.Context, resource.ID, *resource.ID) (*Workspace, error)
- func (f *FakeService) RemoveTags(ctx context.Context, workspaceID resource.ID, tags []TagSpec) error
- func (f *FakeService) SetPermission(ctx context.Context, workspaceID, teamID resource.ID, role authz.Role) error
- func (f *FakeService) Unlock(context.Context, resource.ID, *resource.ID, bool) (*Workspace, error)
- func (f *FakeService) UnsetPermission(ctx context.Context, workspaceID, teamID resource.ID) error
- func (f *FakeService) Update(_ context.Context, _ resource.ID, opts UpdateOptions) (*Workspace, error)
- type LatestRun
- type ListOptions
- type ListTagsOptions
- type ListWorkspaceTagsOptions
- type LockButton
- type Options
- type Service
- func (s *Service) AddHandlers(r *mux.Router)
- func (s *Service) AddTags(ctx context.Context, workspaceID resource.ID, 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 resource.ID) (*Workspace, error)
- func (s *Service) DeleteTags(ctx context.Context, organization string, tagIDs []resource.ID) error
- func (s *Service) Get(ctx context.Context, workspaceID resource.ID) (*Workspace, error)
- func (s *Service) GetByName(ctx context.Context, organization, workspace string) (*Workspace, error)
- func (s *Service) GetWorkspacePolicy(ctx context.Context, workspaceID resource.ID) (authz.WorkspacePolicy, error)
- func (s *Service) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
- func (s *Service) ListConnectedWorkspaces(ctx context.Context, vcsProviderID resource.ID, 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 resource.ID, opts ListWorkspaceTagsOptions) (*resource.Page[*Tag], error)
- func (s *Service) Lock(ctx context.Context, workspaceID resource.ID, runID *resource.ID) (*Workspace, error)
- func (s *Service) RemoveTags(ctx context.Context, workspaceID resource.ID, tags []TagSpec) error
- func (s *Service) SetCurrentRun(ctx context.Context, workspaceID, runID resource.ID) (*Workspace, error)
- func (s *Service) SetPermission(ctx context.Context, workspaceID, teamID resource.ID, role authz.Role) error
- func (s *Service) TagWorkspaces(ctx context.Context, tagID resource.ID, workspaceIDs []resource.ID) error
- func (s *Service) Unlock(ctx context.Context, workspaceID resource.ID, runID *resource.ID, force bool) (*Workspace, error)
- func (s *Service) UnsetPermission(ctx context.Context, workspaceID, teamID resource.ID) error
- func (s *Service) Update(ctx context.Context, workspaceID resource.ID, 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 resource.ID) 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 resource.ID, 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 ¶ 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 resource.ID 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 *resource.ID 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 ¶ added in v0.2.2
type FakeService struct { Workspaces []*Workspace Policy authz.WorkspacePolicy }
func (*FakeService) Create ¶ added in v0.2.2
func (f *FakeService) Create(context.Context, CreateOptions) (*Workspace, error)
func (*FakeService) GetWorkspacePolicy ¶ added in v0.3.6
func (f *FakeService) GetWorkspacePolicy(context.Context, resource.ID) (authz.WorkspacePolicy, error)
func (*FakeService) List ¶ added in v0.2.2
func (f *FakeService) List(ctx context.Context, opts ListOptions) (*resource.Page[*Workspace], error)
func (*FakeService) ListConnectedWorkspaces ¶ added in v0.2.2
func (*FakeService) ListTags ¶ added in v0.2.2
func (f *FakeService) ListTags(context.Context, string, ListTagsOptions) (*resource.Page[*Tag], error)
func (*FakeService) RemoveTags ¶ added in v0.2.2
func (*FakeService) SetPermission ¶ added in v0.2.2
func (*FakeService) UnsetPermission ¶ added in v0.2.2
func (*FakeService) Update ¶ added in v0.2.2
func (f *FakeService) Update(_ context.Context, _ resource.ID, opts UpdateOptions) (*Workspace, error)
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 LockButton ¶
type Service ¶
type Service struct { logr.Logger *authz.Authorizer // contains filtered or unexported fields }
func NewService ¶
func (*Service) AddHandlers ¶ added in v0.2.2
func (*Service) AfterCreateWorkspace ¶ added in v0.1.8
func (*Service) BeforeCreateWorkspace ¶ added in v0.2.0
func (*Service) BeforeUpdateWorkspace ¶ added in v0.2.0
func (*Service) DeleteTags ¶ added in v0.2.2
func (*Service) GetWorkspacePolicy ¶ added in v0.3.6
func (s *Service) GetWorkspacePolicy(ctx context.Context, workspaceID resource.ID) (authz.WorkspacePolicy, error)
GetWorkspacePolicy retrieves the authorization policy for a workspace.
NOTE: there is no auth because it is used in the process of making an auth decision.
func (*Service) ListConnectedWorkspaces ¶ added in v0.1.14
func (*Service) ListWorkspaceTags ¶ added in v0.2.2
func (*Service) Lock ¶ added in v0.2.2
func (s *Service) Lock(ctx context.Context, workspaceID resource.ID, runID *resource.ID) (*Workspace, error)
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 ¶ added in v0.2.2
func (*Service) SetCurrentRun ¶
func (s *Service) SetCurrentRun(ctx context.Context, workspaceID, runID resource.ID) (*Workspace, error)
SetCurrentRun sets the current run for the workspace
func (*Service) SetPermission ¶ added in v0.2.2
func (*Service) TagWorkspaces ¶ added in v0.2.2
func (*Service) Unlock ¶ added in v0.2.2
func (s *Service) Unlock(ctx context.Context, workspaceID resource.ID, runID *resource.ID, 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 ¶ added in v0.2.2
type Tag ¶
type Tag struct { ID resource.ID // 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 *resource.ID `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 ¶ added in v0.1.4
type VCSTriggerStrategy string
VCS trigger strategy determines which VCS events trigger runs
type Workspace ¶
type Workspace struct { ID resource.ID `jsonapi:"primary,workspaces"` CreatedAt time.Time `jsonapi:"attribute" json:"created_at"` UpdatedAt time.Time `jsonapi:"attribute" json:"updated_at"` AgentPoolID *resource.ID `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 *resource.ID `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 ¶
Enlock locks the workspace with the given ID. The ID must be either a run or user ID.
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.