Commit 4d7f3d87 authored by Brad Alexander's avatar Brad Alexander Committed by GitHub

feat!: Add support for user_data_replace_on_change, and updated AWS provider to v4.7+ (#272)

parent 94f02f6b
...@@ -168,13 +168,13 @@ The following combinations are supported to conditionally create resources: ...@@ -168,13 +168,13 @@ The following combinations are supported to conditionally create resources:
| Name | Version | | Name | Version |
|------|---------| |------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 | | <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.72 | | <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.7 |
## Providers ## Providers
| Name | Version | | Name | Version |
|------|---------| |------|---------|
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.72 | | <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.7 |
## Modules ## Modules
...@@ -240,6 +240,7 @@ No modules. ...@@ -240,6 +240,7 @@ No modules.
| <a name="input_timeouts"></a> [timeouts](#input\_timeouts) | Define maximum timeout for creating, updating, and deleting EC2 instance resources | `map(string)` | `{}` | no | | <a name="input_timeouts"></a> [timeouts](#input\_timeouts) | Define maximum timeout for creating, updating, and deleting EC2 instance resources | `map(string)` | `{}` | no |
| <a name="input_user_data"></a> [user\_data](#input\_user\_data) | The user data to provide when launching the instance. Do not pass gzip-compressed data via this argument; see user\_data\_base64 instead. | `string` | `null` | no | | <a name="input_user_data"></a> [user\_data](#input\_user\_data) | The user data to provide when launching the instance. Do not pass gzip-compressed data via this argument; see user\_data\_base64 instead. | `string` | `null` | no |
| <a name="input_user_data_base64"></a> [user\_data\_base64](#input\_user\_data\_base64) | Can be used instead of user\_data to pass base64-encoded binary data directly. Use this instead of user\_data whenever the value is not a valid UTF-8 string. For example, gzip-encoded user data must be base64-encoded and passed via this argument to avoid corruption. | `string` | `null` | no | | <a name="input_user_data_base64"></a> [user\_data\_base64](#input\_user\_data\_base64) | Can be used instead of user\_data to pass base64-encoded binary data directly. Use this instead of user\_data whenever the value is not a valid UTF-8 string. For example, gzip-encoded user data must be base64-encoded and passed via this argument to avoid corruption. | `string` | `null` | no |
| <a name="input_user_data_replace_on_change"></a> [user\_data\_replace\_on\_change](#input\_user\_data\_replace\_on\_change) | When used in combination with user\_data or user\_data\_base64 will trigger a destroy and recreate when set to true. Defaults to false if not set. | `bool` | `false` | no |
| <a name="input_volume_tags"></a> [volume\_tags](#input\_volume\_tags) | A mapping of tags to assign to the devices created by the instance at launch time | `map(string)` | `{}` | no | | <a name="input_volume_tags"></a> [volume\_tags](#input\_volume\_tags) | A mapping of tags to assign to the devices created by the instance at launch time | `map(string)` | `{}` | no |
| <a name="input_vpc_security_group_ids"></a> [vpc\_security\_group\_ids](#input\_vpc\_security\_group\_ids) | A list of security group IDs to associate with | `list(string)` | `null` | no | | <a name="input_vpc_security_group_ids"></a> [vpc\_security\_group\_ids](#input\_vpc\_security\_group\_ids) | A list of security group IDs to associate with | `list(string)` | `null` | no |
......
...@@ -20,13 +20,13 @@ Note that this example may create resources which can cost money. Run `terraform ...@@ -20,13 +20,13 @@ Note that this example may create resources which can cost money. Run `terraform
| Name | Version | | Name | Version |
|------|---------| |------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 | | <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.72 | | <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.7 |
## Providers ## Providers
| Name | Version | | Name | Version |
|------|---------| |------|---------|
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.72 | | <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.7 |
## Modules ## Modules
......
...@@ -101,6 +101,7 @@ module "ec2_complete" { ...@@ -101,6 +101,7 @@ module "ec2_complete" {
# enclave_options_enabled = true # enclave_options_enabled = true
user_data_base64 = base64encode(local.user_data) user_data_base64 = base64encode(local.user_data)
user_data_replace_on_change = true
cpu_core_count = 2 # default 4 cpu_core_count = 2 # default 4
cpu_threads_per_core = 1 # default 2 cpu_threads_per_core = 1 # default 2
......
...@@ -4,7 +4,7 @@ terraform { ...@@ -4,7 +4,7 @@ terraform {
required_providers { required_providers {
aws = { aws = {
source = "hashicorp/aws" source = "hashicorp/aws"
version = ">= 3.72" version = ">= 4.7"
} }
} }
} }
...@@ -11,9 +11,11 @@ resource "aws_instance" "this" { ...@@ -11,9 +11,11 @@ resource "aws_instance" "this" {
instance_type = var.instance_type instance_type = var.instance_type
cpu_core_count = var.cpu_core_count cpu_core_count = var.cpu_core_count
cpu_threads_per_core = var.cpu_threads_per_core cpu_threads_per_core = var.cpu_threads_per_core
hibernation = var.hibernation
user_data = var.user_data user_data = var.user_data
user_data_base64 = var.user_data_base64 user_data_base64 = var.user_data_base64
hibernation = var.hibernation user_data_replace_on_change = var.user_data_replace_on_change
availability_zone = var.availability_zone availability_zone = var.availability_zone
subnet_id = var.subnet_id subnet_id = var.subnet_id
...@@ -144,9 +146,11 @@ resource "aws_spot_instance_request" "this" { ...@@ -144,9 +146,11 @@ resource "aws_spot_instance_request" "this" {
instance_type = var.instance_type instance_type = var.instance_type
cpu_core_count = var.cpu_core_count cpu_core_count = var.cpu_core_count
cpu_threads_per_core = var.cpu_threads_per_core cpu_threads_per_core = var.cpu_threads_per_core
hibernation = var.hibernation
user_data = var.user_data user_data = var.user_data
user_data_base64 = var.user_data_base64 user_data_base64 = var.user_data_base64
hibernation = var.hibernation user_data_replace_on_change = var.user_data_replace_on_change
availability_zone = var.availability_zone availability_zone = var.availability_zone
subnet_id = var.subnet_id subnet_id = var.subnet_id
......
...@@ -208,6 +208,12 @@ variable "user_data_base64" { ...@@ -208,6 +208,12 @@ variable "user_data_base64" {
default = null default = null
} }
variable "user_data_replace_on_change" {
description = "When used in combination with user_data or user_data_base64 will trigger a destroy and recreate when set to true. Defaults to false if not set."
type = bool
default = false
}
variable "volume_tags" { variable "volume_tags" {
description = "A mapping of tags to assign to the devices created by the instance at launch time" description = "A mapping of tags to assign to the devices created by the instance at launch time"
type = map(string) type = map(string)
......
...@@ -4,7 +4,7 @@ terraform { ...@@ -4,7 +4,7 @@ terraform {
required_providers { required_providers {
aws = { aws = {
source = "hashicorp/aws" source = "hashicorp/aws"
version = ">= 3.72" version = ">= 4.7"
} }
} }
} }
...@@ -38,6 +38,7 @@ module "wrapper" { ...@@ -38,6 +38,7 @@ module "wrapper" {
tenancy = try(each.value.tenancy, var.defaults.tenancy, null) tenancy = try(each.value.tenancy, var.defaults.tenancy, null)
user_data = try(each.value.user_data, var.defaults.user_data, null) 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_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, false)
volume_tags = try(each.value.volume_tags, var.defaults.volume_tags, {}) 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) 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) vpc_security_group_ids = try(each.value.vpc_security_group_ids, var.defaults.vpc_security_group_ids, null)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment