Skip to content

Commit 12ec1ed

Browse files
committed
feat(asg): launch template block device mappings configuration
1 parent 6251ae7 commit 12ec1ed

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ No resources.
4141
| <a name="input_asg_iam_role_policy_attachments"></a> [asg\_iam\_role\_policy\_attachments](#input\_asg\_iam\_role\_policy\_attachments) | (Required) - The ARN of the policy you want to apply | `list(string)` | <pre>[<br> "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"<br>]</pre> | no |
4242
| <a name="input_asg_iam_role_tags"></a> [asg\_iam\_role\_tags](#input\_asg\_iam\_role\_tags) | Key-value mapping of tags for the IAM role. | `map(string)` | `{}` | no |
4343
| <a name="input_asg_instances_tags"></a> [asg\_instances\_tags](#input\_asg\_instances\_tags) | Resources Tags to propagate to the Instances | `map(string)` | `{}` | no |
44-
| <a name="input_asg_launch_template"></a> [asg\_launch\_template](#input\_asg\_launch\_template) | Launch Template to use with the Autoscaling group | <pre>object({<br> name = optional(string, null)<br> image_id = optional(string, null)<br> instance_type = optional(string, null)<br> vpc_security_group_ids = optional(list(string), [])<br> key_name = optional(string, null)<br> user_data = optional(string, null)<br> tags = optional(map(string), {})<br> })</pre> | `{}` | no |
44+
| <a name="input_asg_launch_template"></a> [asg\_launch\_template](#input\_asg\_launch\_template) | Launch Template to use with the Autoscaling group | <pre>object({<br> name = optional(string, null)<br> block_device_mappings = optional(list(object({<br> device_name = string<br> ebs = optional(object({<br> delete_on_termination = optional(bool, null)<br> encrypted = optional(any, null)<br> iops = optional(any, null)<br> kms_key_id = optional(string, null)<br> snapshot_id = optional(string, null)<br> throughput = optional(any, null)<br> volume_size = optional(number, null)<br> volume_type = optional(string, null)<br> }))<br> no_device = optional(any, null)<br> virtual_name = optional(string, null)<br> })), [])<br> image_id = optional(string, null)<br> instance_type = optional(string, null)<br> vpc_security_group_ids = optional(list(string), [])<br> key_name = optional(string, null)<br> user_data = optional(string, null)<br> tags = optional(map(string), {})<br> })</pre> | `{}` | no |
4545
| <a name="input_asg_launch_template_id"></a> [asg\_launch\_template\_id](#input\_asg\_launch\_template\_id) | Identifier of the Launch Template | `string` | `null` | no |
4646
| <a name="input_asg_max_size"></a> [asg\_max\_size](#input\_asg\_max\_size) | Maximum size of the Auto Scaling Group | `number` | n/a | yes |
4747
| <a name="input_asg_min_size"></a> [asg\_min\_size](#input\_asg\_min\_size) | Minimum size of the Auto Scaling Group | `number` | n/a | yes |

modules/asg/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ No modules.
4242
| <a name="input_iam_role_policy_attachments"></a> [iam\_role\_policy\_attachments](#input\_iam\_role\_policy\_attachments) | (Required) - The ARN of the policy you want to apply | `list(string)` | <pre>[<br> "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"<br>]</pre> | no |
4343
| <a name="input_iam_role_tags"></a> [iam\_role\_tags](#input\_iam\_role\_tags) | Key-value mapping of tags for the IAM role. | `map(any)` | `{}` | no |
4444
| <a name="input_instances_tags"></a> [instances\_tags](#input\_instances\_tags) | Resources Tags to propagate to the Instances | `map(any)` | `{}` | no |
45-
| <a name="input_launch_template"></a> [launch\_template](#input\_launch\_template) | Launch Template to use with the Autoscaling group | <pre>object({<br> name = optional(string, null)<br> image_id = optional(string, null)<br> instance_type = optional(string, null)<br> vpc_security_group_ids = optional(list(string), [])<br> key_name = optional(string, null)<br> user_data = optional(string, null)<br> tags = optional(map(any), {})<br> })</pre> | `{}` | no |
45+
| <a name="input_launch_template"></a> [launch\_template](#input\_launch\_template) | Launch Template to use with the Autoscaling group | <pre>object({<br> name = optional(string, null)<br> block_device_mappings = optional(list(object({<br> device_name = string<br> ebs = optional(object({<br> delete_on_termination = optional(bool, null)<br> encrypted = optional(any, null)<br> iops = optional(any, null)<br> kms_key_id = optional(string, null)<br> snapshot_id = optional(string, null)<br> throughput = optional(any, null)<br> volume_size = optional(number, null)<br> volume_type = optional(string, null)<br> }))<br> no_device = optional(any, null)<br> virtual_name = optional(string, null)<br> })), [])<br> image_id = optional(string, null)<br> instance_type = optional(string, null)<br> vpc_security_group_ids = optional(list(string), [])<br> key_name = optional(string, null)<br> user_data = optional(string, null)<br> tags = optional(map(any), {})<br> })</pre> | `{}` | no |
4646
| <a name="input_launch_template_id"></a> [launch\_template\_id](#input\_launch\_template\_id) | Identifier of the Launch Template | `string` | `null` | no |
4747
| <a name="input_max_size"></a> [max\_size](#input\_max\_size) | Maximum size of the Auto Scaling Group | `number` | n/a | yes |
4848
| <a name="input_min_size"></a> [min\_size](#input\_min\_size) | Minimum size of the Auto Scaling Group | `number` | n/a | yes |

modules/asg/main.tf

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,32 @@ resource "aws_launch_template" "this" {
4949
vpc_security_group_ids = var.launch_template.vpc_security_group_ids
5050
key_name = var.launch_template.key_name
5151

52+
dynamic "block_device_mappings" {
53+
for_each = try(var.launch_template.block_device_mappings, [])
54+
iterator = block_device_mappings
55+
56+
content {
57+
device_name = block_device_mappings.value.device_name
58+
no_device = block_device_mappings.value.no_device
59+
virtual_name = block_device_mappings.value.virtual_name
60+
61+
dynamic "ebs" {
62+
for_each = try(block_device_mappings.value.ebs, null) != null ? [1] : []
63+
64+
content {
65+
delete_on_termination = block_device_mappings.value.ebs.delete_on_termination
66+
encrypted = block_device_mappings.value.ebs.encrypted
67+
iops = block_device_mappings.value.ebs.iops
68+
kms_key_id = block_device_mappings.value.ebs.kms_key_id
69+
snapshot_id = block_device_mappings.value.ebs.snapshot_id
70+
throughput = block_device_mappings.value.ebs.throughput
71+
volume_size = block_device_mappings.value.ebs.volume_size
72+
volume_type = block_device_mappings.value.ebs.volume_type
73+
}
74+
}
75+
}
76+
}
77+
5278
iam_instance_profile {
5379
name = aws_iam_instance_profile.this.name
5480
}

modules/asg/variables.tf

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,22 @@ variable "tags" {
4747
variable "launch_template" {
4848
description = "Launch Template to use with the Autoscaling group"
4949
type = object({
50-
name = optional(string, null)
50+
name = optional(string, null)
51+
block_device_mappings = optional(list(object({
52+
device_name = string
53+
ebs = optional(object({
54+
delete_on_termination = optional(bool, null)
55+
encrypted = optional(any, null)
56+
iops = optional(any, null)
57+
kms_key_id = optional(string, null)
58+
snapshot_id = optional(string, null)
59+
throughput = optional(any, null)
60+
volume_size = optional(number, null)
61+
volume_type = optional(string, null)
62+
}))
63+
no_device = optional(any, null)
64+
virtual_name = optional(string, null)
65+
})), [])
5166
image_id = optional(string, null)
5267
instance_type = optional(string, null)
5368
vpc_security_group_ids = optional(list(string), [])

variables.tf

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,22 @@ variable "asg_tags" {
8686
variable "asg_launch_template" {
8787
description = "Launch Template to use with the Autoscaling group"
8888
type = object({
89-
name = optional(string, null)
89+
name = optional(string, null)
90+
block_device_mappings = optional(list(object({
91+
device_name = string
92+
ebs = optional(object({
93+
delete_on_termination = optional(bool, null)
94+
encrypted = optional(any, null)
95+
iops = optional(any, null)
96+
kms_key_id = optional(string, null)
97+
snapshot_id = optional(string, null)
98+
throughput = optional(any, null)
99+
volume_size = optional(number, null)
100+
volume_type = optional(string, null)
101+
}))
102+
no_device = optional(any, null)
103+
virtual_name = optional(string, null)
104+
})), [])
90105
image_id = optional(string, null)
91106
instance_type = optional(string, null)
92107
vpc_security_group_ids = optional(list(string), [])

0 commit comments

Comments
 (0)