Skip to content

Commit c93a544

Browse files
authored
feat: add support to return default resource group when strings 'Default' or 'default' are passed (#747)
1 parent 1a97609 commit c93a544

File tree

11 files changed

+80
-29
lines changed

11 files changed

+80
-29
lines changed

README.md

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)
77
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
88

9-
This module returns the ID for the name of a resource group. It can also create a group from a name and return the ID. The module will return the ID of the default resource group if no name is passed.
9+
This module returns the ID for the name of a resource group. It can also create a group from a name and return the ID. The module will return the ID of the default resource group if no name is passed, or if the string "Default" or "default" is passed (even if that is not the name of the actual default resource group in the account).
1010

1111
<!-- Below content is automatically populated via pre-commit hook -->
1212
<!-- BEGIN OVERVIEW HOOK -->
@@ -27,23 +27,39 @@ Create new Resource group:
2727
```hcl
2828
module "resource_group" {
2929
source = "terraform-ibm-modules/resource-group/ibm"
30-
version = "X.X.X" # Replace "X.X.X" with a release version to lock into a specific release
30+
version = "X.Y.Z" # Replace "X.Y.Z" with a release version to lock into a specific release
3131
resource_group_name = "new-resource-group"
3232
}
3333
```
3434
Return ID of an existing Resource group:
3535
```hcl
3636
module "resource_group" {
3737
source = "terraform-ibm-modules/resource-group/ibm"
38-
version = "X.X.X" # Replace "X.X.X" with a release version to lock into a specific release
38+
version = "X.Y.Z" # Replace "X.Y.Z" with a release version to lock into a specific release
3939
existing_resource_group_name = "existing-resource-group"
4040
}
4141
```
42-
Return ID of the default Resource group:
42+
Return ID of the default Resource group by passing no name:
43+
```hcl
44+
module "resource_group" {
45+
source = "terraform-ibm-modules/resource-group/ibm"
46+
version = "X.Y.Z" # Replace "X.Y.Z" with a release version to lock into a specific release
47+
}
48+
```
49+
Return ID of the default Resource group by the string "Default":
50+
```hcl
51+
module "resource_group" {
52+
source = "terraform-ibm-modules/resource-group/ibm"
53+
version = "X.Y.Z" # Replace "X.Y.Z" with a release version to lock into a specific release
54+
existing_resource_group_name = "Default"
55+
}
56+
```
57+
Return ID of the default Resource group by the string "default":
4358
```hcl
4459
module "resource_group" {
4560
source = "terraform-ibm-modules/resource-group/ibm"
46-
version = "X.X.X" # Replace "X.X.X" with a release version to lock into a specific release
61+
version = "X.Y.Z" # Replace "X.Y.Z" with a release version to lock into a specific release
62+
existing_resource_group_name = "default"
4763
}
4864
```
4965

@@ -78,7 +94,7 @@ No modules.
7894

