Skip to content

Commit

Permalink
SCALRCORE-18947 Add workspace.execution-mode attribute
Browse files Browse the repository at this point in the history
[API_BRANCH]
  • Loading branch information
petroprotsakh committed Jul 19, 2022
1 parent b5bf24a commit bebe2fc
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 31 deletions.
5 changes: 5 additions & 0 deletions type_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,8 @@ func Int64(v int64) *int64 {
func String(v string) *string {
return &v
}

// WorkspaceExecutionModePtr returns a pointer to the given execution mode
func WorkspaceExecutionModePtr(v WorkspaceExecutionMode) *WorkspaceExecutionMode {
return &v
}
56 changes: 34 additions & 22 deletions workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ type workspaces struct {
client *Client
}

// WorkspaceExecutionMode represents an execution mode setting of the workspace.
type WorkspaceExecutionMode string

// Available execution modes
const (
WorkspaceExecutionModeRemote WorkspaceExecutionMode = "remote"
WorkspaceExecutionModeLocal WorkspaceExecutionMode = "local"
)

// WorkspaceList represents a list of workspaces.
type WorkspaceList struct {
*Pagination
Expand All @@ -48,26 +57,27 @@ type WorkspaceList struct {

// Workspace represents a Scalr workspace.
type Workspace struct {
ID string `jsonapi:"primary,workspaces"`
Actions *WorkspaceActions `jsonapi:"attr,actions"`
AutoApply bool `jsonapi:"attr,auto-apply"`
CanQueueDestroyPlan bool `jsonapi:"attr,can-queue-destroy-plan"`
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
FileTriggersEnabled bool `jsonapi:"attr,file-triggers-enabled"`
Locked bool `jsonapi:"attr,locked"`
MigrationEnvironment string `jsonapi:"attr,migration-environment"`
Name string `jsonapi:"attr,name"`
Operations bool `jsonapi:"attr,operations"`
Permissions *WorkspacePermissions `jsonapi:"attr,permissions"`
TerraformVersion string `jsonapi:"attr,terraform-version"`
VCSRepo *WorkspaceVCSRepo `jsonapi:"attr,vcs-repo"`
WorkingDirectory string `jsonapi:"attr,working-directory"`
ApplySchedule string `jsonapi:"attr,apply-schedule"`
DestroySchedule string `jsonapi:"attr,destroy-schedule"`
HasResources bool `jsonapi:"attr,has-resources"`
Hooks *Hooks `jsonapi:"attr,hooks"`
RunOperationTimeout *int `jsonapi:"attr,run-operation-timeout"`
VarFiles []string `jsonapi:"attr,var-files"`
ID string `jsonapi:"primary,workspaces"`
Actions *WorkspaceActions `jsonapi:"attr,actions"`
AutoApply bool `jsonapi:"attr,auto-apply"`
CanQueueDestroyPlan bool `jsonapi:"attr,can-queue-destroy-plan"`
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
FileTriggersEnabled bool `jsonapi:"attr,file-triggers-enabled"`
Locked bool `jsonapi:"attr,locked"`
MigrationEnvironment string `jsonapi:"attr,migration-environment"`
Name string `jsonapi:"attr,name"`
Operations bool `jsonapi:"attr,operations"`
ExecutionMode WorkspaceExecutionMode `jsonapi:"attr,execution-mode"`
Permissions *WorkspacePermissions `jsonapi:"attr,permissions"`
TerraformVersion string `jsonapi:"attr,terraform-version"`
VCSRepo *WorkspaceVCSRepo `jsonapi:"attr,vcs-repo"`
WorkingDirectory string `jsonapi:"attr,working-directory"`
ApplySchedule string `jsonapi:"attr,apply-schedule"`
DestroySchedule string `jsonapi:"attr,destroy-schedule"`
HasResources bool `jsonapi:"attr,has-resources"`
Hooks *Hooks `jsonapi:"attr,hooks"`
RunOperationTimeout *int `jsonapi:"attr,run-operation-timeout"`
VarFiles []string `jsonapi:"attr,var-files"`

// Relations
CurrentRun *Run `jsonapi:"relation,current-run"`
Expand Down Expand Up @@ -162,7 +172,8 @@ type WorkspaceCreateOptions struct {
Name *string `jsonapi:"attr,name"`

// Whether the workspace will use remote or local execution mode.
Operations *bool `jsonapi:"attr,operations,omitempty"`
Operations *bool `jsonapi:"attr,operations,omitempty"`
ExecutionMode *WorkspaceExecutionMode `jsonapi:"attr,execution-mode,omitempty"`

// The version of Terraform to use for this workspace. Upon creating a
// workspace, the latest version is selected unless otherwise specified.
Expand Down Expand Up @@ -327,7 +338,8 @@ type WorkspaceUpdateOptions struct {
FileTriggersEnabled *bool `jsonapi:"attr,file-triggers-enabled,omitempty"`

// Whether the workspace will use remote or local execution mode.
Operations *bool `jsonapi:"attr,operations,omitempty"`
Operations *bool `jsonapi:"attr,operations,omitempty"`
ExecutionMode *WorkspaceExecutionMode `jsonapi:"attr,execution-mode,omitempty"`

// The version of Terraform to use for this workspace.
TerraformVersion *string `jsonapi:"attr,terraform-version,omitempty"`
Expand Down
18 changes: 9 additions & 9 deletions workspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func TestWorkspacesCreate(t *testing.T) {
Environment: envTest,
Name: String(randomString(t)),
AutoApply: Bool(true),
Operations: Bool(true),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeRemote),
TerraformVersion: String("0.12.25"),
WorkingDirectory: String("bar/"),
RunOperationTimeout: Int(15),
Expand All @@ -93,7 +93,7 @@ func TestWorkspacesCreate(t *testing.T) {
assert.Equal(t, *options.Name, item.Name)
assert.Equal(t, *options.AutoApply, item.AutoApply)
assert.Equal(t, false, item.HasResources)
assert.Equal(t, *options.Operations, item.Operations)
assert.Equal(t, *options.ExecutionMode, item.ExecutionMode)
assert.Equal(t, *options.TerraformVersion, item.TerraformVersion)
assert.Equal(t, *options.WorkingDirectory, item.WorkingDirectory)
assert.Equal(t, options.RunOperationTimeout, item.RunOperationTimeout)
Expand All @@ -106,7 +106,7 @@ func TestWorkspacesCreate(t *testing.T) {
AgentPool: pool,
Name: String(randomString(t)),
AutoApply: Bool(true),
Operations: Bool(true),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeRemote),
TerraformVersion: String("0.12.25"),
WorkingDirectory: String("bar/"),
}
Expand Down Expand Up @@ -267,7 +267,7 @@ func TestWorkspacesUpdate(t *testing.T) {
options := WorkspaceUpdateOptions{
Name: String(wsTest.Name),
AutoApply: Bool(true),
Operations: Bool(true),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeRemote),
TerraformVersion: String("0.12.25"),
RunOperationTimeout: Int(20),
}
Expand Down Expand Up @@ -307,7 +307,7 @@ func TestWorkspacesUpdate(t *testing.T) {
options := WorkspaceUpdateOptions{
Name: String(randomString(t)),
AutoApply: Bool(false),
Operations: Bool(false),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeLocal),
TerraformVersion: String("0.12.25"),
WorkingDirectory: String("baz/"),
}
Expand All @@ -325,7 +325,7 @@ func TestWorkspacesUpdate(t *testing.T) {
} {
assert.Equal(t, *options.Name, item.Name)
assert.Equal(t, *options.AutoApply, item.AutoApply)
assert.Equal(t, *options.Operations, item.Operations)
assert.Equal(t, *options.ExecutionMode, item.ExecutionMode)
assert.Equal(t, *options.TerraformVersion, item.TerraformVersion)
assert.Equal(t, *options.WorkingDirectory, item.WorkingDirectory)
}
Expand Down Expand Up @@ -360,7 +360,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
options := WorkspaceUpdateOptions{
Name: String(wTest.Name),
AutoApply: Bool(true),
Operations: Bool(true),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeRemote),
TerraformVersion: String("0.12.25"),
}

Expand All @@ -377,7 +377,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
options := WorkspaceUpdateOptions{
Name: String(randomString(t)),
AutoApply: Bool(false),
Operations: Bool(false),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeLocal),
TerraformVersion: String("0.12.25"),
WorkingDirectory: String("baz/"),
}
Expand All @@ -395,7 +395,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
} {
assert.Equal(t, *options.Name, item.Name)
assert.Equal(t, *options.AutoApply, item.AutoApply)
assert.Equal(t, *options.Operations, item.Operations)
assert.Equal(t, *options.ExecutionMode, item.ExecutionMode)
assert.Equal(t, *options.TerraformVersion, item.TerraformVersion)
assert.Equal(t, *options.WorkingDirectory, item.WorkingDirectory)
}
Expand Down

0 comments on commit bebe2fc

Please sign in to comment.