From 5110143f5c5dbef64e8df1573e6fcfc46be9354f Mon Sep 17 00:00:00 2001 From: tabito Date: Tue, 7 Oct 2025 21:02:15 +0900 Subject: [PATCH 1/4] Implement remote_access argument --- internal/service/sagemaker/space.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/service/sagemaker/space.go b/internal/service/sagemaker/space.go index b02268f9aff5..2dee5301acfa 100644 --- a/internal/service/sagemaker/space.go +++ b/internal/service/sagemaker/space.go @@ -418,6 +418,12 @@ func resourceSpace() *schema.Resource { }, }, }, + "remote_access": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.FeatureStatus](), + }, }, }, }, @@ -679,6 +685,10 @@ func expandSpaceSettings(l []any) *awstypes.SpaceSettings { config.KernelGatewayAppSettings = expandDomainKernelGatewayAppSettings(v) } + if v, ok := m["remote_access"].(string); ok { + config.RemoteAccess = awstypes.FeatureStatus(v) + } + if v, ok := m["space_storage_settings"].([]any); ok && len(v) > 0 { config.SpaceStorageSettings = expandSpaceStorageSettings(v) } @@ -715,6 +725,10 @@ func flattenSpaceSettings(config *awstypes.SpaceSettings) []map[string]any { m["kernel_gateway_app_settings"] = flattenDomainKernelGatewayAppSettings(config.KernelGatewayAppSettings) } + if config.RemoteAccess != "" { + m["remote_access"] = config.RemoteAccess + } + if config.SpaceStorageSettings != nil { m["space_storage_settings"] = flattenSpaceStorageSettings(config.SpaceStorageSettings) } From 639f9d32721c247e81b860e0a44f34a0d4178d2f Mon Sep 17 00:00:00 2001 From: tabito Date: Tue, 7 Oct 2025 21:04:21 +0900 Subject: [PATCH 2/4] Add an acceptance test for space_settings.remote_access --- internal/service/sagemaker/sagemaker_test.go | 1 + internal/service/sagemaker/space_test.go | 81 ++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/internal/service/sagemaker/sagemaker_test.go b/internal/service/sagemaker/sagemaker_test.go index fc3e4319b5ba..6353aa62acd0 100644 --- a/internal/service/sagemaker/sagemaker_test.go +++ b/internal/service/sagemaker/sagemaker_test.go @@ -108,6 +108,7 @@ func TestAccSageMaker_serial(t *testing.T) { "codeEditorAppSettings": testAccSpace_codeEditorAppSettings, "storageSettings": testAccSpace_storageSettings, "customFileSystem": testAccSpace_customFileSystem, + "remoteAccess": testAccSpace_remoteAccess, }, "UserProfile": { acctest.CtBasic: testAccUserProfile_basic, diff --git a/internal/service/sagemaker/space_test.go b/internal/service/sagemaker/space_test.go index 5978165b56ec..7e868ddffd74 100644 --- a/internal/service/sagemaker/space_test.go +++ b/internal/service/sagemaker/space_test.go @@ -11,6 +11,7 @@ import ( "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/service/sagemaker" + awstypes "github.com/aws/aws-sdk-go-v2/service/sagemaker/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -408,6 +409,62 @@ func testAccSpace_jupyterServerAppSettings(t *testing.T) { }) } +func testAccSpace_remoteAccess(t *testing.T) { + ctx := acctest.Context(t) + var domain sagemaker.DescribeSpaceOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_sagemaker_space.test" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SageMakerServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckSpaceDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccSpaceConfig_remoteAccess(rName, string(awstypes.FeatureStatusEnabled)), + Check: resource.ComposeTestCheckFunc( + testAccCheckSpaceExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "space_settings.#", "1"), + resource.TestCheckResourceAttr(resourceName, "space_settings.0.remote_access", string(awstypes.FeatureStatusEnabled)), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + // Set remote_access to DISABLED + Config: testAccSpaceConfig_remoteAccess(rName, string(awstypes.FeatureStatusDisabled)), + Check: resource.ComposeTestCheckFunc( + testAccCheckSpaceExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "space_settings.#", "1"), + resource.TestCheckResourceAttr(resourceName, "space_settings.0.remote_access", string(awstypes.FeatureStatusDisabled)), + ), + }, + { + // Set remote_access back to ENABLED + Config: testAccSpaceConfig_remoteAccess(rName, string(awstypes.FeatureStatusEnabled)), + Check: resource.ComposeTestCheckFunc( + testAccCheckSpaceExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "space_settings.#", "1"), + resource.TestCheckResourceAttr(resourceName, "space_settings.0.remote_access", string(awstypes.FeatureStatusEnabled)), + ), + }, + { + // Remove remote_access (inherit from the previous value) + Config: testAccSpaceConfig_spaceSettingsEmpty(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckSpaceExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "space_settings.#", "1"), + resource.TestCheckResourceAttr(resourceName, "space_settings.0.remote_access", string(awstypes.FeatureStatusEnabled)), + ), + }, + }, + }) +} + func testAccSpace_disappears(t *testing.T) { ctx := acctest.Context(t) var domain sagemaker.DescribeSpaceOutput @@ -830,3 +887,27 @@ resource "aws_sagemaker_space" "test" { } `, rName, baseImage)) } + +func testAccSpaceConfig_remoteAccess(rName, remoteAccess string) string { + return acctest.ConfigCompose(testAccSpaceConfig_base(rName), fmt.Sprintf(` +resource "aws_sagemaker_space" "test" { + domain_id = aws_sagemaker_domain.test.id + space_name = %[1]q + + space_settings { + remote_access = %[2]q + } +} +`, rName, remoteAccess)) +} + +func testAccSpaceConfig_spaceSettingsEmpty(rName string) string { + return acctest.ConfigCompose(testAccSpaceConfig_base(rName), fmt.Sprintf(` +resource "aws_sagemaker_space" "test" { + domain_id = aws_sagemaker_domain.test.id + space_name = %[1]q + + space_settings {} +} +`, rName)) +} From 45c76c21fe89f99dfd9e16bfb7694dad0458ef42 Mon Sep 17 00:00:00 2001 From: tabito Date: Tue, 7 Oct 2025 21:15:18 +0900 Subject: [PATCH 3/4] Update the documentation to include space_settings.remote_access --- website/docs/r/sagemaker_space.html.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/r/sagemaker_space.html.markdown b/website/docs/r/sagemaker_space.html.markdown index 227150c0eca4..cc79218aae00 100644 --- a/website/docs/r/sagemaker_space.html.markdown +++ b/website/docs/r/sagemaker_space.html.markdown @@ -50,6 +50,7 @@ The `space_settings` block supports the following arguments: * `jupyter_lab_app_settings` - (Optional) The settings for the JupyterLab application. See [`jupyter_lab_app_settings` Block](#jupyter_lab_app_settings-block) below. * `jupyter_server_app_settings` - (Optional) The Jupyter server's app settings. See [`jupyter_server_app_settings` Block](#jupyter_server_app_settings-block) below. * `kernel_gateway_app_settings` - (Optional) The kernel gateway app settings. See [`kernel_gateway_app_settings` Block](#kernel_gateway_app_settings-block) below. +* `remote_access` - (Optional) Setting that enables or disables remote access for a SageMaker space. Valid values are `ENABLED` and `DISABLED`. * `space_storage_settings` - (Optional) The storage settings. See [`space_storage_settings` Block](#space_storage_settings-block) below. ### `space_sharing_settings` Block From fb372db1634e035ba2f7219c58d7963ead725094 Mon Sep 17 00:00:00 2001 From: tabito Date: Tue, 7 Oct 2025 21:16:11 +0900 Subject: [PATCH 4/4] add changelog --- .changelog/44567.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/44567.txt diff --git a/.changelog/44567.txt b/.changelog/44567.txt new file mode 100644 index 000000000000..879b8536bedc --- /dev/null +++ b/.changelog/44567.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_sagemaker_space: Add `space_settings.remote_access` argument +```