From cc19962b27cfcf74c91484f69ff9fe29ab4a8b88 Mon Sep 17 00:00:00 2001 From: Michael Filio Date: Wed, 18 May 2022 09:22:08 -0500 Subject: [PATCH] Remove deprecated null_data_source (#96) * Refactor to remove deprecated null_data_source resource * Update examples, README, test --- .circleci/config.yml | 4 +-- .terraform-version | 2 +- README.md | 40 +++++++++++------------ examples/custom_ami.tf | 27 +++++----------- examples/custom_cw_agent_config.tf | 10 +++--- examples/managed.tf | 6 ++-- examples/unmanaged.tf | 6 ++-- main.tf | 51 ++++++++++++++---------------- tests/test1/main.tf | 2 +- 9 files changed, 66 insertions(+), 82 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b37700f..544aa48 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,10 +44,10 @@ workflows: - test: filters: branches: - ignore: master + ignore: master - check_destruction: requires: - test filters: branches: - ignore: master + ignore: master diff --git a/.terraform-version b/.terraform-version index 9beb74d..5daaa7b 100644 --- a/.terraform-version +++ b/.terraform-version @@ -1 +1 @@ -0.13.2 +0.13.7 diff --git a/README.md b/README.md index 8094318..2625252 100644 --- a/README.md +++ b/README.md @@ -49,15 +49,14 @@ New variable `ssm_bootstrap_list` was added to allow setting the SSM association | Name | Version | |------|---------| -| terraform | >= 0.12 | -| aws | >= 2.7.0 | +| terraform | >= 0.13.7 | +| aws | ~> 3.0 | ## Providers | Name | Version | |------|---------| -| aws | >= 2.7.0 | -| null | n/a | +| aws | ~> 3.0 | ## Modules @@ -71,23 +70,22 @@ New variable `ssm_bootstrap_list` was added to allow setting the SSM association | Name | |------| -| [aws_ami](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/data-sources/ami) | -| [aws_caller_identity](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/data-sources/caller_identity) | -| [aws_cloudwatch_log_group](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/cloudwatch_log_group) | -| [aws_cloudwatch_metric_alarm](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/cloudwatch_metric_alarm) | -| [aws_eip_association](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/eip_association) | -| [aws_iam_instance_profile](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/iam_instance_profile) | -| [aws_iam_policy](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/iam_policy) | -| [aws_iam_policy_document](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/data-sources/iam_policy_document) | -| [aws_iam_role](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/iam_role) | -| [aws_iam_role_policy_attachment](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/iam_role_policy_attachment) | -| [aws_instance](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/instance) | -| [aws_region](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/data-sources/region) | -| [aws_route53_record](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/route53_record) | -| [aws_ssm_association](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/ssm_association) | -| [aws_ssm_document](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/ssm_document) | -| [aws_ssm_parameter](https://registry.terraform.io/providers/hashicorp/aws/2.7.0/docs/resources/ssm_parameter) | -| [null_data_source](https://registry.terraform.io/providers/hashicorp/null/latest/docs/data-sources/data_source) | +| [aws_ami](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/data-sources/ami) | +| [aws_caller_identity](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/data-sources/caller_identity) | +| [aws_cloudwatch_log_group](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/cloudwatch_log_group) | +| [aws_cloudwatch_metric_alarm](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/cloudwatch_metric_alarm) | +| [aws_eip_association](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/eip_association) | +| [aws_iam_instance_profile](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/iam_instance_profile) | +| [aws_iam_policy](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/iam_policy) | +| [aws_iam_policy_document](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/data-sources/iam_policy_document) | +| [aws_iam_role](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/iam_role) | +| [aws_iam_role_policy_attachment](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/iam_role_policy_attachment) | +| [aws_instance](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/instance) | +| [aws_region](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/data-sources/region) | +| [aws_route53_record](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/route53_record) | +| [aws_ssm_association](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/ssm_association) | +| [aws_ssm_document](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/ssm_document) | +| [aws_ssm_parameter](https://registry.terraform.io/providers/hashicorp/aws/3.0/docs/resources/ssm_parameter) | ## Inputs diff --git a/examples/custom_ami.tf b/examples/custom_ami.tf index 462f33b..ab4bdc5 100644 --- a/examples/custom_ami.tf +++ b/examples/custom_ami.tf @@ -1,10 +1,10 @@ provider "aws" { - version = "~> 2.7" + version = "~> 3.0" region = "us-west-2" } module "vpc" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.1" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.7" name = "EC2-AR-BaseNetwork-Test1" } @@ -12,36 +12,25 @@ module "vpc" { data "aws_region" "current_region" { } -data "aws_ami" "my_custom_ami" { - executable_users = ["self"] - most_recent = true - owners = ["self"] - - filter { - name = "name" - values = ["MyCustomAMI"] - } -} - -data "aws_ami" "community_ami" { +data "aws_ami" "centos7_marketplace" { + owners = ["aws-marketplace"] most_recent = true - owners = ["679593333241"] filter { - name = "name" - values = ["CentOS Linux 7 x86_64 HVM EBS*"] + name = "product-code" + values = ["cvugziknvmxgqna9noibqnnsy"] } } module "ec2_ar" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.10" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.26" backup_tag_value = "False" detailed_monitoring = true ec2_os = "centos7" enable_ebs_optimization = false encrypt_secondary_ebs_volume = false - image_id = data.aws_ami.community_ami.ami_id + image_id = data.aws_ami.centos7_marketplace.id install_codedeploy_agent = false instance_count = 3 instance_type = "t2.micro" diff --git a/examples/custom_cw_agent_config.tf b/examples/custom_cw_agent_config.tf index be2c855..e50307e 100644 --- a/examples/custom_cw_agent_config.tf +++ b/examples/custom_cw_agent_config.tf @@ -1,7 +1,7 @@ locals { cwagent_vars = { - application_log_group_name = "custom_app_log_group_name" - system_log_group_name = "custom_system_log_group_name" + application_log = "custom_app_log_group_name" + system_log = "custom_system_log_group_name" } } @@ -19,15 +19,15 @@ resource "random_string" "res_name" { } module "vpc" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.1" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.7" name = "EC2-AR-BaseNetwork-Test1" } module "ec2_ar_with_codedeploy" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.10" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.26" - ec2_os = "rhel6" + ec2_os = "amazon2" instance_count = 1 subnets = module.vpc.private_subnets diff --git a/examples/managed.tf b/examples/managed.tf index f13e67b..d00e7d0 100644 --- a/examples/managed.tf +++ b/examples/managed.tf @@ -1,10 +1,10 @@ provider "aws" { - version = "~> 2.7" + version = "~> 3.0" region = "us-west-2" } module "vpc" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.1" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.7" name = "EC2-AR-BaseNetwork-Test1" } @@ -13,7 +13,7 @@ data "aws_region" "current_region" { } module "ec2_ar" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.10" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.26" backup_tag_value = "False" detailed_monitoring = true diff --git a/examples/unmanaged.tf b/examples/unmanaged.tf index 35fe607..8f9f9bb 100644 --- a/examples/unmanaged.tf +++ b/examples/unmanaged.tf @@ -4,7 +4,7 @@ provider "aws" { } module "vpc" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.1" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.7" name = "EC2-AR-BaseNetwork-Test1" } @@ -13,13 +13,13 @@ data "aws_region" "current_region" { } module "sns" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-sns?ref=v0.12.1" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-sns?ref=v0.12.2" name = "my-alarm-notification-topic" } module "unmanaged_ar" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.10" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-ec2_autorecovery?ref=v0.12.26" ec2_os = "centos7" instance_count = 1 diff --git a/main.tf b/main.tf index 6e64275..1c4552f 100644 --- a/main.tf +++ b/main.tf @@ -55,10 +55,10 @@ locals { } terraform { - required_version = ">= 0.12" + required_version = ">= 0.13.7" required_providers { - aws = ">= 2.7.0" + aws = "~> 3.0" } } @@ -422,25 +422,22 @@ data "aws_iam_policy_document" "mod_ec2_instance_role_policies" { } -data "null_data_source" "instance_ips" { - count = var.instance_count - - inputs = { - private_ip = element( - coalescelist( - aws_instance.mod_ec2_instance_with_secondary_ebs.*.private_ip, - aws_instance.mod_ec2_instance_no_secondary_ebs.*.private_ip, +locals { + instance_ips = tolist([for n in range(var.instance_count) : + element(coalescelist( + aws_instance.mod_ec2_instance_with_secondary_ebs.*.private_ip, + aws_instance.mod_ec2_instance_no_secondary_ebs.*.private_ip, ), - count.index, + n ) - } + ]) } resource "aws_route53_record" "instance" { count = var.create_internal_route53 ? var.instance_count : 0 name = "${var.name}${var.instance_count > 1 ? format("-%03d.", count.index + 1) : "."}${var.internal_zone_name}" - records = [data.null_data_source.instance_ips[count.index].outputs["private_ip"]] + records = [local.instance_ips[count.index]] ttl = "300" type = "A" zone_id = var.internal_zone_id @@ -567,18 +564,18 @@ resource "aws_cloudwatch_log_group" "application_logs" { retention_in_days = var.cloudwatch_log_retention } -data "null_data_source" "alarm_dimensions" { - count = var.instance_count +locals { - inputs = { - InstanceId = element( - coalescelist( - aws_instance.mod_ec2_instance_with_secondary_ebs.*.id, - aws_instance.mod_ec2_instance_no_secondary_ebs.*.id, + instance_ids = [for n in range(var.instance_count) : + element(coalescelist( + aws_instance.mod_ec2_instance_with_secondary_ebs.*.id, + aws_instance.mod_ec2_instance_no_secondary_ebs.*.id, ), - count.index, + n ) - } + ] + + alarm_dimensions = tolist([for n in range(var.instance_count) : tomap({ "InstanceId" = tostring(local.instance_ids[n]) })]) } module "status_check_failed_system_alarm_ticket" { @@ -591,7 +588,7 @@ module "status_check_failed_system_alarm_ticket" { ["StatusCheckFailedSystemAlarmTicket", var.name], ) comparison_operator = "GreaterThanThreshold" - dimensions = data.null_data_source.alarm_dimensions.*.outputs + dimensions = local.alarm_dimensions[*] evaluation_periods = "2" notification_topic = [var.notification_topic] metric_name = "StatusCheckFailed_System" @@ -618,7 +615,7 @@ resource "aws_cloudwatch_metric_alarm" "status_check_failed_instance_alarm_reboo ], ) comparison_operator = "GreaterThanThreshold" - dimensions = data.null_data_source.alarm_dimensions[count.index].outputs + dimensions = local.alarm_dimensions[count.index] evaluation_periods = "5" metric_name = "StatusCheckFailed_Instance" namespace = "AWS/EC2" @@ -643,7 +640,7 @@ resource "aws_cloudwatch_metric_alarm" "status_check_failed_system_alarm_recover ], ) comparison_operator = "GreaterThanThreshold" - dimensions = data.null_data_source.alarm_dimensions[count.index].outputs + dimensions = local.alarm_dimensions[count.index] evaluation_periods = "2" metric_name = "StatusCheckFailed_System" namespace = "AWS/EC2" @@ -665,7 +662,7 @@ module "status_check_failed_instance_alarm_ticket" { ["StatusCheckFailedInstanceAlarmTicket", var.name], ) comparison_operator = "GreaterThanThreshold" - dimensions = data.null_data_source.alarm_dimensions.*.outputs + dimensions = local.alarm_dimensions[*] evaluation_periods = "10" metric_name = "StatusCheckFailed_Instance" notification_topic = [var.notification_topic] @@ -687,7 +684,7 @@ module "cpu_alarm_high" { alarm_name = join("-", ["CPUAlarmHigh", var.name]) comparison_operator = var.cw_cpu_high_operator customer_alarms_enabled = true - dimensions = data.null_data_source.alarm_dimensions.*.outputs + dimensions = local.alarm_dimensions[*] evaluation_periods = var.cw_cpu_high_evaluations metric_name = "CPUUtilization" notification_topic = [var.notification_topic] diff --git a/tests/test1/main.tf b/tests/test1/main.tf index e3d191a..7132c31 100644 --- a/tests/test1/main.tf +++ b/tests/test1/main.tf @@ -21,7 +21,7 @@ resource "random_string" "res_name" { } module "vpc" { - source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.4" + source = "git@github.com:rackspace-infrastructure-automation/aws-terraform-vpc_basenetwork?ref=v0.12.7" name = "${random_string.res_name.result}-EC2-AR-BaseNetwork-Test1" }