diff --git a/internal/services/machinelearning/machine_learning_compute_cluster_resource.go b/internal/services/machinelearning/machine_learning_compute_cluster_resource.go index aaac3828f166..1fd86e283395 100644 --- a/internal/services/machinelearning/machine_learning_compute_cluster_resource.go +++ b/internal/services/machinelearning/machine_learning_compute_cluster_resource.go @@ -155,8 +155,10 @@ func resourceComputeCluster() *pluginsdk.Resource { }, "subnet_resource_id": { - Type: pluginsdk.TypeString, + Type: pluginsdk.TypeString, + // NOTE: O+C as you don't have to specify it for Azure to assign one to the cluster Optional: true, + Computed: true, ForceNew: true, }, @@ -211,28 +213,6 @@ func resourceComputeClusterCreate(d *pluginsdk.ResourceData, meta interface{}) e if !response.WasNotFound(existing.HttpResponse) { return tf.ImportAsExistsError("azurerm_machine_learning_compute_cluster", id.ID()) } - nodePublicIPEnabled, ok := d.Get("node_public_ip_enabled").(bool) - if !ok { - return fmt.Errorf("unable to assert type for `node_public_ip_enabled`") - } - - subnetResourceID, ok := d.Get("subnet_resource_id").(string) - if !ok { - return fmt.Errorf("unable to assert type for `subnet_resource_id`") - } - - workspaceInManagedVnet := false - - if workspaceModel.Properties != nil && - workspaceModel.Properties.ManagedNetwork != nil && - workspaceModel.Properties.ManagedNetwork.Status != nil && - workspaceModel.Properties.ManagedNetwork.Status.Status != nil { - workspaceInManagedVnet = *workspaceModel.Properties.ManagedNetwork.Status.Status == workspaces.ManagedNetworkStatusActive - } - - if !nodePublicIPEnabled && subnetResourceID == "" && !workspaceInManagedVnet { - return fmt.Errorf("`subnet_resource_id` must be set if `node_public_ip_enabled` is set to `false` or the workspace is not in a managed network") - } vmPriority := machinelearningcomputes.VMPriority(d.Get("vm_priority").(string)) computeClusterAmlComputeProperties := machinelearningcomputes.AmlComputeProperties{ diff --git a/internal/services/machinelearning/machine_learning_compute_cluster_resource_test.go b/internal/services/machinelearning/machine_learning_compute_cluster_resource_test.go index ad46d54b0757..08a19a83b3ee 100644 --- a/internal/services/machinelearning/machine_learning_compute_cluster_resource_test.go +++ b/internal/services/machinelearning/machine_learning_compute_cluster_resource_test.go @@ -65,6 +65,21 @@ func TestAccComputeCluster_complete(t *testing.T) { }) } +func TestAccComputeCluster_subnetResourceId(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_machine_learning_compute_cluster", "test") + r := ComputeClusterResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.noSubnetResourceId(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccComputeCluster_recreateVmSize(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_machine_learning_compute_cluster", "test") r := ComputeClusterResource{} @@ -235,6 +250,48 @@ resource "azurerm_machine_learning_compute_cluster" "test" { `, template, data.RandomIntOfLength(8)) } +func (r ComputeClusterResource) noSubnetResourceId(data acceptance.TestData) string { + template := r.template_complete(data) + return fmt.Sprintf(` +%s +variable "ssh_key" { + default = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqaZoyiz1qbdOQ8xEf6uEu1cCwYowo5FHtsBhqLoDnnp7KUTEBN+L2NxRIfQ781rxV6Iq5jSav6b2Q8z5KiseOlvKA/RF2wqU0UPYqQviQhLmW6THTpmrv/YkUCuzxDpsH7DUDhZcwySLKVVe0Qm3+5N2Ta6UYH3lsDf9R9wTP2K/+vAnflKebuypNlmocIvakFWoZda18FOmsOoIVXQ8HWFNCuw9ZCunMSN62QGamCe3dL5cXlkgHYv7ekJE15IA9aOJcM7e90oeTqo+7HTcWfdu0qQqPWY5ujyMw/llas8tsXY85LFqRnr3gJ02bAscjc477+X+j/gkpFoN1QEmt terraform@demo.tld" +} + +resource "azurerm_machine_learning_compute_cluster" "test" { + name = "CC-%d" + location = azurerm_resource_group.test.location + vm_priority = "LowPriority" + vm_size = "STANDARD_DS2_V2" + machine_learning_workspace_id = azurerm_machine_learning_workspace.test.id + node_public_ip_enabled = false + description = "Machine Learning" + tags = { + environment = "test" + } + scale_settings { + min_node_count = 0 + max_node_count = 1 + scale_down_nodes_after_idle_duration = "PT30S" # 30 seconds + } + + identity { + type = "SystemAssigned" + } + + ssh_public_access_enabled = false + ssh { + admin_username = "adminuser" + key_value = var.ssh_key + } + depends_on = [ + azurerm_subnet_network_security_group_association.test, + azurerm_private_endpoint.test, + ] +} +`, template, data.RandomIntOfLength(8)) +} + func (r ComputeClusterResource) recreateVmSize(data acceptance.TestData) string { template := r.template_basic(data) return fmt.Sprintf(` diff --git a/website/docs/r/machine_learning_compute_cluster.html.markdown b/website/docs/r/machine_learning_compute_cluster.html.markdown index 90f6e2eb2cdd..5753ff83d6f3 100644 --- a/website/docs/r/machine_learning_compute_cluster.html.markdown +++ b/website/docs/r/machine_learning_compute_cluster.html.markdown @@ -123,7 +123,7 @@ The following arguments are supported: * `local_auth_enabled` - (Optional) Whether local authentication methods is enabled. Defaults to `true`. Changing this forces a new Machine Learning Compute Cluster to be created. -* `node_public_ip_enabled` - (Optional) Whether the compute cluster will have a public ip. To set this to false a `subnet_resource_id` needs to be set. Defaults to `true`. Changing this forces a new Machine Learning Compute Cluster to be created. +* `node_public_ip_enabled` - (Optional) Whether the compute cluster will have a public ip. Defaults to `true`. Changing this forces a new Machine Learning Compute Cluster to be created. * `ssh_public_access_enabled` - (Optional) A boolean value indicating whether enable the public SSH port. Defaults to `false`. Changing this forces a new Machine Learning Compute Cluster to be created.