Skip to content

Commit d65ef8d

Browse files
Soaib024Mohammad Soaibshemau
authored
fix: dynamic auto scaling block (#43)
* fix: auto-scaling baked in to default * docs: updated readme * fix: removed auto-scaling variable from examples * fix: removed optional from auto-scaling parameters * docs: updatde readme file * docs: updatde readme file * fix: adopted solution from rabbit mq pr * fix: changed default value for cpu auto scaling * fix: changed default value of rate_limit_count_per_member * fix: set default value of auto-scaling to null * docs: updated readme file * fix: reduced rate_limit_count_per_member for auto-scaling example * fix: reduced default value of rate_limit_count_per_member * fix: updated auto-scaling example variable default --------- Co-authored-by: Mohammad Soaib <mohammad.soaib@ibm.com> Co-authored-by: shemau <shemau@gmail.com>
1 parent 73bba85 commit d65ef8d

File tree

8 files changed

+69
-126
lines changed

8 files changed

+69
-126
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) | Set of IP address and description to allowlist in database | <pre>list(object({<br> address = optional(string)<br> description = optional(string)<br> }))</pre> | `[]` | no |
71-
| <a name="input_auto_scaling"></a> [auto\_scaling](#input\_auto\_scaling) | (Optional) 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_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> 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) | (Optional) 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_crn"></a> [backup\_crn](#input\_backup\_crn) | The CRN of a backup resource to restore from. The backup is created by a database deployment with the same service ID. The backup is loaded after provisioning and the new deployment starts up that uses that data. A backup CRN is in the format crn:v1:<…>:backup:. If omitted, the database is provisioned empty. | `string` | `null` | no |
7373
| <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 |
7474
| <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 |

examples/autoscale/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
An end-to-end example that uses the module's default variable values. This example uses the IBM Cloud terraform provider to:
44

55
- Create a new resource group if one is not passed in.
6-
- Create a new ICD Postgresql database instance with auto-scaling (automatically increase resources) enabled..
6+
- Create a new ICD Postgresql database instance with auto-scaling (automatically increase resources) enabled.

examples/autoscale/variables.tf

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -77,31 +77,13 @@ variable "auto_scaling" {
7777
})
7878
description = "(Optional) Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once."
7979
default = {
80-
cpu = {
81-
rate_increase_percent = 20
82-
rate_limit_count_per_member = 20
83-
rate_period_seconds = 900
84-
rate_units = "count"
85-
}
80+
cpu = {}
8681
disk = {
87-
capacity_enabled = true
88-
free_space_less_than_percent = 15
89-
io_above_percent = 85
90-
io_enabled = true
91-
io_over_period = "15m"
92-
rate_increase_percent = 15
93-
rate_limit_mb_per_member = 3670016
94-
rate_period_seconds = 900
95-
rate_units = "mb"
82+
capacity_enabled : true,
83+
io_enabled : true
9684
}
9785
memory = {
98-
io_above_percent = 90
99-
io_enabled = true
100-
io_over_period = "15m"
101-
rate_increase_percent = 10
102-
rate_limit_mb_per_member = 114688
103-
rate_period_seconds = 900
104-
rate_units = "mb"
86+
io_enabled : true,
10587
}
10688
}
10789
}

main.tf

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
##############################################################################
66

77
locals {
8-
kp_backup_crn = var.backup_encryption_key_crn != null ? var.backup_encryption_key_crn : var.key_protect_key_crn
8+
kp_backup_crn = var.backup_encryption_key_crn != null ? var.backup_encryption_key_crn : var.key_protect_key_crn
9+
auto_scaling_enabled = var.auto_scaling == null ? [] : [1]
910
}
1011

