Skip to content

Commit

Permalink
feat: Support Private DNS name options (#370)
Browse files Browse the repository at this point in the history
Co-authored-by: Bryant Biggs <[email protected]>
  • Loading branch information
angryhamsterx and bryantbiggs authored Dec 25, 2023
1 parent 6c13542 commit d3520fd
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 32 deletions.
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.83.0
rev: v1.86.0
hooks:
- id: terraform_fmt
- id: terraform_wrapper_module_for_each
Expand All @@ -24,7 +24,7 @@ repos:
- '--args=--only=terraform_standard_module_structure'
- '--args=--only=terraform_workspace_remote'
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.5.0
hooks:
- id: check-merge-conflict
- id: end-of-file-fixer
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ No modules.
| <a name="input_name"></a> [name](#input\_name) | Name to be used on EC2 instance created | `string` | `""` | no |
| <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 |
| <a name="input_placement_group"></a> [placement\_group](#input\_placement\_group) | The Placement Group to start the instance in | `string` | `null` | no |
| <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 |
| <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 |
| <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 |
| <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 |
Expand Down
20 changes: 20 additions & 0 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,16 @@ resource "aws_instance" "this" {
}
}

dynamic "private_dns_name_options" {
for_each = length(var.private_dns_name_options) > 0 ? [var.private_dns_name_options] : []

content {
hostname_type = try(private_dns_name_options.value.hostname_type, null)
enable_resource_name_dns_a_record = try(private_dns_name_options.value.enable_resource_name_dns_a_record, null)
enable_resource_name_dns_aaaa_record = try(private_dns_name_options.value.enable_resource_name_dns_aaaa_record, null)
}
}

dynamic "launch_template" {
for_each = length(var.launch_template) > 0 ? [var.launch_template] : []

Expand Down Expand Up @@ -306,6 +316,16 @@ resource "aws_instance" "ignore_ami" {
}
}

dynamic "private_dns_name_options" {
for_each = length(var.private_dns_name_options) > 0 ? [var.private_dns_name_options] : []

content {
hostname_type = try(private_dns_name_options.value.hostname_type, null)
enable_resource_name_dns_a_record = try(private_dns_name_options.value.enable_resource_name_dns_a_record, null)
enable_resource_name_dns_aaaa_record = try(private_dns_name_options.value.enable_resource_name_dns_aaaa_record, null)
}
}

dynamic "launch_template" {
for_each = length(var.launch_template) > 0 ? [var.launch_template] : []

Expand Down
6 changes: 6 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,12 @@ variable "network_interface" {
default = []
}

variable "private_dns_name_options" {
description = "Customize the private DNS name options of the instance"
type = map(string)
default = {}
}

variable "placement_group" {
description = "The Placement Group to start the instance in"
type = string
Expand Down
61 changes: 31 additions & 30 deletions wrappers/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,74 +3,75 @@ module "wrapper" {

for_each = var.items

create = try(each.value.create, var.defaults.create, true)
name = try(each.value.name, var.defaults.name, "")
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")
ami = try(each.value.ami, var.defaults.ami, null)
ignore_ami_changes = try(each.value.ignore_ami_changes, var.defaults.ignore_ami_changes, false)
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")
associate_public_ip_address = try(each.value.associate_public_ip_address, var.defaults.associate_public_ip_address, null)
maintenance_options = try(each.value.maintenance_options, var.defaults.maintenance_options, {})
availability_zone = try(each.value.availability_zone, var.defaults.availability_zone, null)
capacity_reservation_specification = try(each.value.capacity_reservation_specification, var.defaults.capacity_reservation_specification, {})
cpu_core_count = try(each.value.cpu_core_count, var.defaults.cpu_core_count, null)
cpu_credits = try(each.value.cpu_credits, var.defaults.cpu_credits, null)
cpu_options = try(each.value.cpu_options, var.defaults.cpu_options, {})
cpu_threads_per_core = try(each.value.cpu_threads_per_core, var.defaults.cpu_threads_per_core, null)
create = try(each.value.create, var.defaults.create, true)
create_iam_instance_profile = try(each.value.create_iam_instance_profile, var.defaults.create_iam_instance_profile, false)
create_spot_instance = try(each.value.create_spot_instance, var.defaults.create_spot_instance, false)
disable_api_stop = try(each.value.disable_api_stop, var.defaults.disable_api_stop, null)
disable_api_termination = try(each.value.disable_api_termination, var.defaults.disable_api_termination, null)
ebs_block_device = try(each.value.ebs_block_device, var.defaults.ebs_block_device, [])
ebs_optimized = try(each.value.ebs_optimized, var.defaults.ebs_optimized, null)
enable_volume_tags = try(each.value.enable_volume_tags, var.defaults.enable_volume_tags, true)
enclave_options_enabled = try(each.value.enclave_options_enabled, var.defaults.enclave_options_enabled, null)
ephemeral_block_device = try(each.value.ephemeral_block_device, var.defaults.ephemeral_block_device, [])
get_password_data = try(each.value.get_password_data, var.defaults.get_password_data, null)
hibernation = try(each.value.hibernation, var.defaults.hibernation, null)
host_id = try(each.value.host_id, var.defaults.host_id, null)
iam_instance_profile = try(each.value.iam_instance_profile, var.defaults.iam_instance_profile, null)
iam_role_description = try(each.value.iam_role_description, var.defaults.iam_role_description, null)
iam_role_name = try(each.value.iam_role_name, var.defaults.iam_role_name, null)
iam_role_path = try(each.value.iam_role_path, var.defaults.iam_role_path, null)
iam_role_permissions_boundary = try(each.value.iam_role_permissions_boundary, var.defaults.iam_role_permissions_boundary, null)
iam_role_policies = try(each.value.iam_role_policies, var.defaults.iam_role_policies, {})
iam_role_tags = try(each.value.iam_role_tags, var.defaults.iam_role_tags, {})
iam_role_use_name_prefix = try(each.value.iam_role_use_name_prefix, var.defaults.iam_role_use_name_prefix, true)
ignore_ami_changes = try(each.value.ignore_ami_changes, var.defaults.ignore_ami_changes, false)
instance_initiated_shutdown_behavior = try(each.value.instance_initiated_shutdown_behavior, var.defaults.instance_initiated_shutdown_behavior, null)
instance_type = try(each.value.instance_type, var.defaults.instance_type, "t3.micro")
instance_tags = try(each.value.instance_tags, var.defaults.instance_tags, {})
instance_type = try(each.value.instance_type, var.defaults.instance_type, "t3.micro")
ipv6_address_count = try(each.value.ipv6_address_count, var.defaults.ipv6_address_count, null)
ipv6_addresses = try(each.value.ipv6_addresses, var.defaults.ipv6_addresses, null)
key_name = try(each.value.key_name, var.defaults.key_name, null)
launch_template = try(each.value.launch_template, var.defaults.launch_template, {})
maintenance_options = try(each.value.maintenance_options, var.defaults.maintenance_options, {})
metadata_options = try(each.value.metadata_options, var.defaults.metadata_options, {
"http_endpoint" = "enabled"
"http_put_response_hop_limit" = 1
"http_tokens" = "optional"
})
monitoring = try(each.value.monitoring, var.defaults.monitoring, null)
name = try(each.value.name, var.defaults.name, "")
network_interface = try(each.value.network_interface, var.defaults.network_interface, [])
placement_group = try(each.value.placement_group, var.defaults.placement_group, null)
private_dns_name_options = try(each.value.private_dns_name_options, var.defaults.private_dns_name_options, {})
private_ip = try(each.value.private_ip, var.defaults.private_ip, null)
putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true)
root_block_device = try(each.value.root_block_device, var.defaults.root_block_device, [])
secondary_private_ips = try(each.value.secondary_private_ips, var.defaults.secondary_private_ips, null)
source_dest_check = try(each.value.source_dest_check, var.defaults.source_dest_check, null)
spot_block_duration_minutes = try(each.value.spot_block_duration_minutes, var.defaults.spot_block_duration_minutes, null)
spot_instance_interruption_behavior = try(each.value.spot_instance_interruption_behavior, var.defaults.spot_instance_interruption_behavior, null)
spot_launch_group = try(each.value.spot_launch_group, var.defaults.spot_launch_group, null)
spot_price = try(each.value.spot_price, var.defaults.spot_price, null)
spot_type = try(each.value.spot_type, var.defaults.spot_type, null)
spot_valid_from = try(each.value.spot_valid_from, var.defaults.spot_valid_from, null)
spot_valid_until = try(each.value.spot_valid_until, var.defaults.spot_valid_until, null)
spot_wait_for_fulfillment = try(each.value.spot_wait_for_fulfillment, var.defaults.spot_wait_for_fulfillment, null)
subnet_id = try(each.value.subnet_id, var.defaults.subnet_id, null)
tags = try(each.value.tags, var.defaults.tags, {})
tenancy = try(each.value.tenancy, var.defaults.tenancy, null)
timeouts = try(each.value.timeouts, var.defaults.timeouts, {})
user_data = try(each.value.user_data, var.defaults.user_data, null)
user_data_base64 = try(each.value.user_data_base64, var.defaults.user_data_base64, null)
user_data_replace_on_change = try(each.value.user_data_replace_on_change, var.defaults.user_data_replace_on_change, null)
volume_tags = try(each.value.volume_tags, var.defaults.volume_tags, {})
enable_volume_tags = try(each.value.enable_volume_tags, var.defaults.enable_volume_tags, true)
vpc_security_group_ids = try(each.value.vpc_security_group_ids, var.defaults.vpc_security_group_ids, null)
timeouts = try(each.value.timeouts, var.defaults.timeouts, {})
cpu_options = try(each.value.cpu_options, var.defaults.cpu_options, {})
cpu_core_count = try(each.value.cpu_core_count, var.defaults.cpu_core_count, null)
cpu_threads_per_core = try(each.value.cpu_threads_per_core, var.defaults.cpu_threads_per_core, null)
create_spot_instance = try(each.value.create_spot_instance, var.defaults.create_spot_instance, false)
spot_price = try(each.value.spot_price, var.defaults.spot_price, null)
spot_wait_for_fulfillment = try(each.value.spot_wait_for_fulfillment, var.defaults.spot_wait_for_fulfillment, null)
spot_type = try(each.value.spot_type, var.defaults.spot_type, null)
spot_launch_group = try(each.value.spot_launch_group, var.defaults.spot_launch_group, null)
spot_block_duration_minutes = try(each.value.spot_block_duration_minutes, var.defaults.spot_block_duration_minutes, null)
spot_instance_interruption_behavior = try(each.value.spot_instance_interruption_behavior, var.defaults.spot_instance_interruption_behavior, null)
spot_valid_until = try(each.value.spot_valid_until, var.defaults.spot_valid_until, null)
spot_valid_from = try(each.value.spot_valid_from, var.defaults.spot_valid_from, null)
disable_api_stop = try(each.value.disable_api_stop, var.defaults.disable_api_stop, null)
putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true)
create_iam_instance_profile = try(each.value.create_iam_instance_profile, var.defaults.create_iam_instance_profile, false)
iam_role_name = try(each.value.iam_role_name, var.defaults.iam_role_name, null)
iam_role_use_name_prefix = try(each.value.iam_role_use_name_prefix, var.defaults.iam_role_use_name_prefix, true)
iam_role_path = try(each.value.iam_role_path, var.defaults.iam_role_path, null)
iam_role_description = try(each.value.iam_role_description, var.defaults.iam_role_description, null)
iam_role_permissions_boundary = try(each.value.iam_role_permissions_boundary, var.defaults.iam_role_permissions_boundary, null)
iam_role_policies = try(each.value.iam_role_policies, var.defaults.iam_role_policies, {})
iam_role_tags = try(each.value.iam_role_tags, var.defaults.iam_role_tags, {})
}

0 comments on commit d3520fd

Please sign in to comment.