mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: unify azure-linux and azure-windows templates (#16039)
This commit is contained in:
@@ -31,11 +31,35 @@ This template provisions the following resources:
|
||||
|
||||
This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the VM image, or use a [startup script](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script). Alternatively, individual developers can [personalize](https://coder.com/docs/dotfiles) their workspaces with dotfiles.
|
||||
|
||||
> **Note**
|
||||
> [!NOTE]
|
||||
> This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.
|
||||
|
||||
## code-server
|
||||
|
||||
`code-server` is installed via the `startup_script` argument in the `coder_agent`
|
||||
resource block. The `coder_app` resource is defined to access `code-server` through
|
||||
the dashboard UI over `localhost:13337`.
|
||||
### Persistent VM
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This approach requires the [`az` CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install) to be present in the PATH of your Coder Provisioner.
|
||||
> You will have to do this installation manually as it is not included in our official images.
|
||||
|
||||
It is possible to make the VM persistent (instead of ephemeral) by removing the `count` attribute in the `azurerm_linux_virtual_machine` resource block as well as adding the following snippet:
|
||||
|
||||
```hcl
|
||||
# Stop the VM
|
||||
resource "null_resource" "stop_vm" {
|
||||
count = data.coder_workspace.me.transition == "stop" ? 1 : 0
|
||||
depends_on = [azurerm_linux_virtual_machine.main]
|
||||
provisioner "local-exec" {
|
||||
# Use deallocate so the VM is not charged
|
||||
command = "az vm deallocate --ids ${azurerm_linux_virtual_machine.main.id}"
|
||||
}
|
||||
}
|
||||
|
||||
# Start the VM
|
||||
resource "null_resource" "start" {
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
depends_on = [azurerm_linux_virtual_machine.main]
|
||||
provisioner "local-exec" {
|
||||
command = "az vm start --ids ${azurerm_linux_virtual_machine.main.id}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -264,7 +264,7 @@ resource "tls_private_key" "dummy" {
|
||||
}
|
||||
|
||||
resource "azurerm_linux_virtual_machine" "main" {
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
count = data.coder_workspace.me.start_count
|
||||
name = "vm"
|
||||
resource_group_name = azurerm_resource_group.main.name
|
||||
location = azurerm_resource_group.main.location
|
||||
|
||||
@@ -31,5 +31,34 @@ This template provisions the following resources:
|
||||
|
||||
This means, when the workspace restarts, any tools or files outside of the data directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the VM image, or use a [startup script](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script).
|
||||
|
||||
> **Note**
|
||||
> [!NOTE]
|
||||
> This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.
|
||||
|
||||
### Persistent VM
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This approach requires the [`az` CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install) to be present in the PATH of your Coder Provisioner.
|
||||
> You will have to do this installation manually as it is not included in our official images.
|
||||
|
||||
It is possible to make the VM persistent (instead of ephemeral) by removing the `count` attribute in the `azurerm_windows_virtual_machine` resource block as well as adding the following snippet:
|
||||
|
||||
```hcl
|
||||
# Stop the VM
|
||||
resource "null_resource" "stop_vm" {
|
||||
count = data.coder_workspace.me.transition == "stop" ? 1 : 0
|
||||
depends_on = [azurerm_windows_virtual_machine.main]
|
||||
provisioner "local-exec" {
|
||||
# Use deallocate so the VM is not charged
|
||||
command = "az vm deallocate --ids ${azurerm_windows_virtual_machine.main.id}"
|
||||
}
|
||||
}
|
||||
|
||||
# Start the VM
|
||||
resource "null_resource" "start" {
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
depends_on = [azurerm_windows_virtual_machine.main]
|
||||
provisioner "local-exec" {
|
||||
command = "az vm start --ids ${azurerm_windows_virtual_machine.main.id}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -151,6 +151,7 @@ resource "azurerm_managed_disk" "data" {
|
||||
|
||||
# Create virtual machine
|
||||
resource "azurerm_windows_virtual_machine" "main" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
name = "vm"
|
||||
admin_username = local.admin_username
|
||||
admin_password = random_password.admin_password.result
|
||||
@@ -189,7 +190,8 @@ resource "azurerm_windows_virtual_machine" "main" {
|
||||
}
|
||||
|
||||
resource "coder_metadata" "rdp_login" {
|
||||
resource_id = azurerm_windows_virtual_machine.main.id
|
||||
count = data.coder_workspace.me.start_count
|
||||
resource_id = azurerm_windows_virtual_machine.main[0].id
|
||||
item {
|
||||
key = "Username"
|
||||
value = local.admin_username
|
||||
@@ -202,27 +204,9 @@ resource "coder_metadata" "rdp_login" {
|
||||
}
|
||||
|
||||
resource "azurerm_virtual_machine_data_disk_attachment" "main_data" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
managed_disk_id = azurerm_managed_disk.data.id
|
||||
virtual_machine_id = azurerm_windows_virtual_machine.main.id
|
||||
virtual_machine_id = azurerm_windows_virtual_machine.main[0].id
|
||||
lun = "10"
|
||||
caching = "ReadWrite"
|
||||
}
|
||||
|
||||
# Stop the VM
|
||||
resource "null_resource" "stop_vm" {
|
||||
count = data.coder_workspace.me.transition == "stop" ? 1 : 0
|
||||
depends_on = [azurerm_windows_virtual_machine.main]
|
||||
provisioner "local-exec" {
|
||||
# Use deallocate so the VM is not charged
|
||||
command = "az vm deallocate --ids ${azurerm_windows_virtual_machine.main.id}"
|
||||
}
|
||||
}
|
||||
|
||||
# Start the VM
|
||||
resource "null_resource" "start" {
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
depends_on = [azurerm_windows_virtual_machine.main]
|
||||
provisioner "local-exec" {
|
||||
command = "az vm start --ids ${azurerm_windows_virtual_machine.main.id}"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user