Skip to content

Commit

Permalink
azurerm_machine_learning_compute_cluster - subnet_resource_id doe…
Browse files Browse the repository at this point in the history
…s not have to be specified when `node_public_ip_enabled` is `false` (hashicorp#28673)

* azurerm_machine_learning_compute_cluster - subnet_resource_id does not have to be specified when node_public_ip_enabled is false

* Address review

* Fix O+C message

* address doc fix
  • Loading branch information
mbfrahry authored and hqhqhqhqhqhqhqhqhqhqhq committed Feb 26, 2025
1 parent 09a3da3 commit c3c2634
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},

Expand Down Expand Up @@ -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{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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{}
Expand Down Expand Up @@ -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 [email protected]"
}
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(`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down

0 comments on commit c3c2634

Please sign in to comment.