Skip to content

Commit d3520fd

Browse files
feat: Support Private DNS name options (#370)
Co-authored-by: Bryant Biggs <bryantbiggs@gmail.com>
1 parent 6c13542 commit d3520fd

File tree

5 files changed

+60
-32
lines changed

5 files changed

+60
-32
lines changed

.pre-commit-config.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.83.0
3+
rev: v1.86.0
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_wrapper_module_for_each
@@ -24,7 +24,7 @@ repos:
2424
- '--args=--only=terraform_standard_module_structure'
2525
- '--args=--only=terraform_workspace_remote'
2626
- repo: https://github.com/pre-commit/pre-commit-hooks
27-
rev: v4.4.0
27+
rev: v4.5.0
2828
hooks:
2929
- id: check-merge-conflict
3030
- id: end-of-file-fixer

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ No modules.
237237
| <a name="input_name"></a> [name](#input\_name) | Name to be used on EC2 instance created | `string` | `""` | no |
238238
| <a name="input_network_interface"></a> [network\_interface](#input\_network\_interface) | Customize network interfaces to be attached at instance boot time | `list(map(string))` | `[]` | no |
239239
| <a name="input_placement_group"></a> [placement\_group](#input\_placement\_group) | The Placement Group to start the instance in | `string` | `null` | no |
240+
| <a name="input_private_dns_name_options"></a> [private\_dns\_name\_options](#input\_private\_dns\_name\_options) | Customize the private DNS name options of the instance | `map(string)` | `{}` | no |
240241
| <a name="input_private_ip"></a> [private\_ip](#input\_private\_ip) | Private IP address to associate with the instance in a VPC | `string` | `null` | no |
241242
| <a name="input_putin_khuylo"></a> [putin\_khuylo](#input\_putin\_khuylo) | Do you agree that Putin doesn't respect Ukrainian sovereignty and territorial integrity? More info: https://en.wikipedia.org/wiki/Putin_khuylo! | `bool` | `true` | no |
242243
| <a name="input_root_block_device"></a> [root\_block\_device](#input\_root\_block\_device) | Customize details about the root block device of the instance. See Block Devices below for details | `list(any)` | `[]` | no |

main.tf

+20
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,16 @@ resource "aws_instance" "this" {
138138
}
139139
}
140140

141+
dynamic "private_dns_name_options" {
142+
for_each = length(var.private_dns_name_options) > 0 ? [var.private_dns_name_options] : []
143+
144+
content {
145+
hostname_type = try(private_dns_name_options.value.hostname_type, null)
146+
enable_resource_name_dns_a_record = try(private_dns_name_options.value.enable_resource_name_dns_a_record, null)
147+
enable_resource_name_dns_aaaa_record = try(private_dns_name_options.value.enable_resource_name_dns_aaaa_record, null)
148+
}
149+
}
150+
141151
dynamic "launch_template" {
142152
for_each = length(var.launch_template) > 0 ? [var.launch_template] : []
143153

@@ -306,6 +316,16 @@ resource "aws_instance" "ignore_ami" {
306316
}
307317
}
308318

319+
dynamic "private_dns_name_options" {
320+
for_each = length(var.private_dns_name_options) > 0 ? [var.private_dns_name_options] : []
321+
322+
content {
323+
hostname_type = try(private_dns_name_options.value.hostname_type, null)
324+
enable_resource_name_dns_a_record = try(private_dns_name_options.value.enable_resource_name_dns_a_record, null)
325+
enable_resource_name_dns_aaaa_record = try(private_dns_name_options.value.enable_resource_name_dns_aaaa_record, null)
326+
}
327+
}
328+
309329
dynamic "launch_template" {
310330
for_each = length(var.launch_template) > 0 ? [var.launch_template] : []
311331

variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@ variable "network_interface" {
176176
default = []
177177
}
178178

179+
variable "private_dns_name_options" {
180+
description = "Customize the private DNS name options of the instance"
181+
type = map(string)
182+
default = {}
183+
}
184+
179185
variable "placement_group" {
180186
description = "The Placement Group to start the instance in"
181187
type = string

wrappers/main.tf

+31-30
Original file line numberDiff line numberDiff line change
@@ -3,74 +3,75 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
create = try(each.value.create, var.defaults.create, true)
7-
name = try(each.value.name, var.defaults.name, "")
8-
ami_ssm_parameter = try(each.value.ami_ssm_parameter, var.defaults.ami_ssm_parameter, "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2")
96
ami = try(each.value.ami, var.defaults.ami, null)
10-
ignore_ami_changes = try(each.value.ignore_ami_changes, var.defaults.ignore_ami_changes, false)
7+
ami_ssm_parameter = try(each.value.ami_ssm_parameter, var.defaults.ami_ssm_parameter, "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2")
118
associate_public_ip_address = try(each.value.associate_public_ip_address, var.defaults.associate_public_ip_address, null)
12-
maintenance_options = try(each.value.maintenance_options, var.defaults.maintenance_options, {})
139
availability_zone = try(each.value.availability_zone, var.defaults.availability_zone, null)
1410
capacity_reservation_specification = try(each.value.capacity_reservation_specification, var.defaults.capacity_reservation_specification, {})
11+
cpu_core_count = try(each.value.cpu_core_count, var.defaults.cpu_core_count, null)
1512
cpu_credits = try(each.value.cpu_credits, var.defaults.cpu_credits, null)
13+
cpu_options = try(each.value.cpu_options, var.defaults.cpu_options, {})
14+
cpu_threads_per_core = try(each.value.cpu_threads_per_core, var.defaults.cpu_threads_per_core, null)
15+
create = try(each.value.create, var.defaults.create, true)
16+
create_iam_instance_profile = try(each.value.create_iam_instance_profile, var.defaults.create_iam_instance_profile, false)
17+
create_spot_instance = try(each.value.create_spot_instance, var.defaults.create_spot_instance, false)
18+
disable_api_stop = try(each.value.disable_api_stop, var.defaults.disable_api_stop, null)
1619
disable_api_termination = try(each.value.disable_api_termination, var.defaults.disable_api_termination, null)
1720
ebs_block_device = try(each.value.ebs_block_device, var.defaults.ebs_block_device, [])
1821
ebs_optimized = try(each.value.ebs_optimized, var.defaults.ebs_optimized, null)
22+
enable_volume_tags = try(each.value.enable_volume_tags, var.defaults.enable_volume_tags, true)
1923
enclave_options_enabled = try(each.value.enclave_options_enabled, var.defaults.enclave_options_enabled, null)
2024
ephemeral_block_device = try(each.value.ephemeral_block_device, var.defaults.ephemeral_block_device, [])
2125
get_password_data = try(each.value.get_password_data, var.defaults.get_password_data, null)
2226
hibernation = try(each.value.hibernation, var.defaults.hibernation, null)
2327
host_id = try(each.value.host_id, var.defaults.host_id, null)
2428
iam_instance_profile = try(each.value.iam_instance_profile, var.defaults.iam_instance_profile, null)
29+
iam_role_description = try(each.value.iam_role_description, var.defaults.iam_role_description, null)
30+
iam_role_name = try(each.value.iam_role_name, var.defaults.iam_role_name, null)
31+
iam_role_path = try(each.value.iam_role_path, var.defaults.iam_role_path, null)
32+
iam_role_permissions_boundary = try(each.value.iam_role_permissions_boundary, var.defaults.iam_role_permissions_boundary, null)
33+
iam_role_policies = try(each.value.iam_role_policies, var.defaults.iam_role_policies, {})
34+
iam_role_tags = try(each.value.iam_role_tags, var.defaults.iam_role_tags, {})
35+
iam_role_use_name_prefix = try(each.value.iam_role_use_name_prefix, var.defaults.iam_role_use_name_prefix, true)
36+
ignore_ami_changes = try(each.value.ignore_ami_changes, var.defaults.ignore_ami_changes, false)
2537
instance_initiated_shutdown_behavior = try(each.value.instance_initiated_shutdown_behavior, var.defaults.instance_initiated_shutdown_behavior, null)
26-
instance_type = try(each.value.instance_type, var.defaults.instance_type, "t3.micro")
2738
instance_tags = try(each.value.instance_tags, var.defaults.instance_tags, {})
39+
instance_type = try(each.value.instance_type, var.defaults.instance_type, "t3.micro")
2840
ipv6_address_count = try(each.value.ipv6_address_count, var.defaults.ipv6_address_count, null)
2941
ipv6_addresses = try(each.value.ipv6_addresses, var.defaults.ipv6_addresses, null)
3042
key_name = try(each.value.key_name, var.defaults.key_name, null)
3143
launch_template = try(each.value.launch_template, var.defaults.launch_template, {})
44+
maintenance_options = try(each.value.maintenance_options, var.defaults.maintenance_options, {})
3245
metadata_options = try(each.value.metadata_options, var.defaults.metadata_options, {
3346
"http_endpoint" = "enabled"
3447
"http_put_response_hop_limit" = 1
3548
"http_tokens" = "optional"
3649
})
3750
monitoring = try(each.value.monitoring, var.defaults.monitoring, null)
51+
name = try(each.value.name, var.defaults.name, "")
3852
network_interface = try(each.value.network_interface, var.defaults.network_interface, [])
3953
placement_group = try(each.value.placement_group, var.defaults.placement_group, null)
54+
private_dns_name_options = try(each.value.private_dns_name_options, var.defaults.private_dns_name_options, {})
4055
private_ip = try(each.value.private_ip, var.defaults.private_ip, null)
56+
putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true)
4157
root_block_device = try(each.value.root_block_device, var.defaults.root_block_device, [])
4258
secondary_private_ips = try(each.value.secondary_private_ips, var.defaults.secondary_private_ips, null)
4359
source_dest_check = try(each.value.source_dest_check, var.defaults.source_dest_check, null)
60+
spot_block_duration_minutes = try(each.value.spot_block_duration_minutes, var.defaults.spot_block_duration_minutes, null)
61+
spot_instance_interruption_behavior = try(each.value.spot_instance_interruption_behavior, var.defaults.spot_instance_interruption_behavior, null)
62+
spot_launch_group = try(each.value.spot_launch_group, var.defaults.spot_launch_group, null)
63+
spot_price = try(each.value.spot_price, var.defaults.spot_price, null)
64+
spot_type = try(each.value.spot_type, var.defaults.spot_type, null)
65+
spot_valid_from = try(each.value.spot_valid_from, var.defaults.spot_valid_from, null)
66+
spot_valid_until = try(each.value.spot_valid_until, var.defaults.spot_valid_until, null)
67+
spot_wait_for_fulfillment = try(each.value.spot_wait_for_fulfillment, var.defaults.spot_wait_for_fulfillment, null)
4468
subnet_id = try(each.value.subnet_id, var.defaults.subnet_id, null)
4569
tags = try(each.value.tags, var.defaults.tags, {})
4670
tenancy = try(each.value.tenancy, var.defaults.tenancy, null)
71+
timeouts = try(each.value.timeouts, var.defaults.timeouts, {})
4772
user_data = try(each.value.user_data, var.defaults.user_data, null)
4873
user_data_base64 = try(each.value.user_data_base64, var.defaults.user_data_base64, null)
4974
user_data_replace_on_change = try(each.value.user_data_replace_on_change, var.defaults.user_data_replace_on_change, null)
5075
volume_tags = try(each.value.volume_tags, var.defaults.volume_tags, {})
51-
enable_volume_tags = try(each.value.enable_volume_tags, var.defaults.enable_volume_tags, true)
5276
vpc_security_group_ids = try(each.value.vpc_security_group_ids, var.defaults.vpc_security_group_ids, null)
53-
timeouts = try(each.value.timeouts, var.defaults.timeouts, {})
54-
cpu_options = try(each.value.cpu_options, var.defaults.cpu_options, {})
55-
cpu_core_count = try(each.value.cpu_core_count, var.defaults.cpu_core_count, null)
56-
cpu_threads_per_core = try(each.value.cpu_threads_per_core, var.defaults.cpu_threads_per_core, null)
57-
create_spot_instance = try(each.value.create_spot_instance, var.defaults.create_spot_instance, false)
58-
spot_price = try(each.value.spot_price, var.defaults.spot_price, null)
59-
spot_wait_for_fulfillment = try(each.value.spot_wait_for_fulfillment, var.defaults.spot_wait_for_fulfillment, null)
60-
spot_type = try(each.value.spot_type, var.defaults.spot_type, null)
61-
spot_launch_group = try(each.value.spot_launch_group, var.defaults.spot_launch_group, null)
62-
spot_block_duration_minutes = try(each.value.spot_block_duration_minutes, var.defaults.spot_block_duration_minutes, null)
63-
spot_instance_interruption_behavior = try(each.value.spot_instance_interruption_behavior, var.defaults.spot_instance_interruption_behavior, null)
64-
spot_valid_until = try(each.value.spot_valid_until, var.defaults.spot_valid_until, null)
65-
spot_valid_from = try(each.value.spot_valid_from, var.defaults.spot_valid_from, null)
66-
disable_api_stop = try(each.value.disable_api_stop, var.defaults.disable_api_stop, null)
67-
putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true)
68-
create_iam_instance_profile = try(each.value.create_iam_instance_profile, var.defaults.create_iam_instance_profile, false)
69-
iam_role_name = try(each.value.iam_role_name, var.defaults.iam_role_name, null)
70-
iam_role_use_name_prefix = try(each.value.iam_role_use_name_prefix, var.defaults.iam_role_use_name_prefix, true)
71-
iam_role_path = try(each.value.iam_role_path, var.defaults.iam_role_path, null)
72-
iam_role_description = try(each.value.iam_role_description, var.defaults.iam_role_description, null)
73-
iam_role_permissions_boundary = try(each.value.iam_role_permissions_boundary, var.defaults.iam_role_permissions_boundary, null)
74-
iam_role_policies = try(each.value.iam_role_policies, var.defaults.iam_role_policies, {})
75-
iam_role_tags = try(each.value.iam_role_tags, var.defaults.iam_role_tags, {})
7677
}

0 commit comments

Comments
 (0)