Skip to content

Commit 43c7233

Browse files
Amos-85steveteuber
andauthored
feat(index): extend opensearch_index resource capabilities (#39)
* Extend elasticsearch_index resource capabilities + move var.indices to map(object({})) instead of map(any) * change required version of terraform to 1.3 because of optional variables inside object type * add missing attribute search_slowlog_threshold_fetch_info in var. indices * fix: prevent replacing existing indices --------- Co-authored-by: Steve Teuber <[email protected]>
1 parent 0388438 commit 43c7233

File tree

4 files changed

+155
-14
lines changed

4 files changed

+155
-14
lines changed

README.md

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ data "http" "saml_metadata" {
3636
url = local.saml_metadata_url
3737
}
3838
39-
provider "elasticsearch" {
39+
provider "opensearch" {
4040
url = module.opensearch.cluster_endpoint
4141
aws_region = data.aws_region.current.name
4242
healthcheck = false
@@ -54,10 +54,39 @@ module "opensearch" {
5454
saml_metadata_content = data.http.saml_metadata.body
5555
5656
indices = {
57-
example-index = {
57+
example-index-1 = {
5858
number_of_shards = 2
5959
number_of_replicas = 1
6060
}
61+
example-index-2 = {
62+
number_of_shards = 2
63+
number_of_replicas = 1
64+
mappings = {
65+
"properties" : {
66+
"id" : {
67+
"type" : "text"
68+
},
69+
"name" : {
70+
"type" : "text"
71+
},
72+
"containerType" : {
73+
"type" : "text"
74+
},
75+
"containerIds" : {
76+
"type" : "text"
77+
},
78+
"synonyms" : {
79+
"type" : "text"
80+
},
81+
"parentEvents" : {
82+
"type" : "text"
83+
},
84+
"valueType" : {
85+
"type" : "text"
86+
}
87+
}
88+
}
89+
}
6190
}
6291
}
6392
```
@@ -74,7 +103,7 @@ Here is a working example of using this Terraform module:
74103

75104
| Name | Version |
76105
|------|---------|
77-
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0.0 |
106+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3.0 |
78107
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.12.0 |
79108
| <a name="requirement_opensearch"></a> [opensearch](#requirement\_opensearch) | >= 2.0.0 |
80109

@@ -144,7 +173,7 @@ Here is a working example of using this Terraform module:
144173
| <a name="input_index_files"></a> [index\_files](#input\_index\_files) | A set of all index files to create. | `set(string)` | `[]` | no |
145174
| <a name="input_index_template_files"></a> [index\_template\_files](#input\_index\_template\_files) | A set of all index template files to create. | `set(string)` | `[]` | no |
146175
| <a name="input_index_templates"></a> [index\_templates](#input\_index\_templates) | A map of all index templates to create. | `map(any)` | `{}` | no |
147-
| <a name="input_indices"></a> [indices](#input\_indices) | A map of all indices to create. | `map(any)` | `{}` | no |
176+
| <a name="input_indices"></a> [indices](#input\_indices) | A map of all indices to create. | <pre>map(object({<br> number_of_shards = optional(number)<br> number_of_replicas = optional(number)<br> refresh_interval = optional(string)<br> mappings = optional(any, {})<br> aliases = optional(any, {})<br> analysis_analyzer = optional(string)<br> analysis_char_filter = optional(string)<br> analysis_filter = optional(string)<br> analysis_normalizer = optional(string)<br> analysis_tokenizer = optional(string)<br> analyze_max_token_count = optional(string)<br> auto_expand_replicas = optional(string)<br> blocks_metadata = optional(bool)<br> blocks_read = optional(bool)<br> blocks_read_only = optional(bool)<br> blocks_read_only_allow_delete = optional(bool)<br> blocks_write = optional(bool)<br> codec = optional(string)<br> default_pipeline = optional(string)<br> gc_deletes = optional(string)<br> highlight_max_analyzed_offset = optional(string)<br> include_type_name = optional(string)<br> index_similarity_default = optional(string)<br> indexing_slowlog_level = optional(string)<br> indexing_slowlog_source = optional(string)<br> indexing_slowlog_threshold_index_debug = optional(string)<br> indexing_slowlog_threshold_index_info = optional(string)<br> indexing_slowlog_threshold_index_trace = optional(string)<br> indexing_slowlog_threshold_index_warn = optional(string)<br> load_fixed_bitset_filters_eagerly = optional(bool)<br> max_docvalue_fields_search = optional(string)<br> max_inner_result_window = optional(string)<br> max_ngram_diff = optional(string)<br> max_refresh_listeners = optional(string)<br> max_regex_length = optional(string)<br> max_rescore_window = optional(string)<br> max_result_window = optional(string)<br> max_script_fields = optional(string)<br> max_shingle_diff = optional(string)<br> max_terms_count = optional(string)<br> number_of_routing_shards = optional(string)<br> rollover_alias = optional(string)<br> routing_allocation_enable = optional(string)<br> routing_partition_size = optional(string)<br> routing_rebalance_enable = optional(string)<br> search_idle_after = optional(string)<br> search_slowlog_level = optional(string)<br> search_slowlog_threshold_fetch_info = optional(string)<br> search_slowlog_threshold_fetch_debug = optional(string)<br> search_slowlog_threshold_fetch_trace = optional(string)<br> search_slowlog_threshold_fetch_warn = optional(string)<br> search_slowlog_threshold_query_debug = optional(string)<br> search_slowlog_threshold_query_info = optional(string)<br> search_slowlog_threshold_query_trace = optional(string)<br> search_slowlog_threshold_query_warn = optional(string)<br> shard_check_on_startup = optional(string)<br> sort_field = optional(string)<br> sort_order = optional(string)<br> }))</pre> | `{}` | no |
148177
| <a name="input_ism_policies"></a> [ism\_policies](#input\_ism\_policies) | A map of all ISM policies to create. | `map(any)` | `{}` | no |
149178
| <a name="input_ism_policy_files"></a> [ism\_policy\_files](#input\_ism\_policy\_files) | A set of all ISM policy files to create. | `set(string)` | `[]` | no |
150179
| <a name="input_log_streams_enabled"></a> [log\_streams\_enabled](#input\_log\_streams\_enabled) | Configuration for which log streams to enable sending logs to CloudWatch. | `map(string)` | <pre>{<br> "AUDIT_LOGS": "false",<br> "ES_APPLICATION_LOGS": "false",<br> "INDEX_SLOW_LOGS": "false",<br> "SEARCH_SLOW_LOGS": "false"<br>}</pre> | no |

index.tf

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,66 @@
11
resource "opensearch_index" "index" {
22
for_each = local.indices
33

4-
name = each.key
5-
number_of_shards = try(each.value.number_of_shards, "")
6-
number_of_replicas = try(each.value.number_of_replicas, "")
7-
refresh_interval = try(each.value.refresh_interval, "")
8-
mappings = jsonencode(try(each.value.mappings, {}))
9-
aliases = jsonencode(try(each.value.aliases, {}))
10-
force_destroy = true
4+
name = each.key
5+
number_of_shards = try(each.value.number_of_shards, "")
6+
number_of_replicas = try(each.value.number_of_replicas, "")
7+
refresh_interval = try(each.value.refresh_interval, "")
8+
mappings = jsonencode(try(each.value.mappings, {}))
9+
aliases = jsonencode(try(each.value.aliases, {}))
10+
analysis_analyzer = try(each.value.analysis_analyzer, null)
11+
analysis_char_filter = try(each.value.analysis_char_filter, null)
12+
analysis_filter = try(each.value.analysis_filter, null)
13+
analysis_normalizer = try(each.value.analysis_normalizer, null)
14+
analysis_tokenizer = try(each.value.analysis_tokenizer, null)
15+
analyze_max_token_count = try(each.value.analyze_max_token_count, null)
16+
auto_expand_replicas = try(each.value.auto_expand_replicas, null)
17+
blocks_metadata = try(each.value.blocks_metadata, null)
18+
blocks_read = try(each.value.blocks_read, null)
19+
blocks_read_only = try(each.value.blocks_read_only, null)
20+
blocks_read_only_allow_delete = try(each.value.blocks_read_only_allow_delete, null)
21+
blocks_write = try(each.value.blocks_write, null)
22+
codec = try(each.value.codec, null)
23+
default_pipeline = try(each.value.default_pipeline, null)
24+
gc_deletes = try(each.value.gc_deletes, null)
25+
highlight_max_analyzed_offset = try(each.value.highlight_max_analyzed_offset, null)
26+
include_type_name = try(each.value.include_type_name, null)
27+
index_similarity_default = try(each.value.index_similarity_default, null)
28+
indexing_slowlog_level = try(each.value.indexing_slowlog_level, null)
29+
indexing_slowlog_source = try(each.value.indexing_slowlog_source, null)
30+
indexing_slowlog_threshold_index_debug = try(each.value.indexing_slowlog_threshold_index_debug, null)
31+
indexing_slowlog_threshold_index_info = try(each.value.indexing_slowlog_threshold_index_info, null)
32+
indexing_slowlog_threshold_index_trace = try(each.value.indexing_slowlog_threshold_index_trace, null)
33+
indexing_slowlog_threshold_index_warn = try(each.value.indexing_slowlog_threshold_index_warn, null)
34+
load_fixed_bitset_filters_eagerly = try(each.value.load_fixed_bitset_filters_eagerly, null)
35+
max_docvalue_fields_search = try(each.value.max_docvalue_fields_search, null)
36+
max_inner_result_window = try(each.value.max_inner_result_window, null)
37+
max_ngram_diff = try(each.value.max_ngram_diff, null)
38+
max_refresh_listeners = try(each.value.max_refresh_listeners, null)
39+
max_regex_length = try(each.value.max_regex_length, null)
40+
max_rescore_window = try(each.value.max_rescore_window, null)
41+
max_result_window = try(each.value.max_result_window, null)
42+
max_script_fields = try(each.value.max_script_fields, null)
43+
max_shingle_diff = try(each.value.max_shingle_diff, null)
44+
max_terms_count = try(each.value.max_terms_count, null)
45+
number_of_routing_shards = try(each.value.number_of_routing_shards, null)
46+
rollover_alias = try(each.value.rollover_alias, null)
47+
routing_allocation_enable = try(each.value.routing_allocation_enable, null)
48+
routing_partition_size = try(each.value.routing_partition_size, null)
49+
routing_rebalance_enable = try(each.value.routing_rebalance_enable, null)
50+
search_idle_after = try(each.value.search_idle_after, null)
51+
search_slowlog_level = try(each.value.search_slowlog_level, null)
52+
search_slowlog_threshold_fetch_debug = try(each.value.search_slowlog_threshold_fetch_debug, null)
53+
search_slowlog_threshold_fetch_info = try(each.value.search_slowlog_threshold_fetch_info, null)
54+
search_slowlog_threshold_fetch_trace = try(each.value.search_slowlog_threshold_fetch_trace, null)
55+
search_slowlog_threshold_fetch_warn = try(each.value.search_slowlog_threshold_fetch_warn, null)
56+
search_slowlog_threshold_query_debug = try(each.value.search_slowlog_threshold_query_debug, null)
57+
search_slowlog_threshold_query_info = try(each.value.search_slowlog_threshold_query_info, null)
58+
search_slowlog_threshold_query_trace = try(each.value.search_slowlog_threshold_query_trace, null)
59+
search_slowlog_threshold_query_warn = try(each.value.search_slowlog_threshold_query_warn, null)
60+
shard_check_on_startup = try(each.value.shard_check_on_startup, null)
61+
sort_field = try(each.value.sort_field, null)
62+
sort_order = try(each.value.sort_order, null)
63+
force_destroy = true
1164

1265
depends_on = [
1366
opensearch_index_template.index_template,

variables.tf

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,67 @@ variable "ism_policy_files" {
237237

238238
variable "indices" {
239239
description = "A map of all indices to create."
240-
type = map(any)
241-
default = {}
240+
type = map(object({
241+
number_of_shards = optional(number)
242+
number_of_replicas = optional(number)
243+
refresh_interval = optional(string)
244+
mappings = optional(any, {})
245+
aliases = optional(any, {})
246+
analysis_analyzer = optional(string)
247+
analysis_char_filter = optional(string)
248+
analysis_filter = optional(string)
249+
analysis_normalizer = optional(string)
250+
analysis_tokenizer = optional(string)
251+
analyze_max_token_count = optional(string)
252+
auto_expand_replicas = optional(string)
253+
blocks_metadata = optional(bool)
254+
blocks_read = optional(bool)
255+
blocks_read_only = optional(bool)
256+
blocks_read_only_allow_delete = optional(bool)
257+
blocks_write = optional(bool)
258+
codec = optional(string)
259+
default_pipeline = optional(string)
260+
gc_deletes = optional(string)
261+
highlight_max_analyzed_offset = optional(string)
262+
include_type_name = optional(string)
263+
index_similarity_default = optional(string)
264+
indexing_slowlog_level = optional(string)
265+
indexing_slowlog_source = optional(string)
266+
indexing_slowlog_threshold_index_debug = optional(string)
267+
indexing_slowlog_threshold_index_info = optional(string)
268+
indexing_slowlog_threshold_index_trace = optional(string)
269+
indexing_slowlog_threshold_index_warn = optional(string)
270+
load_fixed_bitset_filters_eagerly = optional(bool)
271+
max_docvalue_fields_search = optional(string)
272+
max_inner_result_window = optional(string)
273+
max_ngram_diff = optional(string)
274+
max_refresh_listeners = optional(string)
275+
max_regex_length = optional(string)
276+
max_rescore_window = optional(string)
277+
max_result_window = optional(string)
278+
max_script_fields = optional(string)
279+
max_shingle_diff = optional(string)
280+
max_terms_count = optional(string)
281+
number_of_routing_shards = optional(string)
282+
rollover_alias = optional(string)
283+
routing_allocation_enable = optional(string)
284+
routing_partition_size = optional(string)
285+
routing_rebalance_enable = optional(string)
286+
search_idle_after = optional(string)
287+
search_slowlog_level = optional(string)
288+
search_slowlog_threshold_fetch_info = optional(string)
289+
search_slowlog_threshold_fetch_debug = optional(string)
290+
search_slowlog_threshold_fetch_trace = optional(string)
291+
search_slowlog_threshold_fetch_warn = optional(string)
292+
search_slowlog_threshold_query_debug = optional(string)
293+
search_slowlog_threshold_query_info = optional(string)
294+
search_slowlog_threshold_query_trace = optional(string)
295+
search_slowlog_threshold_query_warn = optional(string)
296+
shard_check_on_startup = optional(string)
297+
sort_field = optional(string)
298+
sort_order = optional(string)
299+
}))
300+
default = {}
242301
}
243302

244303
variable "index_files" {

versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
terraform {
2-
required_version = ">= 1.0.0"
2+
required_version = ">= 1.3.0"
33

44
required_providers {
55
aws = {

0 commit comments

Comments
 (0)