1112
# Create postgresql database
@@ -48,34 +49,41 @@ resource "ibm_database" "postgresql_db" {
4849
allocation_count = var.members
4950
}
5051
}
51-
auto_scaling {
52-
cpu {
53-
rate_increase_percent = var.auto_scaling.cpu.rate_increase_percent
54-
rate_limit_count_per_member = var.auto_scaling.cpu.rate_limit_count_per_member
55-
rate_period_seconds = var.auto_scaling.cpu.rate_period_seconds
56-
rate_units = var.auto_scaling.cpu.rate_units
57-
}
58-
disk {
59-
capacity_enabled = var.auto_scaling.disk.capacity_enabled
60-
free_space_less_than_percent = var.auto_scaling.disk.free_space_less_than_percent
61-
io_above_percent = var.auto_scaling.disk.io_above_percent
62-
io_enabled = var.auto_scaling.disk.io_enabled
63-
io_over_period = var.auto_scaling.disk.io_over_period
64-
rate_increase_percent = var.auto_scaling.disk.rate_increase_percent
65-
rate_limit_mb_per_member = var.auto_scaling.disk.rate_limit_mb_per_member
66-
rate_period_seconds = var.auto_scaling.disk.rate_period_seconds
67-
rate_units = var.auto_scaling.disk.rate_units
68-
}
69-
memory {
70-
io_above_percent = var.auto_scaling.memory.io_above_percent
71-
io_enabled = var.auto_scaling.memory.io_enabled
72-
io_over_period = var.auto_scaling.memory.io_over_period
73-
rate_increase_percent = var.auto_scaling.memory.rate_increase_percent
74-
rate_limit_mb_per_member = var.auto_scaling.memory.rate_limit_mb_per_member
75-
rate_period_seconds = var.auto_scaling.memory.rate_period_seconds
76-
rate_units = var.auto_scaling.memory.rate_units
52+
53+
## This for_each block is NOT a loop to attach to multiple auto_scaling blocks.
54+
## This block is only used to conditionally add auto_scaling block depending on var.auto_scaling
55+
dynamic "auto_scaling" {
56+
for_each = local.auto_scaling_enabled
57+
content {
58+
cpu {
59+
rate_increase_percent = var.auto_scaling.cpu.rate_increase_percent
60+
rate_limit_count_per_member = var.auto_scaling.cpu.rate_limit_count_per_member
61+
rate_period_seconds = var.auto_scaling.cpu.rate_period_seconds
62+
rate_units = var.auto_scaling.cpu.rate_units
63+
}
64+
disk {
65+
capacity_enabled = var.auto_scaling.disk.capacity_enabled
66+
free_space_less_than_percent = var.auto_scaling.disk.free_space_less_than_percent
67+
io_above_percent = var.auto_scaling.disk.io_above_percent
68+
io_enabled = var.auto_scaling.disk.io_enabled
69+
io_over_period = var.auto_scaling.disk.io_over_period
70+
rate_increase_percent = var.auto_scaling.disk.rate_increase_percent
71+
rate_limit_mb_per_member = var.auto_scaling.disk.rate_limit_mb_per_member
72+
rate_period_seconds = var.auto_scaling.disk.rate_period_seconds
73+
rate_units = var.auto_scaling.disk.rate_units
74+
}
75+
memory {
76+
io_above_percent = var.auto_scaling.memory.io_above_percent
77+
io_enabled = var.auto_scaling.memory.io_enabled
78+
io_over_period = var.auto_scaling.memory.io_over_period
79+
rate_increase_percent = var.auto_scaling.memory.rate_increase_percent
80+
rate_limit_mb_per_member = var.auto_scaling.memory.rate_limit_mb_per_member
81+
rate_period_seconds = var.auto_scaling.memory.rate_period_seconds
82+
rate_units = var.auto_scaling.memory.rate_units
83+
}
7784
}
7885
}
86+
7987
lifecycle {
8088
ignore_changes = [
8189
# Ignore changes to these because a change will destroy and recreate the instance

module-metadata.json

Lines changed: 7 additions & 12 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_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 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": "(Optional) 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": 164
@@ -43,7 +38,7 @@
4338
"description": "(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.",
4439
"pos": {
4540
"filename": "variables.tf",
46-
"line": 207
41+
"line": 203
4742
}
4843
},
4944
"cbr_rules": {
@@ -60,7 +55,7 @@
6055
],
6156
"pos": {
6257
"filename": "variables.tf",
63-
"line": 218
58+
"line": 214
6459
}
6560
},
6661
"configuration": {
@@ -84,7 +79,7 @@
8479
],
8580
"pos": {
8681
"filename": "variables.tf",
87-
"line": 201
82+
"line": 197
8883
},
8984
"immutable": true
9085
},
@@ -336,7 +331,7 @@
336331
},
337332
"pos": {
338333
"filename": "main.tf",
339-
"line": 12
334+
"line": 13
340335
}
341336
},
342337
"ibm_resource_key.service_credentials": {
@@ -352,7 +347,7 @@
352347
},
353348
"pos": {
354349
"filename": "main.tf",
355-
"line": 134
350+
"line": 142
356351
}
357352
}
358353
},
@@ -415,7 +410,7 @@
415410
},
416411
"pos": {
417412
"filename": "main.tf",
418-
"line": 96
413+
"line": 104
419414
}
420415
}
421416
}

