Skip to content

Commit fd661b7

Browse files
feat: added support for all regions the service supports<br>- added support for basic plan<br>- added DA for IBM Cloud catalog (#212)
1 parent 758bf86 commit fd661b7

19 files changed

+874
-14
lines changed

.catalog-onboard-pipeline.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
apiVersion: v1
3+
offerings:
4+
- name: deploy-arch-ibm-apprapp
5+
kind: solution
6+
catalog_id: 7df1e4ca-d54c-4fd0-82ce-3d13247308cd
7+
offering_id: 045c1169-d15a-4046-ae81-aa3d3348421f
8+
variations:
9+
- name: fully-configurable
10+
mark_ready: true
11+
install_type: fullstack
12+
scc:
13+
instance_id: 1c7d5f78-9262-44c3-b779-b28fe4d88c37
14+
region: us-south
15+
scope_resource_group_var_name: existing_resource_group_name

.releaserc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
}],
1111
["@semantic-release/exec", {
1212
"successCmd": "echo \"SEMVER_VERSION=${nextRelease.version}\" >> $GITHUB_ENV"
13+
}],
14+
["@semantic-release/exec",{
15+
"publishCmd": "./ci/trigger-catalog-onboarding-pipeline.sh --version=v${nextRelease.version}"
1316
}]
1417
]
1518
}

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ For more information on access and permissions, see <https://cloud.ibm.com/docs/
105105
|------|-------------|------|---------|:--------:|
106106
| <a name="input_app_config_collections"></a> [app\_config\_collections](#input\_app\_config\_collections) | A list of collections to be added to the App Configuration instance | <pre>list(object({<br/> name = string<br/> collection_id = string<br/> description = optional(string, null)<br/> tags = optional(string, null)<br/> }))</pre> | `[]` | no |
107107
| <a name="input_app_config_name"></a> [app\_config\_name](#input\_app\_config\_name) | Name for the App Configuration service instance | `string` | n/a | yes |
108-
| <a name="input_app_config_plan"></a> [app\_config\_plan](#input\_app\_config\_plan) | Plan for the App Configuration service instance, valid plans are lite, standardv2, and enterprise. | `string` | `"lite"` | no |
108+
| <a name="input_app_config_plan"></a> [app\_config\_plan](#input\_app\_config\_plan) | Plan for the App Configuration service instance, valid plans are lite, basic, standardv2, and enterprise. | `string` | `"lite"` | no |
109109
| <a name="input_app_config_service_endpoints"></a> [app\_config\_service\_endpoints](#input\_app\_config\_service\_endpoints) | Service Endpoints for the App Configuration service instance, valid endpoints are public or public-and-private. | `string` | `"public-and-private"` | no |
110110
| <a name="input_app_config_tags"></a> [app\_config\_tags](#input\_app\_config\_tags) | Optional list of tags to be added to the App Config instance. | `list(string)` | `[]` | no |
111111
| <a name="input_cbr_rules"></a> [cbr\_rules](#input\_cbr\_rules) | The list of context-based restriction rules to create. | <pre>list(object({<br/> description = string<br/> account_id = string<br/> tags = optional(list(object({<br/> name = string<br/> value = string<br/> })), [])<br/> rule_contexts = list(object({<br/> attributes = optional(list(object({<br/> name = string<br/> value = string<br/> }))) }))<br/> enforcement_mode = string<br/> }))</pre> | `[]` | no |
@@ -116,7 +116,7 @@ For more information on access and permissions, see <https://cloud.ibm.com/docs/
116116
| <a name="input_config_aggregator_resource_collection_regions"></a> [config\_aggregator\_resource\_collection\_regions](#input\_config\_aggregator\_resource\_collection\_regions) | From which region do you want to collect configuration data? Only applies if `enable_config_aggregator` is set to true. | `list(string)` | <pre>[<br/> "all"<br/>]</pre> | no |
117117
| <a name="input_config_aggregator_trusted_profile_name"></a> [config\_aggregator\_trusted\_profile\_name](#input\_config\_aggregator\_trusted\_profile\_name) | The name to give the trusted profile that will be created if `enable_config_aggregator` is set to `true`. | `string` | `"config-aggregator-trusted-profile"` | no |
118118
| <a name="input_enable_config_aggregator"></a> [enable\_config\_aggregator](#input\_enable\_config\_aggregator) | Set to true to enable configuration aggregator. By setting to true a trusted profile will be created with the required access to record configuration data from all resources across regions in your account. [Learn more](https://cloud.ibm.com/docs/app-configuration?topic=app-configuration-ac-configuration-aggregator). | `bool` | `false` | no |
119-
| <a name="input_region"></a> [region](#input\_region) | The region to provision the App Configuration service, valid regions are us-south, us-east, eu-gb, and au-syd. | `string` | `"us-south"` | no |
119+
| <a name="input_region"></a> [region](#input\_region) | The region to provision the App Configuration service, valid regions are au-syd, jp-osa, jp-tok, eu-de, eu-gb, eu-es, us-east, us-south, ca-tor, br-sao. | `string` | `"us-south"` | no |
120120
| <a name="input_resource_group_id"></a> [resource\_group\_id](#input\_resource\_group\_id) | The resource group ID where resources will be provisioned. | `string` | n/a | yes |
121121

122122
### Outputs

examples/advanced/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ module "app_config" {
5353
app_config_name = "${var.prefix}-app-config"
5454
app_config_tags = var.resource_tags
5555
enable_config_aggregator = true # See https://cloud.ibm.com/docs/app-configuration?topic=app-configuration-ac-configuration-aggregator
56+
app_config_plan = "standardv2"
5657
app_config_collections = [
5758
{
5859
name = "${var.prefix}-collection",

ibm_catalog.json

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
{
2+
"products": [
3+
{
4+
"name": "deploy-arch-ibm-apprapp",
5+
"label": "Cloud automation for App Configuration",
6+
"product_kind": "solution",
7+
"tags": [
8+
"dev_ops",
9+
"ibm_created",
10+
"terraform",
11+
"solution",
12+
"support_ibm"
13+
],
14+
"keywords": [
15+
"terraform",
16+
"appconfig",
17+
"app configuration",
18+
"solution",
19+
"IaC",
20+
"infrastructure as code"
21+
],
22+
"short_description": "Creates and configures an App Configuration service on IBM Cloud",
23+
"long_description": "This deployable architecture automates the provisioning of IBM Cloud App Configuration along with initial collection to help you manage feature flags and dynamic properties at scale. It also includes support for configuration aggregators, enabling centralized monitoring and management of configurations across multiple App Configuration instances. It simplifies onboarding by preconfiguring key resources and provides support for defining context-based restrictions (CBR) to enhance security and control access based on network policies. Ideal for teams adopting feature flagging, experimentation, or remote configuration strategies in cloud-native applications, this solution accelerates setup while following IBM Cloud best practices. Refer [this](https://cloud.ibm.com/docs/app-configuration) for more information.",
24+
"offering_docs_url": "https://github.com/terraform-ibm-modules/terraform-ibm-app-configuration/blob/main/README.md",
25+
"offering_icon_url": "https://raw.githubusercontent.com/terraform-ibm-modules/terraform-ibm-app-configuration/main/images/app_config-icon.png",
26+
"provider_name": "IBM",
27+
"features": [
28+
{
29+
"title": "Provision Collection",
30+
"description": "Supports creation of collection to help manage feature flags and dynamic properties at scale."
31+
},
32+
{
33+
"title": "CBR Enhanced Security",
34+
"description": "Provides support for defining context-based restrictions (CBR) to enhance security and control access based on network policies."
35+
},
36+
{
37+
"title": "Configuration Aggregator",
38+
"description": "Supports creation and management of configuration aggregator to manage configurations across multiple App Configuration instances."
39+
}
40+
],
41+
"support_details": "This product is in the community registry, as such support is handled through the originated repo. If you experience issues please open an issue in that repository [https://github.com/terraform-ibm-modules/terraform-ibm-app-configuration/issues](https://github.com/terraform-ibm-modules/terraform-ibm-app-configuration/issues). Please note this product is not supported via the IBM Cloud Support Center.",
42+
"flavors": [
43+
{
44+
"label": "Fully configurable",
45+
"name": "fully-configurable",
46+
"install_type": "fullstack",
47+
"working_directory": "solutions/fully-configurable",
48+
"compliance": {
49+
"authority": "scc-v3",
50+
"profiles": [
51+
{
52+
"profile_name": "IBM Cloud Framework for Financial Services",
53+
"profile_version": "1.7.0"
54+
}
55+
]
56+
},
57+
"configuration": [
58+
{
59+
"key": "ibmcloud_api_key"
60+
},
61+
{
62+
"key": "prefix",
63+
"required": true
64+
},
65+
{
66+
"key": "existing_resource_group_name",
67+
"required": true,
68+
"custom_config": {
69+
"type": "resource_group",
70+
"grouping": "deployment",
71+
"original_grouping": "deployment",
72+
"config_constraints": {
73+
"identifier": "rg_name"
74+
}
75+
}
76+
},
77+
{
78+
"key": "region",
79+
"required": true,
80+
"options": [
81+
{
82+
"displayname": "Osaka (jp-osa)",
83+
"value": "jp-osa"
84+
},
85+
{
86+
"displayname": "Sydney (au-syd)",
87+
"value": "au-syd"
88+
},
89+
{
90+
"displayname": "Tokyo (jp-tok)",
91+
"value": "jp-tok"
92+
},
93+
{
94+
"displayname": "Frankfurt (eu-de)",
95+
"value": "eu-de"
96+
},
97+
{
98+
"displayname": "London (eu-gb)",
99+
"value": "eu-gb"
100+
},
101+
{
102+
"displayname": "Madrid (eu-es)",
103+
"value": "eu-es"
104+
},
105+
{
106+
"displayname": "Dallas (us-south)",
107+
"value": "us-south"
108+
},
109+
{
110+
"displayname": "Toronto (ca-tor)",
111+
"value": "ca-tor"
112+
},
113+
{
114+
"displayname": "Washington DC (us-east)",
115+
"value": "us-east"
116+
},
117+
{
118+
"displayname": "Sao Paulo (br-sao)",
119+
"value": "br-sao"
120+
}
121+
]
122+
},
123+
{
124+
"key": "app_config_name"
125+
},
126+
{
127+
"key": "app_config_plan",
128+
"required": true,
129+
"options": [
130+
{
131+
"displayname": "lite",
132+
"value": "lite"
133+
},
134+
{
135+
"displayname": "basic",
136+
"value": "basic"
137+
},
138+
{
139+
"displayname": "standard",
140+
"value": "standardv2"
141+
},
142+
{
143+
"displayname": "enterprise",
144+
"value": "enterprise"
145+
}
146+
]
147+
},
148+
{
149+
"key": "app_config_service_endpoints",
150+
"options": [
151+
{
152+
"displayname": "public",
153+
"value": "public"
154+
},
155+
{
156+
"displayname": "public-and-private",
157+
"value": "public-and-private"
158+
}
159+
]
160+
},
161+
{
162+
"key": "app_config_collections"
163+
},
164+
{
165+
"key": "app_config_tags",
166+
"custom_config": {
167+
"grouping": "deployment",
168+
"original_grouping": "deployment",
169+
"config_constraints": {
170+
"type": "string"
171+
}
172+
}
173+
},
174+
{
175+
"key": "enable_config_aggregator"
176+
},
177+
{
178+
"key": "config_aggregator_trusted_profile_name"
179+
},
180+
{
181+
"key": "config_aggregator_resource_collection_regions"
182+
},
183+
{
184+
"key": "config_aggregator_enterprise_id"
185+
},
186+
{
187+
"key": "config_aggregator_enterprise_trusted_profile_name"
188+
},
189+
{
190+
"key": "config_aggregator_enterprise_trusted_profile_template_name"
191+
},
192+
{
193+
"key": "config_aggregator_enterprise_account_group_ids_to_assign"
194+
},
195+
{
196+
"key": "app_config_cbr_rules"
197+
},
198+
{
199+
"key": "provider_visibility",
200+
"hidden": true,
201+
"options": [
202+
{
203+
"displayname": "private",
204+
"value": "private"
205+
},
206+
{
207+
"displayname": "public",
208+
"value": "public"
209+
},
210+
{
211+
"displayname": "public-and-private",
212+
"value": "public-and-private"
213+
}
214+
]
215+
}
216+
],
217+
"architecture": {
218+
"descriptions": "This architecture supports creating and configuring an IBM Cloud App Configuration",
219+
"features": [
220+
{
221+
"title": "App Configuration instance with Collections",
222+
"description": "Creates App Configuration instance. Collections can be created and configured for the instance"
223+
},
224+
{
225+
"title": "Use existing resource group",
226+
"description": "Supports deployment into an existing IBM Cloud resource group."
227+
},
228+
{
229+
"title": "CBR Enhanced Security",
230+
"description": "Enforces network-based access control through context-based restrictions (CBR) rules."
231+
},
232+
{
233+
"title": "Configuration Aggregator",
234+
"description": "Enables the creation and management of configuration aggregator to consolidate and monitor configurations across multiple App Configuration instances."
235+
}
236+
],
237+
"diagrams": [
238+
{
239+
"diagram": {
240+
"caption": "App Configuration",
241+
"url": "https://raw.githubusercontent.com/terraform-ibm-modules/terraform-ibm-app-configuration/main/reference-architecture/app_configuration.svg",
242+
"type": "image/svg+xml"
243+
},
244+
"description": "**App Configuration on IBM Cloud** <br/> <br/> <b>Description</b> <br/> This architecture automates the setup of IBM Cloud App Configuration. The modular design includes the creation of a collection to streamline the management of feature flags and properties, consolidation of multiple App Cpnfiguration instances via configuration aggregator and optionally integrates context-based restrictions (CBR) to improve access control and align with your network security policies."
245+
}
246+
]
247+
}
248+
}
249+
]
250+
}
251+
]
252+
}

images/app_config-icon.png

3.37 KB
Loading

reference-architecture/app_configuration.svg

Lines changed: 4 additions & 0 deletions
Loading
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Configuring context-based restrictions (CBRs)
2+
3+
The `app_config_cbr_rules` input variable allows you to provide a rule for the target service to enforce access restrictions for the service based on the context of access requests. Contexts are criteria that include the network location of access requests, the endpoint type from where the request is sent, etc.
4+
5+
- Variable name: `app_config_cbr_rules`.
6+
- Type: A list of objects. Allows only one object representing a rule for the target service
7+
- Default value: An empty list (`[]`).
8+
9+
### Options for app_config_cbr_rules
10+
11+
- `description` (required): The description of the rule to create.
12+
- `account_id` (required): The IBM Cloud Account ID
13+
- `tag` (optional): (List) The tags related to CBR rules
14+
- `rule_contexts` (required): (List) The contexts the rule applies to
15+
- `attributes` (optional): (List) Individual context attributes
16+
- `name` (required): The attribute name.
17+
- `value`(required): The attribute value.
18+
19+
- `enforcement_mode` (required): The rule enforcement mode can have the following values:
20+
- `enabled` - The restrictions are enforced and reported. This is the default.
21+
- `disabled` - The restrictions are disabled. Nothing is enforced or reported.
22+
- `report` - The restrictions are evaluated and reported, but not enforced.
23+
24+
25+
### Example Rule For context-based restrictions configuration
26+
27+
```hcl
28+
[
29+
{
30+
description = "Restrict access to App Config from trusted network"
31+
account_id = "<AccountID>"
32+
enforcement_mode = "enabled"
33+
tags = [
34+
{
35+
name = "env"
36+
value = "dev"
37+
}
38+
]
39+
rule_contexts = [
40+
{
41+
attributes = [
42+
{
43+
name = "networkZoneId"
44+
value = "<NetworkZoneID>"
45+
},
46+
{
47+
"name" : "endpointType",
48+
"value" : "private"
49+
}
50+
]
51+
}
52+
]
53+
}
54+
]
55+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Configuring collections
2+
3+
The `app_config_collections` input variable allows you to define collections to be added to your IBM Cloud App Configuration instance. Collections are logical groupings of configuration items such as feature flags and properties. You can use collections to organize your configuration items based on environments, services, teams, or other criteria.
4+
5+
- Variable name: `app_config_collections`.
6+
- Type: A list of objects. One object per collection item.
7+
- Default value: An empty list (`[]`).
8+
9+
### Options for app_config_collections
10+
11+
- `name` (required): The name of the collection. This should be a unique, descriptive name identifying the purpose or usage of the collection.
12+
- `collection_id` (required): The unique ID for the collection. This must be unique within the App Configuration instance.
13+
- `description` (optional): A brief description of the collection's purpose or contents.
14+
- `tags` (optional): A string of comma-separated tags that can be used for categorization or filtering.
15+
16+
17+
### Example Collection Configuration
18+
19+
```hcl
20+
[
21+
{
22+
name = "feature-flags"
23+
collection_id = "ff-collection-001"
24+
description = "Feature flags for development environment"
25+
tags = "env:dev,team:backend"
26+
},
27+
{
28+
name = "config-settings-ui"
29+
collection_id = "cfg-ui-001"
30+
description = "Configuration settings for UI components"
31+
tags = "env:all,team:frontend"
32+
}
33+
]
34+
```
35+
36+
* NOTE: When using the `lite` plan, you can define at most 1 App Configuration collection.

0 commit comments

Comments
 (0)