Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SCALRCORE-28912 Add iac-platform attribute to Terraform Scalr Provider #138

Merged
merged 4 commits into from
Dec 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions type_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,8 @@ func AutoQueueRunsModePtr(v WorkspaceAutoQueueRuns) *WorkspaceAutoQueueRuns {
func ServiceAccountStatusPtr(v ServiceAccountStatus) *ServiceAccountStatus {
return &v
}

// WorkspaceIaCPlatformPtr returns a pointer to the given IaC platform
func WorkspaceIaCPlatformPtr(v WorkspaceIaCPlatform) *WorkspaceIaCPlatform {
return &v
}
16 changes: 16 additions & 0 deletions workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ const (
AutoQueueRunsModeNever WorkspaceAutoQueueRuns = "never"
)

// WorkspaceIaCPlatform represents an IaC platform used in this workspace.
type WorkspaceIaCPlatform string

// Available IaC platforms
const (
WorkspaceIaCPlatformTerraform WorkspaceIaCPlatform = "terraform"
WorkspaceIaCPlatformOpenTofu WorkspaceIaCPlatform = "opentofu"
)

// WorkspaceList represents a list of workspaces.
type WorkspaceList struct {
*Pagination
Expand All @@ -82,6 +91,7 @@ type Workspace struct {
ExecutionMode WorkspaceExecutionMode `jsonapi:"attr,execution-mode"`
Permissions *WorkspacePermissions `jsonapi:"attr,permissions"`
TerraformVersion string `jsonapi:"attr,terraform-version"`
IaCPlatform WorkspaceIaCPlatform `jsonapi:"attr,iac-platform"`
VCSRepo *WorkspaceVCSRepo `jsonapi:"attr,vcs-repo"`
WorkingDirectory string `jsonapi:"attr,working-directory"`
ApplySchedule string `jsonapi:"attr,apply-schedule"`
Expand Down Expand Up @@ -207,6 +217,9 @@ type WorkspaceCreateOptions struct {
// workspace, the latest version is selected unless otherwise specified.
TerraformVersion *string `jsonapi:"attr,terraform-version,omitempty"`

// The IaC platform to use for this workspace.
IacPlatform *WorkspaceIaCPlatform `jsonapi:"attr,iac-platform,omitempty"`

// Settings for the workspace's VCS repository. If omitted, the workspace is
// created without a VCS repo. If included, you must specify at least the
// oauth-token-id and identifier keys below.
Expand Down Expand Up @@ -388,6 +401,9 @@ type WorkspaceUpdateOptions struct {
// The version of Terraform to use for this workspace.
TerraformVersion *string `jsonapi:"attr,terraform-version,omitempty"`

// The IaC platform to use for this workspace.
IacPlatform *WorkspaceIaCPlatform `jsonapi:"attr,iac-platform,omitempty"`

// To delete a workspace's existing VCS repo, specify null instead of an
// object. To modify a workspace's existing VCS repo, include whichever of
// the keys below you wish to modify. To add a new VCS repo to a workspace
Expand Down
10 changes: 10 additions & 0 deletions workspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ func TestWorkspacesCreate(t *testing.T) {
WorkingDirectory: String("bar/"),
RunOperationTimeout: Int(15),
AutoQueueRuns: AutoQueueRunsModePtr(AutoQueueRunsModeNever),
IacPlatform: WorkspaceIaCPlatformPtr(WorkspaceIaCPlatformTerraform),
}

ws, err := client.Workspaces.Create(ctx, options)
Expand All @@ -129,6 +130,7 @@ func TestWorkspacesCreate(t *testing.T) {
assert.Equal(t, *options.WorkingDirectory, item.WorkingDirectory)
assert.Equal(t, options.RunOperationTimeout, item.RunOperationTimeout)
assert.Equal(t, *options.AutoQueueRuns, item.AutoQueueRuns)
assert.Equal(t, *options.IacPlatform, item.IaCPlatform)
}
})

Expand Down Expand Up @@ -305,6 +307,7 @@ func TestWorkspacesUpdate(t *testing.T) {
TerraformVersion: String("1.2.9"),
RunOperationTimeout: Int(20),
AutoQueueRuns: AutoQueueRunsModePtr(AutoQueueRunsModeAlways),
IacPlatform: WorkspaceIaCPlatformPtr(WorkspaceIaCPlatformTerraform),
}

wsAfter, err := client.Workspaces.Update(ctx, wsTest.ID, options)
Expand All @@ -319,6 +322,7 @@ func TestWorkspacesUpdate(t *testing.T) {
assert.NotEqual(t, wsTest.TerraformVersion, wsAfter.TerraformVersion)
assert.Equal(t, wsTest.WorkingDirectory, wsAfter.WorkingDirectory)
assert.Equal(t, int(20), *wsAfter.RunOperationTimeout)
assert.Equal(t, wsTest.IaCPlatform, wsAfter.IaCPlatform)
})

t.Run("when attaching/detaching an agent pool", func(t *testing.T) {
Expand Down Expand Up @@ -351,6 +355,7 @@ func TestWorkspacesUpdate(t *testing.T) {
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeLocal),
TerraformVersion: String("1.1.9"),
WorkingDirectory: String("baz/"),
IacPlatform: WorkspaceIaCPlatformPtr(WorkspaceIaCPlatformTerraform),
}

w, err := client.Workspaces.Update(ctx, wsTest.ID, options)
Expand All @@ -371,6 +376,7 @@ func TestWorkspacesUpdate(t *testing.T) {
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.IacPlatform, item.IaCPlatform)
}
})

Expand Down Expand Up @@ -406,6 +412,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
ForceLatestRun: Bool(true),
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeRemote),
TerraformVersion: String("1.2.9"),
IacPlatform: WorkspaceIaCPlatformPtr(WorkspaceIaCPlatformTerraform),
}

wAfter, err := client.Workspaces.Update(ctx, wTest.ID, options)
Expand All @@ -416,6 +423,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
assert.NotEqual(t, wTest.ForceLatestRun, wAfter.ForceLatestRun)
assert.NotEqual(t, wTest.TerraformVersion, wAfter.TerraformVersion)
assert.Equal(t, wTest.WorkingDirectory, wAfter.WorkingDirectory)
assert.Equal(t, wTest.IaCPlatform, wAfter.IaCPlatform)
})

t.Run("with valid options", func(t *testing.T) {
Expand All @@ -426,6 +434,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
ExecutionMode: WorkspaceExecutionModePtr(WorkspaceExecutionModeLocal),
TerraformVersion: String("1.1.9"),
WorkingDirectory: String("baz/"),
IacPlatform: WorkspaceIaCPlatformPtr(WorkspaceIaCPlatformTerraform),
}

w, err := client.Workspaces.Update(ctx, wTest.ID, options)
Expand All @@ -445,6 +454,7 @@ func TestWorkspacesUpdateByID(t *testing.T) {
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.IacPlatform, item.IaCPlatform)
}
})

Expand Down
Loading