Skip to content

Commit

Permalink
Merge pull request #4 from qbeyond/feature/source_resource_id
Browse files Browse the repository at this point in the history
Support copy/restore disk
  • Loading branch information
QBY-EstebanValverde authored Aug 20, 2024
2 parents 05d7b2e + e7f4e2c commit d0bdc7e
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 7 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ and this module adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.

## [Unreleased]

## [1.3.0] - 2024-08-20

### Added
- To support Copy/Restore disk on managed disk.

### Changed
- Upgrade accelerated networking variable in network interfaces.

## [1.2.0] - 2024-08-02

### Added
Expand All @@ -20,6 +28,7 @@ and this module adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.

### Added
- Initial code that creates a VM

### Changed

### Removed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ resource "azurerm_subnet" "this" {
| <a name="input_virtual_machine_config"></a> [virtual\_machine\_config](#input\_virtual\_machine\_config) | <pre>hostname: Name of system hostname.<br> size: The size of the vm. Possible values can be seen here: https://learn.microsoft.com/en-us/azure/virtual-machines/sizes<br> location: The location of the virtual machine.<br> os_sku: (Required) The os that will be running on the vm.<br> os_offer: (Required) Specifies the offer of the image used to create the virtual machines. Changing this forces a new resource to be created.<br> os_version: (Required) Optionally specify an os version for the chosen sku.<br> os_publisher: (Required) Specifies the Publisher of the Marketplace Image this Virtual Machine should be created from. Changing this forces a new resource to be created.<br> os_disk_caching: Optionally change the caching option of the os disk. Defaults to ReadWrite.<br> os_disk_size_gb: Optionally change the size of the os disk. Defaults to be specified by image.<br> os_disk_storage_type: Optionally change the os_disk_storage_type. Defaults to StandardSSD_LRS.<br> zone: Optionally specify an availibility zone for the vm. Values 1, 2 or 3.<br> availability_set_id: Optionally specify an availibility set for the vm. Not compatible with zone.<br> os_disk_write_accelerator_enabled: Optionally activate write accelaration for the os disk. Can only<br> be activated on Premium disks and caching deactivated. Defaults to false.<br> proximity_placement_group_id: (Optional) The ID of the Proximity Placement Group which the Virtual Machine should be assigned to.<br> severity_group: (Required) Sets tag 'Severity Group Monthly' to a specific time and date when an update will be done automatically.<br> update_allowed: Sets tag 'Update allowed' to yes or no to specify if this VM should currently receive updates.</pre> | <pre>object({<br> hostname = string<br> size = string<br> location = string<br> os_sku = string<br> os_offer = string<br> os_version = string<br> os_publisher = string<br> os_disk_caching = optional(string, "ReadWrite")<br> os_disk_size_gb = optional(number)<br> os_disk_storage_type = optional(string, "Premium_LRS")<br> os_disk_write_accelerator_enabled = optional(bool, false)<br> zone = optional(number)<br> availability_set_id = optional(string)<br> proximity_placement_group_id = optional(string)<br> severity_group = string<br> update_allowed = optional(bool, true)<br> })</pre> | n/a | yes |
| <a name="input_additional_network_interface_ids"></a> [additional\_network\_interface\_ids](#input\_additional\_network\_interface\_ids) | List of ids for additional azurerm\_network\_interface. | `list(string)` | `[]` | no |
| <a name="input_admin_username"></a> [admin\_username](#input\_admin\_username) | Optionally choose the admin\_username of the vm. Defaults to loc\_sysadmin. | `string` | `"loc_sysadmin"` | no |
| <a name="input_data_disks"></a> [data\_disks](#input\_data\_disks) | <pre><logical name of the data disk> = {<br> lun: Number of the lun.<br> disk_size_gb: The size of the data disk.<br> storage_account_type: Optionally change the storage_account_type. Defaults to StandardSSD_LRS.<br> caching: Optionally activate disk caching. Defaults to None.<br> create_option: Optionally change the create option. Defaults to Empty disk.<br> write_accelerator_enabled: Optionally activate write accelaration for the data disk. Can only<br> be activated on Premium disks and caching deactivated. Defaults to false.<br> on_demand_bursting_enabled: Optionally activate disk bursting. Only for Premium disk. Default false.<br> }</pre> | <pre>map(object({<br> lun = number<br> disk_size_gb = number<br> caching = optional(string, "ReadWrite")<br> create_option = optional(string, "Empty")<br> storage_account_type = optional(string, "Premium_LRS")<br> write_accelerator_enabled = optional(bool, false)<br> on_demand_bursting_enabled = optional(bool, false)<br> }))</pre> | `{}` | no |
| <a name="input_data_disks"></a> [data\_disks](#input\_data\_disks) | <pre><logical name of the data disk> = {<br> lun: Number of the lun.<br> disk_size_gb: The size of the data disk.<br> storage_account_type: Optionally change the storage_account_type. Defaults to StandardSSD_LRS.<br> caching: Optionally activate disk caching. Defaults to None.<br> create_option: Optionally change the create option. Defaults to Empty disk.<br> source_resource_id: (Optional) The ID of an existing Managed Disk or Snapshot to copy when create_option is Copy or<br> the recovery point to restore when create_option is Restore. Changing this forces a new resource to be created.<br> write_accelerator_enabled: Optionally activate write accelaration for the data disk. Can only<br> be activated on Premium disks and caching deactivated. Defaults to false.<br> on_demand_bursting_enabled: Optionally activate disk bursting. Only for Premium disk. Default false.<br> }</pre> | <pre>map(object({<br> lun = number<br> disk_size_gb = number<br> caching = optional(string, "ReadWrite")<br> create_option = optional(string, "Empty")<br> source_resource_id = optional(string)<br> storage_account_type = optional(string, "Premium_LRS")<br> write_accelerator_enabled = optional(bool, false)<br> on_demand_bursting_enabled = optional(bool, false)<br> }))</pre> | `{}` | no |
| <a name="input_name_overrides"></a> [name\_overrides](#input\_name\_overrides) | Possibility to override names that will be generated according to q.beyond naming convention. | <pre>object({<br> nic = optional(string)<br> nic_ip_config = optional(string)<br> public_ip = optional(string)<br> virtual_machine = optional(string)<br> os_disk = optional(string)<br> data_disks = optional(map(string), {})<br> })</pre> | `{}` | no |
| <a name="input_nic_config"></a> [nic\_config](#input\_nic\_config) | <pre>private_ip: Optioanlly specify a private ip to use. Otherwise it will be allocated dynamically.<br> dns_servers: Optionally specify a list of dns servers for the nic.<br> enable_accelerated_networking: Enabled Accelerated networking (SR-IOV) on the NIC. The machine SKU must support this feature.<br> nsg: Although it is discouraged you can optionally assign an NSG to the NIC. Optionally specify a NSG object.</pre> | <pre>object({<br> private_ip = optional(string)<br> dns_servers = optional(list(string))<br> enable_accelerated_networking = optional(bool, false)<br> nsg = optional(object({<br> id = string<br> }))<br> })</pre> | `{}` | no |
| <a name="input_public_ip_config"></a> [public\_ip\_config](#input\_public\_ip\_config) | <pre>allocation_method: The allocation method of the public ip that will be created. Defaults to static.<br> stage: The stage of this PIP. Ex: prd, dev, tst, ...</pre> | <pre>object({<br> allocation_method = optional(string, "Static")<br> stage = string<br> })</pre> | `null` | no |
Expand Down
1 change: 1 addition & 0 deletions data_disk.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ resource "azurerm_managed_disk" "data_disk" {
zone = var.virtual_machine_config.zone
storage_account_type = each.value["storage_account_type"]
create_option = each.value["create_option"]
source_resource_id = each.value["source_resource_id"]
disk_size_gb = each.value["disk_size_gb"]
on_demand_bursting_enabled = each.value["on_demand_bursting_enabled"]
tags = var.tags
Expand Down
12 changes: 6 additions & 6 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ resource "azurerm_public_ip" "this" {
}

resource "azurerm_network_interface" "this" {
name = local.nic.name
location = var.virtual_machine_config.location
resource_group_name = var.resource_group_name
dns_servers = var.nic_config.dns_servers
enable_accelerated_networking = var.nic_config.enable_accelerated_networking
tags = var.tags
name = local.nic.name
location = var.virtual_machine_config.location
resource_group_name = var.resource_group_name
dns_servers = var.nic_config.dns_servers
accelerated_networking_enabled = var.nic_config.enable_accelerated_networking
tags = var.tags

ip_configuration {
name = local.nic.ip_config_name
Expand Down
9 changes: 9 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ variable "data_disks" {
disk_size_gb = number
caching = optional(string, "ReadWrite")
create_option = optional(string, "Empty")
source_resource_id = optional(string)
storage_account_type = optional(string, "Premium_LRS")
write_accelerator_enabled = optional(bool, false)
on_demand_bursting_enabled = optional(bool, false)
Expand Down Expand Up @@ -182,6 +183,12 @@ variable "data_disks" {
condition = alltrue([for k, v in var.data_disks : !strcontains(k, "-")])
error_message = "Logical Name can't contain a '-'"
}
validation {
condition = alltrue([for o in var.data_disks : (
(o.source_resource_id != null && contains(["Copy", "Restore"], o.create_option) || (o.create_option == "Empty" && o.source_resource_id == null))
)])
error_message = "When a data disk source resource ID is specified then create option must be either 'Copy' or 'Restore'."
}

default = {}
nullable = false
Expand All @@ -193,6 +200,8 @@ variable "data_disks" {
storage_account_type: Optionally change the storage_account_type. Defaults to StandardSSD_LRS.
caching: Optionally activate disk caching. Defaults to None.
create_option: Optionally change the create option. Defaults to Empty disk.
source_resource_id: (Optional) The ID of an existing Managed Disk or Snapshot to copy when create_option is Copy or
the recovery point to restore when create_option is Restore. Changing this forces a new resource to be created.
write_accelerator_enabled: Optionally activate write accelaration for the data disk. Can only
be activated on Premium disks and caching deactivated. Defaults to false.
on_demand_bursting_enabled: Optionally activate disk bursting. Only for Premium disk. Default false.
Expand Down

0 comments on commit d0bdc7e

Please sign in to comment.