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

aws_sagemaker_domain #38198

Closed
Closed
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
3 changes: 3 additions & 0 deletions .changelog/38198.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/aws_sagemaker_domain: Add `jupyter_lab_app_settings` argument to `default_space_settings` configuration block
```
93 changes: 93 additions & 0 deletions internal/service/sagemaker/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,91 @@ func ResourceDomain() *schema.Resource {
Required: true,
ValidateFunc: verify.ValidARN,
},
"jupyter_lab_app_settings": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"code_repository": {
Type: schema.TypeSet,
Optional: true,
MaxItems: 10,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"repository_url": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringLenBetween(1, 1024),
},
},
},
},
"custom_image": {
Type: schema.TypeList,
Optional: true,
MaxItems: 200,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"app_image_config_name": {
Type: schema.TypeString,
Required: true,
},
"image_name": {
Type: schema.TypeString,
Required: true,
},
"image_version_number": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"default_resource_spec": {
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
names.AttrInstanceType: {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringInSlice(sagemaker.AppInstanceType_Values(), false),
},
"lifecycle_config_arn": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: verify.ValidARN,
},
"sagemaker_image_arn": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: verify.ValidARN,
},
"sagemaker_image_version_alias": {
Type: schema.TypeString,
Optional: true,
},
"sagemaker_image_version_arn": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: verify.ValidARN,
},
},
},
},
"lifecycle_config_arns": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: verify.ValidARN,
},
},
},
},
},
"jupyter_server_app_settings": {
Type: schema.TypeList,
Optional: true,
Expand Down Expand Up @@ -2318,6 +2403,10 @@ func expanDefaultSpaceSettings(l []interface{}) *sagemaker.DefaultSpaceSettings
config.ExecutionRole = aws.String(v)
}

if v, ok := m["jupyter_lab_app_settings"].([]interface{}); ok && len(v) > 0 {
config.JupyterLabAppSettings = expandDomainJupyterLabAppSettings(v)
}

if v, ok := m["jupyter_server_app_settings"].([]interface{}); ok && len(v) > 0 {
config.JupyterServerAppSettings = expandDomainJupyterServerAppSettings(v)
}
Expand All @@ -2344,6 +2433,10 @@ func flattenDefaultSpaceSettings(config *sagemaker.DefaultSpaceSettings) []map[s
m["execution_role"] = aws.StringValue(config.ExecutionRole)
}

if config.JupyterLabAppSettings != nil {
m["jupyter_lab_app_settings"] = flattenDomainJupyterLabAppSettings(config.JupyterLabAppSettings)
}

if config.JupyterServerAppSettings != nil {
m["jupyter_server_app_settings"] = flattenDomainJupyterServerAppSettings(config.JupyterServerAppSettings)
}
Expand Down
67 changes: 67 additions & 0 deletions internal/service/sagemaker/domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,38 @@ func testAccDomain_codeEditorAppSettings_defaultResourceSpecAndCustomImage(t *te
})
}

func testAccDomain_spaceSettingsJupyterLabAppSettings(t *testing.T) {
ctx := acctest.Context(t)
var domain sagemaker.DescribeDomainOutput
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
resourceName := "aws_sagemaker_domain.test"

resource.Test(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, names.SageMakerServiceID),
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
CheckDestroy: testAccCheckDomainDestroy(ctx),
Steps: []resource.TestStep{
{
Config: testAccDomainConfig_defaultSpaceJupyterLabAppSettings(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckDomainExists(ctx, resourceName, &domain),
resource.TestCheckResourceAttr(resourceName, "default_space_settings.#", acctest.Ct1),
resource.TestCheckResourceAttr(resourceName, "default_space_settings.0.jupyter_lab_app_settings.#", acctest.Ct1),
resource.TestCheckResourceAttr(resourceName, "default_space_settings.0.jupyter_lab_app_settings.0.default_resource_spec.#", acctest.Ct1),
resource.TestCheckResourceAttr(resourceName, "default_space_settings.0.jupyter_lab_app_settings.0.default_resource_spec.0.instance_type", "ml.t3.micro"),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"retention_policy"},
},
},
})
}

func testAccDomain_jupyterLabAppSettings(t *testing.T) {
ctx := acctest.Context(t)
var domain sagemaker.DescribeDomainOutput
Expand Down Expand Up @@ -2015,6 +2047,41 @@ resource "aws_sagemaker_domain" "test" {
`, rName))
}

func testAccDomainConfig_defaultSpaceJupyterLabAppSettings(rName string) string {
return acctest.ConfigCompose(testAccDomainConfig_base(rName), fmt.Sprintf(`
resource "aws_sagemaker_domain" "test" {
domain_name = %[1]q
auth_mode = "IAM"
vpc_id = aws_vpc.test.id
subnet_ids = aws_subnet.test[*].id

default_user_settings {
execution_role = aws_iam_role.test.arn

jupyter_lab_app_settings {
default_resource_spec {
instance_type = "ml.t3.micro"
}
}
}

default_space_settings {
execution_role = aws_iam_role.test.arn

jupyter_lab_app_settings {
default_resource_spec {
instance_type = "ml.t3.micro"
}
}
}

retention_policy {
home_efs_file_system = "Delete"
}
}
`, rName))
}

func testAccDomainConfig_jupyterLabAppSettings(rName string) string {
return acctest.ConfigCompose(testAccDomainConfig_base(rName), fmt.Sprintf(`
resource "aws_sagemaker_domain" "test" {
Expand Down
1 change: 1 addition & 0 deletions internal/service/sagemaker/sagemaker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ func TestAccSageMaker_serial(t *testing.T) {
"codeEditorAppSettings": testAccDomain_codeEditorAppSettings,
"codeEditorAppSettings_customImage": testAccDomain_codeEditorAppSettings_customImage,
"codeEditorAppSettings_defaultResourceSpecAndCustomImage": testAccDomain_codeEditorAppSettings_defaultResourceSpecAndCustomImage,
"spaceSettingsJupyterLabAppSettings": testAccDomain_spaceSettingsJupyterLabAppSettings,
"jupyterLabAppSettings": testAccDomain_jupyterLabAppSettings,
"kms": testAccDomain_kms,
"securityGroup": testAccDomain_securityGroup,
Expand Down
1 change: 1 addition & 0 deletions website/docs/r/sagemaker_domain.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ The following arguments are optional:
### `default_space_settings` Block

* `execution_role` - (Required) The execution role for the space.
* `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.
* `security_groups` - (Optional) The security groups for the Amazon Virtual Private Cloud that the space uses for communication.
Expand Down
Loading