7995
| Name | Description | Type | Default | Required |
8096
|------|-------------|------|---------|:--------:|
81-
| <a name="input_existing_resource_group_name"></a> [existing\_resource\_group\_name](#input\_existing\_resource\_group\_name) | Name of the existing resource group. When null, set to the account's default resource group. | `string` | `null` | no |
97+
| <a name="input_existing_resource_group_name"></a> [existing\_resource\_group\_name](#input\_existing\_resource\_group\_name) | Name of an existing resource group. When set to `null`, `default` or `Default` the accounts default resource group is returned. | `string` | `null` | no |
8298
| <a name="input_resource_group_name"></a> [resource\_group\_name](#input\_resource\_group\_name) | Name of the resource group to create. Required if not using existing resource group | `string` | `null` | no |
8399

84100
### Outputs
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
module "resource_group" {
2-
source = "../../"
2+
source = "../../"
3+
existing_resource_group_name = var.existing_resource_group_name # values of null, "Default" or "default" will all return default resource group in account
34
}

examples/default-resource-group/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@ variable "ibmcloud_api_key" {
33
description = "The IBM Cloud API Token"
44
sensitive = true
55
}
6+
7+
variable "existing_resource_group_name" {
8+
type = string
9+
description = "Name of an existing resource group. When set to `null`, `default` or `Default` the accounts default resource group is returned."
10+
default = null
11+
}

examples/existing-resource-group/catalogValidationValues.json.template

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
module "resource_group" {
22
source = "../../"
3-
existing_resource_group_name = var.resource_group_name
3+
existing_resource_group_name = var.existing_resource_group_name
44
}

examples/existing-resource-group/variables.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ variable "ibmcloud_api_key" {
44
sensitive = true
55
}
66

7-
variable "resource_group_name" {
7+
variable "existing_resource_group_name" {
88
type = string
9-
description = "Resource group name"
9+
description = "Existing Resource group name"
1010
}

examples/new-resource-group/catalogValidationValues.json.template

Lines changed: 0 additions & 4 deletions
This file was deleted.

main.tf

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
# Otherwise it will look up a provided existing resource group or the account's default resource group
66
##############################################################################
77

8-
# Use a local variable to determine if the default resource group should be used
98
locals {
10-
# Use the local variable to decide which resource group name to use
11-
existing_resource_group_name = var.existing_resource_group_name != null ? var.existing_resource_group_name : var.resource_group_name == null ? data.ibm_resource_group.default[0].name : null
9+
# when resource_group_name is null, lookup account default group if existing_resource_group_name is null, "Default" or "default"
10+
lookup_default_group = var.resource_group_name != null ? false : var.existing_resource_group_name != null ? lower(var.existing_resource_group_name) == "default" ? true : false : true
11+
lookup_existing_group = var.resource_group_name == null && !local.lookup_default_group ? true : false
12+
existing_resource_group_name = var.existing_resource_group_name != null ? lower(var.existing_resource_group_name) == "default" ? data.ibm_resource_group.default[0].name : var.existing_resource_group_name : var.resource_group_name == null ? data.ibm_resource_group.default[0].name : null
1213
}
1314

1415
data "ibm_resource_group" "default" {
15-
count = var.existing_resource_group_name == null && var.resource_group_name == null ? 1 : 0
16+
count = local.lookup_default_group ? 1 : 0
1617
is_default = "true"
1718
}
1819

1920
data "ibm_resource_group" "existing_resource_group" {
20-
count = var.resource_group_name != null ? 0 : 1
21+
count = local.lookup_existing_group ? 1 : 0
2122
name = local.existing_resource_group_name
2223
}
2324

outputs.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
output "resource_group_name" {
66
description = "Resource group name"
7-
value = var.resource_group_name == null ? data.ibm_resource_group.existing_resource_group[0].name : ibm_resource_group.resource_group[0].name
7+
value = var.resource_group_name == null ? local.lookup_default_group ? data.ibm_resource_group.default[0].name : data.ibm_resource_group.existing_resource_group[0].name : ibm_resource_group.resource_group[0].name
88
}
99

1010
output "resource_group_id" {
1111
description = "Resource group ID"
12-
value = var.resource_group_name == null ? data.ibm_resource_group.existing_resource_group[0].id : ibm_resource_group.resource_group[0].id
12+
value = var.resource_group_name == null ? local.lookup_default_group ? data.ibm_resource_group.default[0].id : data.ibm_resource_group.existing_resource_group[0].id : ibm_resource_group.resource_group[0].id
1313
}
1414
##############################################################################

tests/pr_test.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func TestRunExistingGroupExample(t *testing.T) {
7575
})
7676

7777
options.TerraformVars = map[string]interface{}{
78-
"resource_group_name": terraform.Output(t, existingTerraformOptions, "resource_group_name"),
78+
"existing_resource_group_name": terraform.Output(t, existingTerraformOptions, "resource_group_name"),
7979
}
8080

8181
output, err := options.RunTestConsistency()
@@ -96,7 +96,7 @@ func TestRunExistingGroupExample(t *testing.T) {
9696
}
9797
}
9898

99-
func TestRunDefaultGroupExample(t *testing.T) {
99+
func TestRunDefaultGroupExampleUsingNull(t *testing.T) {
100100
t.Parallel()
101101

102102
options := testhelper.TestOptionsDefault(&testhelper.TestOptions{
@@ -110,8 +110,43 @@ func TestRunDefaultGroupExample(t *testing.T) {
110110
assert.Equal(t, output.RawPlan.OutputChanges["resource_group_name"].After.(string), "Default")
111111
}
112112

113+
func TestRunDefaultGroupExampleUsingCapDefault(t *testing.T) {
114+
t.Parallel()
115+
116+
options := testhelper.TestOptionsDefault(&testhelper.TestOptions{
117+
Testing: t,
118+
TerraformDir: defaultGroupExampleTerraformDir,
119+
})
120+
121+
options.TerraformVars = map[string]interface{}{
122+
"existing_resource_group_name": "Default",
123+
}
124+
125+
output, err := options.RunTestConsistency()
126+
assert.Nil(t, err, "This should not have errored")
127+
assert.NotEmpty(t, output.RawPlan.OutputChanges["resource_group_id"].After.(string))
128+
assert.Equal(t, output.RawPlan.OutputChanges["resource_group_name"].After.(string), "Default")
129+
}
130+
131+
func TestRunDefaultGroupExampleUsingLowerDefault(t *testing.T) {
132+
t.Parallel()
133+
134+
options := testhelper.TestOptionsDefault(&testhelper.TestOptions{
135+
Testing: t,
136+
TerraformDir: defaultGroupExampleTerraformDir,
137+
})
138+
139+
options.TerraformVars = map[string]interface{}{
140+
"existing_resource_group_name": "default",
141+
}
142+
143+
output, err := options.RunTestConsistency()
144+
assert.Nil(t, err, "This should not have errored")
145+
assert.NotEmpty(t, output.RawPlan.OutputChanges["resource_group_id"].After.(string))
146+
assert.Equal(t, output.RawPlan.OutputChanges["resource_group_name"].After.(string), "Default")
147+
}
148+
113149
func TestRunUpgradeExample(t *testing.T) {
114-
t.Skip()
115150
t.Parallel()
116151

117152
options := testhelper.TestOptionsDefault(&testhelper.TestOptions{

0 commit comments

Comments
 (0)