Skip to content

Commit c0966a8

Browse files
authored
fix: This release addresses a regression in the IBM Cloud Provider v1.50.0 [generating an 'Unprocessable Entity](IBM-Cloud/terraform-provider-ibm#4339) when passing a null auto scaling option (#74)
1 parent 71e6d5b commit c0966a8

File tree

5 files changed

+64
-85
lines changed

5 files changed

+64
-85
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ You need the following permissions to run this module.
6868
| Name | Description | Type | Default | Required |
6969
|------|-------------|------|---------|:--------:|
7070
| <a name="input_allowlist"></a> [allowlist](#input\_allowlist) | (Optional, List of Objects) A list of allowed IP addresses for the database. | <pre>list(object({<br> address = string<br> description = string<br> }))</pre> | `[]` | no |
71-
| <a name="input_auto_scaling"></a> [auto\_scaling](#input\_auto\_scaling) | Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once. | <pre>object({<br> cpu = object({<br> rate_increase_percent = optional(number)<br> rate_limit_count_per_member = optional(number)<br> rate_period_seconds = optional(number)<br> rate_units = optional(string)<br> })<br> disk = object({<br> capacity_enabled = optional(bool)<br> free_space_less_than_percent = optional(number)<br> io_above_percent = optional(number)<br> io_over_period = optional(string)<br> io_enabled = optional(bool)<br> rate_increase_percent = optional(number)<br> rate_limit_mb_per_member = optional(number)<br> rate_period_seconds = optional(number)<br> rate_units = optional(string)<br> })<br> memory = object({<br> io_above_percent = optional(number)<br> io_enabled = optional(bool)<br> io_over_period = optional(string)<br> rate_increase_percent = optional(number)<br> rate_limit_mb_per_member = optional(number)<br> rate_period_seconds = optional(number)<br> rate_units = optional(string)<br> })<br> })</pre> | <pre>{<br> "cpu": {},<br> "disk": {},<br> "memory": {}<br>}</pre> | no |
71+
| <a name="input_auto_scaling"></a> [auto\_scaling](#input\_auto\_scaling) | Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once. | <pre>object({<br> cpu = object({<br> rate_increase_percent = optional(number, 10)<br> rate_limit_count_per_member = optional(number, 20)<br> rate_period_seconds = optional(number, 900)<br> rate_units = optional(string, "count")<br> })<br> disk = object({<br> capacity_enabled = optional(bool, false)<br> free_space_less_than_percent = optional(number, 10)<br> io_above_percent = optional(number, 90)<br> io_enabled = optional(bool, false)<br> io_over_period = optional(string, "15m")<br> rate_increase_percent = optional(number, 10)<br> rate_limit_mb_per_member = optional(number, 3670016)<br> rate_period_seconds = optional(number, 900)<br> rate_units = optional(string, "mb")<br> })<br> memory = object({<br> io_above_percent = optional(number, 90)<br> io_enabled = optional(bool, false)<br> io_over_period = optional(string, "15m")<br> rate_increase_percent = optional(number, 10)<br> rate_limit_mb_per_member = optional(number, 114688)<br> rate_period_seconds = optional(number, 900)<br> rate_units = optional(string, "mb")<br> })<br> })</pre> | `null` | no |
7272
| <a name="input_backup_encryption_key_crn"></a> [backup\_encryption\_key\_crn](#input\_backup\_encryption\_key\_crn) | (Optional) The CRN of a key protect key, that you want to use for encrypting disk that holds deployment backups. If null, will use 'key\_protect\_key\_crn' as encryption key. If 'key\_protect\_key\_crn' is also null database is encrypted by using randomly generated keys. | `string` | `null` | no |
7373
| <a name="input_cbr_rules"></a> [cbr\_rules](#input\_cbr\_rules) | (Optional, list) List of CBR rules to create | <pre>list(object({<br> description = string<br> account_id = string<br> rule_contexts = list(object({<br> attributes = optional(list(object({<br> name = string<br> value = string<br> }))) }))<br> enforcement_mode = string<br> }))</pre> | `[]` | no |
7474
| <a name="input_configuration"></a> [configuration](#input\_configuration) | Database Configuration in JSON format. | <pre>object({<br> maxmemory = optional(number)<br> maxmemory-policy = optional(string)<br> appendonly = optional(string)<br> maxmemory-samples = optional(number)<br> stop-writes-on-bgsave-error = optional(string)<br> })</pre> | `null` | no |

examples/autoscale/variables.tf

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ variable "auto_scaling" {
4040
capacity_enabled = optional(bool)
4141
free_space_less_than_percent = optional(number)
4242
io_above_percent = optional(number)
43-
io_over_period = optional(string)
4443
io_enabled = optional(bool)
44+
io_over_period = optional(string)
4545
rate_increase_percent = optional(number)
4646
rate_limit_mb_per_member = optional(number)
4747
rate_period_seconds = optional(number)
@@ -59,31 +59,13 @@ variable "auto_scaling" {
5959
})
6060
description = "Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once."
6161
default = {
62-
cpu = {
63-
rate_increase_percent = 20
64-
rate_limit_count_per_member = 20
65-
rate_period_seconds = 900
66-
rate_units = "count"
67-
}
62+
cpu = {}
6863
disk = {
69-
capacity_enabled = true
70-
free_space_less_than_percent = 15
71-
io_above_percent = 85
72-
io_enabled = true
73-
io_over_period = "15m"
74-
rate_increase_percent = 15
75-
rate_limit_mb_per_member = 3670016
76-
rate_period_seconds = 900
77-
rate_units = "mb"
64+
capacity_enabled : true,
65+
io_enabled : true
7866
}
7967
memory = {
80-
io_above_percent = 90
81-
io_enabled = true
82-
io_over_period = "15m"
83-
rate_increase_percent = 10
84-
rate_limit_mb_per_member = 114688
85-
rate_period_seconds = 900
86-
rate_units = "mb"
68+
io_enabled : true,
8769
}
8870
}
8971
}

main.tf

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
# This file is used to implement the ROOT module
33
*********************************************************************/
44
locals {
5-
kp_backup_crn = var.backup_encryption_key_crn != null ? var.backup_encryption_key_crn : var.key_protect_key_crn
5+
kp_backup_crn = var.backup_encryption_key_crn != null ? var.backup_encryption_key_crn : var.key_protect_key_crn
6+
auto_scaling_enabled = var.auto_scaling == null ? [] : [1]
67
}
78

89
resource "ibm_database" "mongodb" {
@@ -20,32 +21,37 @@ resource "ibm_database" "mongodb" {
2021

2122
configuration = var.configuration != null ? jsonencode(var.configuration) : null
2223

23-
auto_scaling {
24-
cpu {
25-
rate_increase_percent = var.auto_scaling.cpu.rate_increase_percent
26-
rate_limit_count_per_member = var.auto_scaling.cpu.rate_limit_count_per_member
27-
rate_period_seconds = var.auto_scaling.cpu.rate_period_seconds
28-
rate_units = var.auto_scaling.cpu.rate_units
29-
}
30-
disk {
31-
capacity_enabled = var.auto_scaling.disk.capacity_enabled
32-
free_space_less_than_percent = var.auto_scaling.disk.free_space_less_than_percent
33-
io_above_percent = var.auto_scaling.disk.io_above_percent
34-
io_enabled = var.auto_scaling.disk.io_enabled
35-
io_over_period = var.auto_scaling.disk.io_over_period
36-
rate_increase_percent = var.auto_scaling.disk.rate_increase_percent
37-
rate_limit_mb_per_member = var.auto_scaling.disk.rate_limit_mb_per_member
38-
rate_period_seconds = var.auto_scaling.disk.rate_period_seconds
39-
rate_units = var.auto_scaling.disk.rate_units
40-
}
41-
memory {
42-
io_above_percent = var.auto_scaling.memory.io_above_percent
43-
io_enabled = var.auto_scaling.memory.io_enabled
44-
io_over_period = var.auto_scaling.memory.io_over_period
45-
rate_increase_percent = var.auto_scaling.memory.rate_increase_percent
46-
rate_limit_mb_per_member = var.auto_scaling.memory.rate_limit_mb_per_member
47-
rate_period_seconds = var.auto_scaling.memory.rate_period_seconds
48-
rate_units = var.auto_scaling.memory.rate_units
24+
## This for_each block is NOT a loop to attach to multiple auto_scaling blocks.
25+
## This block is only used to conditionally add auto_scaling block depending on var.auto_scaling
26+
dynamic "auto_scaling" {
27+
for_each = local.auto_scaling_enabled
28+
content {
29+
cpu {
30+
rate_increase_percent = var.auto_scaling.cpu.rate_increase_percent
31+
rate_limit_count_per_member = var.auto_scaling.cpu.rate_limit_count_per_member
32+
rate_period_seconds = var.auto_scaling.cpu.rate_period_seconds
33+
rate_units = var.auto_scaling.cpu.rate_units
34+
}
35+
disk {
36+
capacity_enabled = var.auto_scaling.disk.capacity_enabled
37+
free_space_less_than_percent = var.auto_scaling.disk.free_space_less_than_percent
38+
io_above_percent = var.auto_scaling.disk.io_above_percent
39+
io_enabled = var.auto_scaling.disk.io_enabled
40+
io_over_period = var.auto_scaling.disk.io_over_period
41+
rate_increase_percent = var.auto_scaling.disk.rate_increase_percent
42+
rate_limit_mb_per_member = var.auto_scaling.disk.rate_limit_mb_per_member
43+
rate_period_seconds = var.auto_scaling.disk.rate_period_seconds
44+
rate_units = var.auto_scaling.disk.rate_units
45+
}
46+
memory {
47+
io_above_percent = var.auto_scaling.memory.io_above_percent
48+
io_enabled = var.auto_scaling.memory.io_enabled
49+
io_over_period = var.auto_scaling.memory.io_over_period
50+
rate_increase_percent = var.auto_scaling.memory.rate_increase_percent
51+
rate_limit_mb_per_member = var.auto_scaling.memory.rate_limit_mb_per_member
52+
rate_period_seconds = var.auto_scaling.memory.rate_period_seconds
53+
rate_units = var.auto_scaling.memory.rate_units
54+
}
4955
}
5056
}
5157

module-metadata.json

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,8 @@
1313
},
1414
"auto_scaling": {
1515
"name": "auto_scaling",
16-
"type": "object({\n cpu = object({\n rate_increase_percent = optional(number)\n rate_limit_count_per_member = optional(number)\n rate_period_seconds = optional(number)\n rate_units = optional(string)\n })\n disk = object({\n capacity_enabled = optional(bool)\n free_space_less_than_percent = optional(number)\n io_above_percent = optional(number)\n io_over_period = optional(string)\n io_enabled = optional(bool)\n rate_increase_percent = optional(number)\n rate_limit_mb_per_member = optional(number)\n rate_period_seconds = optional(number)\n rate_units = optional(string)\n })\n memory = object({\n io_above_percent = optional(number)\n io_enabled = optional(bool)\n io_over_period = optional(string)\n rate_increase_percent = optional(number)\n rate_limit_mb_per_member = optional(number)\n rate_period_seconds = optional(number)\n rate_units = optional(string)\n })\n })",
16+
"type": "object({\n cpu = object({\n rate_increase_percent = optional(number, 10)\n rate_limit_count_per_member = optional(number, 20)\n rate_period_seconds = optional(number, 900)\n rate_units = optional(string, \"count\")\n })\n disk = object({\n capacity_enabled = optional(bool, false)\n free_space_less_than_percent = optional(number, 10)\n io_above_percent = optional(number, 90)\n io_enabled = optional(bool, false)\n io_over_period = optional(string, \"15m\")\n rate_increase_percent = optional(number, 10)\n rate_limit_mb_per_member = optional(number, 3670016)\n rate_period_seconds = optional(number, 900)\n rate_units = optional(string, \"mb\")\n })\n memory = object({\n io_above_percent = optional(number, 90)\n io_enabled = optional(bool, false)\n io_over_period = optional(string, \"15m\")\n rate_increase_percent = optional(number, 10)\n rate_limit_mb_per_member = optional(number, 114688)\n rate_period_seconds = optional(number, 900)\n rate_units = optional(string, \"mb\")\n })\n })",
1717
"description": "Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once.",
18-
"default": {
19-
"cpu": {},
20-
"disk": {},
21-
"memory": {}
22-
},
2318
"pos": {
2419
"filename": "variables.tf",
2520
"line": 147
@@ -48,7 +43,7 @@
4843
],
4944
"pos": {
5045
"filename": "variables.tf",
51-
"line": 186
46+
"line": 182
5247
}
5348
},
5449
"configuration": {
@@ -284,7 +279,7 @@
284279
},
285280
"pos": {
286281
"filename": "main.tf",
287-
"line": 8
282+
"line": 9
288283
}
289284
}
290285
},
@@ -363,7 +358,7 @@
363358
},
364359
"pos": {
365360
"filename": "main.tf",
366-
"line": 93
361+
"line": 99
367362
}
368363
}
369364
}

variables.tf

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -147,38 +147,34 @@ variable "members" {
147147
variable "auto_scaling" {
148148
type = object({
149149
cpu = object({
150-
rate_increase_percent = optional(number)
151-
rate_limit_count_per_member = optional(number)
152-
rate_period_seconds = optional(number)
153-
rate_units = optional(string)
150+
rate_increase_percent = optional(number, 10)
151+
rate_limit_count_per_member = optional(number, 20)
152+
rate_period_seconds = optional(number, 900)
153+
rate_units = optional(string, "count")
154154
})
155155
disk = object({
156-
capacity_enabled = optional(bool)
157-
free_space_less_than_percent = optional(number)
158-
io_above_percent = optional(number)
159-
io_over_period = optional(string)
160-
io_enabled = optional(bool)
161-
rate_increase_percent = optional(number)
162-
rate_limit_mb_per_member = optional(number)
163-
rate_period_seconds = optional(number)
164-
rate_units = optional(string)
156+
capacity_enabled = optional(bool, false)
157+
free_space_less_than_percent = optional(number, 10)
158+
io_above_percent = optional(number, 90)
159+
io_enabled = optional(bool, false)
160+
io_over_period = optional(string, "15m")
161+
rate_increase_percent = optional(number, 10)
162+
rate_limit_mb_per_member = optional(number, 3670016)
163+
rate_period_seconds = optional(number, 900)
164+
rate_units = optional(string, "mb")
165165
})
166166
memory = object({
167-
io_above_percent = optional(number)
168-
io_enabled = optional(bool)
169-
io_over_period = optional(string)
170-
rate_increase_percent = optional(number)
171-
rate_limit_mb_per_member = optional(number)
172-
rate_period_seconds = optional(number)
173-
rate_units = optional(string)
167+
io_above_percent = optional(number, 90)
168+
io_enabled = optional(bool, false)
169+
io_over_period = optional(string, "15m")
170+
rate_increase_percent = optional(number, 10)
171+
rate_limit_mb_per_member = optional(number, 114688)
172+
rate_period_seconds = optional(number, 900)
173+
rate_units = optional(string, "mb")
174174
})
175175
})
176176
description = "Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once."
177-
default = {
178-
cpu = {}
179-
disk = {}
180-
memory = {}
181-
}
177+
default = null
182178
}
183179
##############################################################
184180
# Context-based restriction (CBR)

0 commit comments

Comments
 (0)