profiles/fscloud/main.tf

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ module "postgresql_db" {
1616
resource_tags = var.resource_tags
1717
allowlist = var.allowlist
1818
cbr_rules = var.cbr_rules
19-
auto_scaling = var.auto_scaling
2019
configuration = var.configuration
2120
member_memory_mb = var.member_memory_mb
2221
member_disk_mb = var.member_disk_mb

profiles/fscloud/variables.tf

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -84,43 +84,6 @@ variable "configuration" {
8484
default = null
8585
}
8686

87-
variable "auto_scaling" {
88-
type = object({
89-
cpu = object({
90-
rate_increase_percent = optional(number)
91-
rate_limit_count_per_member = optional(number)
92-
rate_period_seconds = optional(number)
93-
rate_units = optional(string)
94-
})
95-
disk = object({
96-
capacity_enabled = optional(bool)
97-
free_space_less_than_percent = optional(number)
98-
io_above_percent = optional(number)
99-
io_enabled = optional(bool)
100-
io_over_period = optional(string)
101-
rate_increase_percent = optional(number)
102-
rate_limit_mb_per_member = optional(number)
103-
rate_period_seconds = optional(number)
104-
rate_units = optional(string)
105-
})
106-
memory = object({
107-
io_above_percent = optional(number)
108-
io_enabled = optional(bool)
109-
io_over_period = optional(string)
110-
rate_increase_percent = optional(number)
111-
rate_limit_mb_per_member = optional(number)
112-
rate_period_seconds = optional(number)
113-
rate_units = optional(string)
114-
})
115-
})
116-
description = "(Optional) Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once."
117-
default = {
118-
cpu = {}
119-
disk = {}
120-
memory = {}
121-
}
122-
}
123-
12487
variable "key_protect_key_crn" {
12588
type = string
12689
description = "(Optional) The root key CRN of a Key Management Service like Key Protect or Hyper Protect Crypto Service (HPCS) that you want to use for disk encryption. If `null`, database is encrypted by using randomly generated keys. See https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-key-protect&interface=ui#key-byok for current list of supported regions for BYOK"

variables.tf

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -164,38 +164,34 @@ variable "configuration" {
164164
variable "auto_scaling" {
165165
type = object({
166166
cpu = object({
167-
rate_increase_percent = optional(number)
168-
rate_limit_count_per_member = optional(number)
169-
rate_period_seconds = optional(number)
170-
rate_units = optional(string)
167+
rate_increase_percent = optional(number, 10)
168+
rate_limit_count_per_member = optional(number, 20)
169+
rate_period_seconds = optional(number, 900)
170+
rate_units = optional(string, "count")
171171
})
172172
disk = object({
173-
capacity_enabled = optional(bool)
174-
free_space_less_than_percent = optional(number)
175-
io_above_percent = optional(number)
176-
io_enabled = optional(bool)
177-
io_over_period = optional(string)
178-
rate_increase_percent = optional(number)
179-
rate_limit_mb_per_member = optional(number)
180-
rate_period_seconds = optional(number)
181-
rate_units = optional(string)
173+
capacity_enabled = optional(bool, false)
174+
free_space_less_than_percent = optional(number, 10)
175+
io_above_percent = optional(number, 90)
176+
io_enabled = optional(bool, false)
177+
io_over_period = optional(string, "15m")
178+
rate_increase_percent = optional(number, 10)
179+
rate_limit_mb_per_member = optional(number, 3670016)
180+
rate_period_seconds = optional(number, 900)
181+
rate_units = optional(string, "mb")
182182
})
183183
memory = object({
184-
io_above_percent = optional(number)
185-
io_enabled = optional(bool)
186-
io_over_period = optional(string)
187-
rate_increase_percent = optional(number)
188-
rate_limit_mb_per_member = optional(number)
189-
rate_period_seconds = optional(number)
190-
rate_units = optional(string)
184+
io_above_percent = optional(number, 90)
185+
io_enabled = optional(bool, false)
186+
io_over_period = optional(string, "15m")
187+
rate_increase_percent = optional(number, 10)
188+
rate_limit_mb_per_member = optional(number, 114688)
189+
rate_period_seconds = optional(number, 900)
190+
rate_units = optional(string, "mb")
191191
})
192192
})
193193
description = "(Optional) Configure rules to allow your database to automatically increase its resources. Single block of autoscaling is allowed at once."
194-
default = {
195-
cpu = {}
196-
disk = {}
197-
memory = {}
198-
}
194+
default = null
199195
}
200196

201197
variable "key_protect_key_crn" {

0 commit comments

Comments
 (0)