Skip to content

Commit 15e69d7

Browse files
authored
feat: Add support to return default resource group details (#728)
1 parent c153326 commit 15e69d7

File tree

11 files changed

+82
-12
lines changed

11 files changed

+82
-12
lines changed

README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
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.
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.
1010

1111
<!-- Below content is automatically populated via pre-commit hook -->
1212
<!-- BEGIN OVERVIEW HOOK -->
1313
## Overview
1414
* [terraform-ibm-resource-group](#terraform-ibm-resource-group)
1515
* [Examples](./examples)
16+
* [Default resource group example](./examples/default-resource-group)
1617
* [Existing resource group example](./examples/existing-resource-group)
1718
* [New resource group example](./examples/new-resource-group)
1819
* [Contributing](#contributing)
@@ -38,6 +39,13 @@ module "resource_group" {
3839
existing_resource_group_name = "existing-resource-group"
3940
}
4041
```
42+
Return ID of the default Resource group:
43+
```hcl
44+
module "resource_group" {
45+
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
47+
}
48+
```
4149

4250
### Required IAM access policies
4351
You need the following permissions to run this module.
@@ -63,13 +71,14 @@ No modules.
6371
| Name | Type |
6472
|------|------|
6573
| [ibm_resource_group.resource_group](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/resource_group) | resource |
74+
| [ibm_resource_group.default](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/data-sources/resource_group) | data source |
6675
| [ibm_resource_group.existing_resource_group](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/data-sources/resource_group) | data source |
6776

6877
### Inputs
6978

7079
| Name | Description | Type | Default | Required |
7180
|------|-------------|------|---------|:--------:|
72-
| <a name="input_existing_resource_group_name"></a> [existing\_resource\_group\_name](#input\_existing\_resource\_group\_name) | Name of the existing resource group. Required if not creating new resource group | `string` | `null` | no |
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 |
7382
| <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 |
7483

7584
### Outputs
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Default resource group example
2+
3+
An example showing how when no resource group or existing resource group is passed, the module can look up and return the default Resource group ID as an output.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module "resource_group" {
2+
source = "../../"
3+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
output "resource_group_name" {
2+
value = module.resource_group.resource_group_name
3+
description = "Resource group name"
4+
}
5+
6+
output "resource_group_id" {
7+
value = module.resource_group.resource_group_id
8+
description = "Resource group ID"
9+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
provider "ibm" {
2+
ibmcloud_api_key = var.ibmcloud_api_key
3+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
variable "ibmcloud_api_key" {
2+
type = string
3+
description = "The IBM Cloud API Token"
4+
sensitive = true
5+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
terraform {
2+
required_version = ">= 1.9.0"
3+
4+
# Ensure that there is always 1 example locked into the lowest provider version of the range defined in the main
5+
# module's version.tf (this example), and 1 example that will always use the latest provider version (new-resource-group example).
6+
required_providers {
7+
ibm = {
8+
source = "IBM-Cloud/ibm"
9+
version = "1.79.0"
10+
}
11+
}
12+
}

main.tf

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
##############################################################################
22
# terraform-ibm-resource-group-module
33
#
4-
# Looks up resource group and creates a new one if none already exists
4+
# Creates a resource group if a new one is requested.
5+
# Otherwise it will look up a provided existing resource group or the account's default resource group
56
##############################################################################
67

8+
# Use a local variable to determine if the default resource group should be used
9+
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
12+
}
13+
14+
data "ibm_resource_group" "default" {
15+
count = var.existing_resource_group_name == null && var.resource_group_name == null ? 1 : 0
16+
is_default = "true"
17+
}
18+
719
data "ibm_resource_group" "existing_resource_group" {
8-
count = var.existing_resource_group_name != null ? 1 : 0
9-
name = var.existing_resource_group_name
20+
count = var.resource_group_name != null ? 0 : 1
21+
name = local.existing_resource_group_name
1022
}
1123

1224
resource "ibm_resource_group" "resource_group" {
13-
count = var.existing_resource_group_name != null ? 0 : 1
25+
count = var.resource_group_name != null ? 1 : 0
1426
name = var.resource_group_name
1527
quota_id = null
1628
}

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.existing_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 ? 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.existing_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 ? data.ibm_resource_group.existing_resource_group[0].id : ibm_resource_group.resource_group[0].id
1313
}
1414
##############################################################################

tests/pr_test.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ import (
1111
"github.com/gruntwork-io/terratest/modules/logger"
1212
"github.com/gruntwork-io/terratest/modules/random"
1313
"github.com/gruntwork-io/terratest/modules/terraform"
14-
"github.com/stretchr/testify/require"
15-
1614
"github.com/stretchr/testify/assert"
15+
"github.com/stretchr/testify/require"
1716
"github.com/terraform-ibm-modules/ibmcloud-terratest-wrapper/testhelper"
1817
)
1918

2019
const newGroupExampleTerraformDir = "examples/new-resource-group"
20+
const defaultGroupExampleTerraformDir = "examples/default-resource-group"
2121
const existingGroupExampleTerraformDir = "examples/existing-resource-group"
2222

2323
func TestRunNewGroupExample(t *testing.T) {
@@ -96,6 +96,20 @@ func TestRunExistingGroupExample(t *testing.T) {
9696
}
9797
}
9898

99+
func TestRunDefaultGroupExample(t *testing.T) {
100+
t.Parallel()
101+
102+
options := testhelper.TestOptionsDefault(&testhelper.TestOptions{
103+
Testing: t,
104+
TerraformDir: defaultGroupExampleTerraformDir,
105+
})
106+
107+
output, err := options.RunTestConsistency()
108+
assert.Nil(t, err, "This should not have errored")
109+
assert.NotEmpty(t, output.RawPlan.OutputChanges["resource_group_id"].After.(string))
110+
assert.Equal(t, output.RawPlan.OutputChanges["resource_group_name"].After.(string), "Default")
111+
}
112+
99113
func TestRunUpgradeExample(t *testing.T) {
100114
t.Skip()
101115
t.Parallel()

0 commit comments

Comments
 (0)