Skip to content

Commit

Permalink
SCALRCORE-28912: Add iac-platform attribute to the workspace resource…
Browse files Browse the repository at this point in the history
… and data source
  • Loading branch information
dmalikin committed Dec 4, 2023
1 parent 27becc6 commit 39fbffa
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 6 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- `scalr_service_account`: new attribute `owners` ([#289](https://github.com/Scalr/terraform-provider-scalr/pull/289))
- `data.scalr_service_account`: new attribute `owners` ([#289](https://github.com/Scalr/terraform-provider-scalr/pull/289))
- `scalr_workspace`: new attribute `iac-platform` ([]())
- `data.scalr_workspace`: new attribute `iac-platform` ([]())

### Changed

Expand Down
1 change: 1 addition & 0 deletions docs/resources/workspace.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ resource "scalr_workspace" "example-b" {
- `execution_mode` (String) Which execution mode to use. Valid values are `remote` and `local`. When set to `local`, the workspace will be used for state storage only. Defaults to `remote` (not set, backend default is used).
- `force_latest_run` (Boolean) Set (true/false) to configure if latest new run will be automatically raised in priority. Default `false`.
- `hooks` (Block List) Settings for the workspaces custom hooks. (see [below for nested schema](#nestedblock--hooks))
- `iac_platform` (String) The IaC platform to use for this workspace. Valid values are `terraform` and `opentofu`. Defaults to `terraform`.
- `module_version_id` (String) The identifier of a module version in the format `modver-<RANDOM STRING>`. This attribute conflicts with `vcs_provider_id` and `vcs_repo` attributes.
- `operations` (Boolean, Deprecated) Set (true/false) to configure workspace remote execution. When `false` workspace is only used to store state. Defaults to `true`.
- `provider_configuration` (Block Set) Provider configurations used in workspace runs. (see [below for nested schema](#nestedblock--provider_configuration))
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/hashicorp/terraform-plugin-docs v0.16.0
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734
github.com/scalr/go-scalr v0.0.0-20231127161513-5526b467eebc
github.com/scalr/go-scalr v0.0.0-20231204082256-f94a55cbf7fa
)

require (
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
github.com/scalr/go-scalr v0.0.0-20231127161513-5526b467eebc h1:TvEXZ34Q3rS8dab1zO5pNqTQDDjPZrKBBw44PycKV3A=
github.com/scalr/go-scalr v0.0.0-20231127161513-5526b467eebc/go.mod h1:p34SHb25YRvbgft7SUjSDYESeoQhWzAlxGXId/BbaSE=
github.com/scalr/go-scalr v0.0.0-20231204082256-f94a55cbf7fa h1:/gnbCaGFSHS+nv8CH4sxLMbvCuHaWtERe1gaDD5ZiWY=
github.com/scalr/go-scalr v0.0.0-20231204082256-f94a55cbf7fa/go.mod h1:p34SHb25YRvbgft7SUjSDYESeoQhWzAlxGXId/BbaSE=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
Expand Down
7 changes: 7 additions & 0 deletions scalr/data_source_scalr_workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ func dataSourceScalrWorkspace() *schema.Resource {
Computed: true,
},

"iac_platform": {
Description: "The IaC platform used for this workspace.",
Type: schema.TypeString,
Computed: true,
},

"working_directory": {
Description: "A relative path that Terraform will execute within.",
Type: schema.TypeString,
Expand Down Expand Up @@ -262,6 +268,7 @@ func dataSourceScalrWorkspaceRead(ctx context.Context, d *schema.ResourceData, m
_ = d.Set("operations", workspace.Operations)
_ = d.Set("execution_mode", workspace.ExecutionMode)
_ = d.Set("terraform_version", workspace.TerraformVersion)
_ = d.Set("iac_platform", workspace.IaCPlatform)
_ = d.Set("working_directory", workspace.WorkingDirectory)
_ = d.Set("has_resources", workspace.HasResources)
_ = d.Set("auto_queue_runs", workspace.AutoQueueRuns)
Expand Down
3 changes: 3 additions & 0 deletions scalr/data_source_scalr_workspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ func TestAccScalrWorkspaceDataSource_basic(t *testing.T) {
"data.scalr_workspace.test", "auto_apply", "true"),
resource.TestCheckResourceAttr(
"data.scalr_workspace.test", "terraform_version", "1.1.9"),
resource.TestCheckResourceAttr(
"data.scalr_workspace.test", "iac_platform", "terraform"),
resource.TestCheckResourceAttr(
"data.scalr_workspace.test", "working_directory", "terraform/test"),
resource.TestCheckResourceAttr(
Expand Down Expand Up @@ -115,6 +117,7 @@ resource scalr_workspace test {
environment_id = scalr_environment.test.id
auto_apply = true
terraform_version = "1.1.9"
iac_platform = "terraform"
working_directory = "terraform/test"
hooks {
pre_init = "./scripts/pre-init.sh"
Expand Down
28 changes: 25 additions & 3 deletions scalr/resource_scalr_workspace.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ import (
"context"
"errors"
"fmt"
"github.com/scalr/go-scalr"
"log"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"

"github.com/scalr/go-scalr"
)

func resourceScalrWorkspace() *schema.Resource {
Expand Down Expand Up @@ -142,6 +141,20 @@ func resourceScalrWorkspace() *schema.Resource {
Computed: true,
},

"iac_platform": {
Description: "The IaC platform to use for this workspace. Valid values are `terraform` and `opentofu`. Defaults to `terraform`.",
Type: schema.TypeString,
Optional: true,
Default: string(scalr.WorkspaceIaCPlatformTerraform),
ValidateFunc: validation.StringInSlice(
[]string{
string(scalr.WorkspaceIaCPlatformTerraform),
string(scalr.WorkspaceIaCPlatformOpenTofu),
},
false,
),
},

"working_directory": {
Description: "A relative path that Terraform will be run in. Defaults to the root of the repository `\"\"`.",
Type: schema.TypeString,
Expand Down Expand Up @@ -390,6 +403,10 @@ func resourceScalrWorkspaceCreate(ctx context.Context, d *schema.ResourceData, m
options.TerraformVersion = scalr.String(tfVersion.(string))
}

if iacPlatform, ok := d.GetOk("iac_platform"); ok {
options.IacPlatform = scalr.WorkspaceIaCPlatformPtr(scalr.WorkspaceIaCPlatform(iacPlatform.(string)))
}

if workingDir, ok := d.GetOk("working_directory"); ok {
options.WorkingDirectory = scalr.String(workingDir.(string))
}
Expand Down Expand Up @@ -521,6 +538,7 @@ func resourceScalrWorkspaceRead(ctx context.Context, d *schema.ResourceData, met
_ = d.Set("operations", workspace.Operations)
_ = d.Set("execution_mode", workspace.ExecutionMode)
_ = d.Set("terraform_version", workspace.TerraformVersion)
_ = d.Set("iac_platform", workspace.IaCPlatform)
_ = d.Set("working_directory", workspace.WorkingDirectory)
_ = d.Set("environment_id", workspace.Environment.ID)
_ = d.Set("has_resources", workspace.HasResources)
Expand Down Expand Up @@ -625,7 +643,7 @@ func resourceScalrWorkspaceUpdate(ctx context.Context, d *schema.ResourceData, m
d.HasChange("vcs_repo") || d.HasChange("operations") || d.HasChange("execution_mode") ||
d.HasChange("vcs_provider_id") || d.HasChange("agent_pool_id") || d.HasChange("deletion_protection_enabled") ||
d.HasChange("hooks") || d.HasChange("module_version_id") || d.HasChange("var_files") ||
d.HasChange("run_operation_timeout") {
d.HasChange("run_operation_timeout") || d.HasChange("iac_platform") {
// Create a new options struct.
options := scalr.WorkspaceUpdateOptions{
Name: scalr.String(d.Get("name").(string)),
Expand Down Expand Up @@ -662,6 +680,10 @@ func resourceScalrWorkspaceUpdate(ctx context.Context, d *schema.ResourceData, m
options.TerraformVersion = scalr.String(tfVersion.(string))
}

if iacPlatform, ok := d.GetOk("iac_platform"); ok {
options.IacPlatform = scalr.WorkspaceIaCPlatformPtr(scalr.WorkspaceIaCPlatform(iacPlatform.(string)))
}

if v, ok := d.Get("var_files").([]interface{}); ok {
varFiles := make([]string, 0)
for _, varFile := range v {
Expand Down
4 changes: 4 additions & 0 deletions scalr/resource_scalr_workspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ func TestAccScalrWorkspace_update(t *testing.T) {
"scalr_workspace.test", "execution_mode", string(scalr.WorkspaceExecutionModeLocal)),
resource.TestCheckResourceAttr(
"scalr_workspace.test", "terraform_version", "1.1.9"),
resource.TestCheckResourceAttr(
"scalr_workspace.test", "iac_platform", string(scalr.WorkspaceIaCPlatformTerraform)),
resource.TestCheckResourceAttr(
"scalr_workspace.test", "working_directory", "terraform/test"),
resource.TestCheckResourceAttr(
Expand Down Expand Up @@ -287,6 +289,8 @@ func TestAccScalrWorkspace_update(t *testing.T) {
"scalr_workspace.test", "execution_mode", string(scalr.WorkspaceExecutionModeLocal)),
resource.TestCheckResourceAttr(
"scalr_workspace.test", "terraform_version", "1.1.9"),
resource.TestCheckResourceAttr(
"scalr_workspace.test", "iac_platform", string(scalr.WorkspaceIaCPlatformTerraform)),
resource.TestCheckResourceAttr(
"scalr_workspace.test", "working_directory", "terraform/test"),
resource.TestCheckResourceAttr(
Expand Down

0 comments on commit 39fbffa

Please sign in to comment.