Skip to content

Commit

Permalink
Add support for instance reuse policy and fix bug for tag for v4 (#101)
Browse files Browse the repository at this point in the history
* Add instance_reuse_policy for warm pool

* Add instance_reuse_policy for warm pool

* Update aws provider version

* Revert updating aws provider version

* Update aws provider version

* Fix for when tag is null

* Fix for when tag is null

* Put back tags to fix error - The argument tag.4.value is required, but no definition was found

* update tags for v4

* Fix tags for v4 when there is null value

* Auto Format

* revert terraform.md

* Auto Format

Co-authored-by: cloudpossebot <11232728+cloudpossebot@users.noreply.github.com>
  • Loading branch information
linhkikuchi and cloudpossebot committed Jan 12, 2023
1 parent dce2213 commit 507b58d
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 7 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,13 +211,13 @@ Available targets:
| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.0 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.9 |

## Providers

| Name | Version |
|------|---------|
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.0 |
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.9 |

## Modules

Expand Down Expand Up @@ -277,6 +277,7 @@ Available targets:
| <a name="input_instance_initiated_shutdown_behavior"></a> [instance\_initiated\_shutdown\_behavior](#input\_instance\_initiated\_shutdown\_behavior) | Shutdown behavior for the instances. Can be `stop` or `terminate` | `string` | `"terminate"` | no |
| <a name="input_instance_market_options"></a> [instance\_market\_options](#input\_instance\_market\_options) | The market (purchasing) option for the instances | <pre>object({<br> market_type = string<br> spot_options = object({<br> block_duration_minutes = number<br> instance_interruption_behavior = string<br> max_price = number<br> spot_instance_type = string<br> valid_until = string<br> })<br> })</pre> | `null` | no |
| <a name="input_instance_refresh"></a> [instance\_refresh](#input\_instance\_refresh) | The instance refresh definition | <pre>object({<br> strategy = string<br> preferences = object({<br> instance_warmup = number<br> min_healthy_percentage = number<br> })<br> triggers = list(string)<br> })</pre> | `null` | no |
| <a name="input_instance_reuse_policy"></a> [instance\_reuse\_policy](#input\_instance\_reuse\_policy) | If warm pool and this block are configured, instances in the Auto Scaling group can be returned to the warm pool on scale in. The default is to terminate instances in the Auto Scaling group when the group scales in. | <pre>object({<br> reuse_on_scale_in = bool<br> })</pre> | `null` | no |
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | Instance type to launch | `string` | n/a | yes |
| <a name="input_key_name"></a> [key\_name](#input\_key\_name) | The SSH key name that should be used for the instance | `string` | `""` | no |
| <a name="input_label_key_case"></a> [label\_key\_case](#input\_label\_key\_case) | Controls the letter case of the `tags` keys (label names) for tags generated by this module.<br>Does not affect keys of tags passed in via the `tags` input.<br>Possible values: `lower`, `title`, `upper`.<br>Default value: `title`. | `string` | `null` | no |
Expand Down Expand Up @@ -437,7 +438,7 @@ In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow.

## Copyright

Copyright © 2017-2022 [Cloud Posse, LLC](https://cpco.io/copyright)
Copyright © 2017-2023 [Cloud Posse, LLC](https://cpco.io/copyright)



Expand Down
5 changes: 3 additions & 2 deletions docs/terraform.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.0 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.9 |

## Providers

| Name | Version |
|------|---------|
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.0 |
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.9 |

## Modules

Expand Down Expand Up @@ -70,6 +70,7 @@
| <a name="input_instance_initiated_shutdown_behavior"></a> [instance\_initiated\_shutdown\_behavior](#input\_instance\_initiated\_shutdown\_behavior) | Shutdown behavior for the instances. Can be `stop` or `terminate` | `string` | `"terminate"` | no |
| <a name="input_instance_market_options"></a> [instance\_market\_options](#input\_instance\_market\_options) | The market (purchasing) option for the instances | <pre>object({<br> market_type = string<br> spot_options = object({<br> block_duration_minutes = number<br> instance_interruption_behavior = string<br> max_price = number<br> spot_instance_type = string<br> valid_until = string<br> })<br> })</pre> | `null` | no |
| <a name="input_instance_refresh"></a> [instance\_refresh](#input\_instance\_refresh) | The instance refresh definition | <pre>object({<br> strategy = string<br> preferences = object({<br> instance_warmup = number<br> min_healthy_percentage = number<br> })<br> triggers = list(string)<br> })</pre> | `null` | no |
| <a name="input_instance_reuse_policy"></a> [instance\_reuse\_policy](#input\_instance\_reuse\_policy) | If warm pool and this block are configured, instances in the Auto Scaling group can be returned to the warm pool on scale in. The default is to terminate instances in the Auto Scaling group when the group scales in. | <pre>object({<br> reuse_on_scale_in = bool<br> })</pre> | `null` | no |
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | Instance type to launch | `string` | n/a | yes |
| <a name="input_key_name"></a> [key\_name](#input\_key\_name) | The SSH key name that should be used for the instance | `string` | `""` | no |
| <a name="input_label_key_case"></a> [label\_key\_case](#input\_label\_key\_case) | Controls the letter case of the `tags` keys (label names) for tags generated by this module.<br>Does not affect keys of tags passed in via the `tags` input.<br>Possible values: `lower`, `title`, `upper`.<br>Default value: `title`. | `string` | `null` | no |
Expand Down
12 changes: 11 additions & 1 deletion main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,10 @@ locals {
launch_template = local.launch_template_block
override = var.mixed_instances_policy.override
})
tags = {
for key, value in module.this.tags :
key => value if value != "" && value != null
}
}

resource "aws_autoscaling_group" "default" {
Expand Down Expand Up @@ -239,11 +243,17 @@ resource "aws_autoscaling_group" "default" {
pool_state = try(warm_pool.value.pool_state, null)
min_size = try(warm_pool.value.min_size, null)
max_group_prepared_capacity = try(warm_pool.value.max_group_prepared_capacity, null)
dynamic "instance_reuse_policy" {
for_each = var.instance_reuse_policy != null ? [var.instance_reuse_policy] : []
content {
reuse_on_scale_in = instance_reuse_policy.value.reuse_on_scale_in
}
}
}
}

dynamic "tag" {
for_each = module.this.tags
for_each = local.tags
content {
key = tag.key
value = tag.value
Expand Down
8 changes: 8 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -498,3 +498,11 @@ variable "warm_pool" {
description = "If this block is configured, add a Warm Pool to the specified Auto Scaling group. See [warm_pool](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group#warm_pool)."
default = null
}

variable "instance_reuse_policy" {
type = object({
reuse_on_scale_in = bool
})
description = "If warm pool and this block are configured, instances in the Auto Scaling group can be returned to the warm pool on scale in. The default is to terminate instances in the Auto Scaling group when the group scales in."
default = null
}
2 changes: 1 addition & 1 deletion versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.0"
version = ">= 4.9"
}
}
}

0 comments on commit 507b58d

Please sign in to comment.