Skip to content

Commit 53c0214

Browse files
Seung Yeon Joopvkrishnachaitanya
authored andcommitted
Added - Support for OpenSearch OBO metering for external customers
1 parent cda1294 commit 53c0214

14 files changed

+525
-23
lines changed

examples/opensearch/opensearch_cluster_pipeline/main.tf

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,12 @@ variable "opensearch_cluster_pipeline_opc_dry_run" {
7676
default = false
7777
}
7878

79+
variable "opensearch_cluster_pipeline_node_shape" {
80+
default = "VM.Standard.E3.Flex"
81+
}
82+
7983
locals {
80-
pipeline_configuration_body = "version: 2\npipeline_configurations:\n oci:\n secrets:\n opensearch-username:\n secret_id: ocid1.vaultsecret.oc1.iad.amaaaaaahngrfpyagmlx4uz56urywg2rlenjwpdjuis6ncnzl4sfixltrxsq\n refresh_interval: PT2H\n opensearch-password:\n secret_id: ocid1.vaultsecret.oc1.iad.amaaaaaahngrfpya5t4a2yhoqwbqg7rahhesrjuxjgyz2enopd6vkn2e5q7q\n refresh_interval: PT2H\najapraka-log-pipeline:\n source:\n oci-object:\n acknowledgments: true\n codec:\n newline:\n compression: none\n scan:\n scheduling:\n interval: PT30S\n buckets:\n - bucket:\n namespace: idv3bncjikjv\n name: data_prepper_integration_test_object_storage_source_bucket_0\n region: us-ashburn-1\n sink:\n - opensearch:\n hosts: [ ocid1.opensearchcluster.oc1.iad.amaaaaaahngrfpyazkwqhgnvrdtzr74fyl4nocmdw6qetnhdmqcx7baoe4zq ]\n username: $${{oci_secrets:opensearch-username}}\n password: $${{oci_secrets:opensearch-password}}\n insecure: false\n index: pipeline-stage-testing-index-1"
84+
pipeline_configuration_body = "version: 2\npipeline_configurations:\n oci:\n secrets:\n opensearch-username:\n secret_id: {{username-vaultsecret}}\n refresh_interval: PT2H\n opensearch-password:\n secret_id: {{password-vaultsecret}}\n refresh_interval: PT2H\najapraka-log-pipeline:\n source:\n oci-object:\n acknowledgments: true\n codec:\n newline:\n compression: none\n scan:\n scheduling:\n interval: PT30S\n buckets:\n - bucket:\n namespace: idv3bncjikjv\n name: data_prepper_integration_test_object_storage_source_bucket_0\n region: us-ashburn-1\n sink:\n - opensearch:\n hosts: [ {{clusterOCID}} ]\n username: $${{oci_secrets:opensearch-username}}\n password: $${{oci_secrets:opensearch-password}}\n insecure: false\n index: pipeline-stage-testing-index-1"
8185
}
8286

8387
variable "opensearch_cluster_pipeline_reverse_connection_endpoints_customer_fqdn" {

internal/integrationtest/opensearch_opensearch_cluster_pipeline_test.go

Lines changed: 13 additions & 8 deletions
Large diffs are not rendered by default.

internal/integrationtest/opensearch_opensearch_cluster_test.go

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ var (
4949
}
5050

5151
OpensearchOpensearchClusterRepresentation = map[string]interface{}{
52+
"opendashboard_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
53+
"master_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
54+
"data_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
55+
"search_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
56+
"search_node_count": acctest.Representation{RepType: acctest.Required, Create: `1`},
57+
"search_node_host_memory_gb": acctest.Representation{RepType: acctest.Required, Create: `20`},
58+
"search_node_host_ocpu_count": acctest.Representation{RepType: acctest.Required, Create: `2`},
59+
"search_node_host_type": acctest.Representation{RepType: acctest.Required, Create: `FLEX`},
60+
"search_node_storage_gb": acctest.Representation{RepType: acctest.Required, Create: `50`},
5261
"maintenance_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: OpensearchOpensearchClusterMaintenanceDetailsRepresentation},
5362
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
5463
"data_node_count": acctest.Representation{RepType: acctest.Required, Create: `1`},
@@ -197,8 +206,17 @@ var (
197206
}
198207

199208
OpensearchOpensearchClusterHorizontalResizeRepresentation = map[string]interface{}{
209+
"opendashboard_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
210+
"master_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
211+
"data_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
212+
"search_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`},
200213
"maintenance_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: OpensearchOpensearchClusterMaintenanceDetailsRepresentation},
201214
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
215+
"search_node_count": acctest.Representation{RepType: acctest.Required, Create: `1`, Update: `2`},
216+
"search_node_host_memory_gb": acctest.Representation{RepType: acctest.Required, Create: `20`},
217+
"search_node_host_ocpu_count": acctest.Representation{RepType: acctest.Required, Create: `2`},
218+
"search_node_host_type": acctest.Representation{RepType: acctest.Required, Create: `FLEX`},
219+
"search_node_storage_gb": acctest.Representation{RepType: acctest.Required, Create: `50`},
202220
"data_node_count": acctest.Representation{RepType: acctest.Required, Create: `1`, Update: `2`},
203221
"data_node_host_memory_gb": acctest.Representation{RepType: acctest.Required, Create: `20`},
204222
"data_node_host_ocpu_count": acctest.Representation{RepType: acctest.Required, Create: `2`},
@@ -224,8 +242,17 @@ var (
224242
}
225243

226244
OpensearchOpensearchClusterVerticalResizeRepresentation = map[string]interface{}{
245+
"opendashboard_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`, Update: `VM.Standard.E4.Flex`},
246+
"master_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`, Update: `VM.Standard.E4.Flex`},
247+
"data_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`, Update: `VM.Standard.E4.Flex`},
248+
"search_node_host_shape": acctest.Representation{RepType: acctest.Optional, Create: `VM.Standard.E3.Flex`, Update: `VM.Standard.E4.Flex`},
227249
"maintenance_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: OpensearchOpensearchClusterMaintenanceDetailsRepresentation},
228250
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
251+
"search_node_count": acctest.Representation{RepType: acctest.Required, Create: `1`, Update: `2`},
252+
"search_node_host_memory_gb": acctest.Representation{RepType: acctest.Required, Create: `20`},
253+
"search_node_host_ocpu_count": acctest.Representation{RepType: acctest.Required, Create: `2`},
254+
"search_node_host_type": acctest.Representation{RepType: acctest.Required, Create: `FLEX`},
255+
"search_node_storage_gb": acctest.Representation{RepType: acctest.Required, Create: `50`},
229256
"data_node_count": acctest.Representation{RepType: acctest.Required, Create: `1`, Update: `2`},
230257
"data_node_host_memory_gb": acctest.Representation{RepType: acctest.Required, Create: `20`, Update: `40`},
231258
"data_node_host_ocpu_count": acctest.Representation{RepType: acctest.Required, Create: `2`, Update: `4`},
@@ -640,12 +667,21 @@ func TestOpensearchOpensearchClusterResource_basic(t *testing.T) {
640667
Config: config + compartmentIdVariableStr + OpensearchOpensearchClusterResourceDependencies +
641668
acctest.GenerateResourceFromRepresentationMap("oci_opensearch_opensearch_cluster", "test_opensearch_cluster", acctest.Optional, acctest.Create, OpensearchOpensearchClusterRepresentation),
642669
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
670+
resource.TestCheckResourceAttr(resourceName, "data_node_host_shape", "VM.Standard.E3.Flex"),
671+
resource.TestCheckResourceAttr(resourceName, "master_node_host_shape", "VM.Standard.E3.Flex"),
672+
resource.TestCheckResourceAttr(resourceName, "opendashboard_node_host_shape", "VM.Standard.E3.Flex"),
673+
resource.TestCheckResourceAttr(resourceName, "search_node_host_shape", "VM.Standard.E3.Flex"),
643674
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
644675
resource.TestCheckResourceAttr(resourceName, "data_node_count", "1"),
645676
resource.TestCheckResourceAttr(resourceName, "data_node_host_memory_gb", "20"),
646677
resource.TestCheckResourceAttr(resourceName, "data_node_host_ocpu_count", "2"),
647678
resource.TestCheckResourceAttr(resourceName, "data_node_host_type", "FLEX"),
648679
resource.TestCheckResourceAttr(resourceName, "data_node_storage_gb", "50"),
680+
resource.TestCheckResourceAttr(resourceName, "search_node_count", "1"),
681+
resource.TestCheckResourceAttr(resourceName, "search_node_host_memory_gb", "20"),
682+
resource.TestCheckResourceAttr(resourceName, "search_node_host_ocpu_count", "2"),
683+
resource.TestCheckResourceAttr(resourceName, "search_node_host_type", "FLEX"),
684+
resource.TestCheckResourceAttr(resourceName, "search_node_storage_gb", "50"),
649685
resource.TestCheckResourceAttr(resourceName, "display_name", "tf_provider_cluster_updated"),
650686
resource.TestCheckResourceAttr(resourceName, "master_node_count", "1"),
651687
resource.TestCheckResourceAttr(resourceName, "master_node_host_memory_gb", "20"),
@@ -684,6 +720,15 @@ func TestOpensearchOpensearchClusterResource_basic(t *testing.T) {
684720
return configStr
685721
}(),
686722
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
723+
resource.TestCheckResourceAttr(resourceName, "data_node_host_shape", "VM.Standard.E3.Flex"),
724+
resource.TestCheckResourceAttr(resourceName, "master_node_host_shape", "VM.Standard.E3.Flex"),
725+
resource.TestCheckResourceAttr(resourceName, "opendashboard_node_host_shape", "VM.Standard.E3.Flex"),
726+
resource.TestCheckResourceAttr(resourceName, "search_node_host_shape", "VM.Standard.E3.Flex"),
727+
resource.TestCheckResourceAttr(resourceName, "search_node_count", "2"),
728+
resource.TestCheckResourceAttr(resourceName, "search_node_host_memory_gb", "20"),
729+
resource.TestCheckResourceAttr(resourceName, "search_node_host_ocpu_count", "2"),
730+
resource.TestCheckResourceAttr(resourceName, "search_node_host_type", "FLEX"),
731+
resource.TestCheckResourceAttr(resourceName, "search_node_storage_gb", "50"),
687732
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
688733
resource.TestCheckResourceAttr(resourceName, "data_node_count", "2"),
689734
resource.TestCheckResourceAttr(resourceName, "data_node_host_memory_gb", "20"),
@@ -736,8 +781,16 @@ func TestOpensearchOpensearchClusterResource_basic(t *testing.T) {
736781
return configStr
737782
}(),
738783
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
739-
784+
resource.TestCheckResourceAttr(resourceName, "data_node_host_shape", "VM.Standard.E4.Flex"),
785+
resource.TestCheckResourceAttr(resourceName, "master_node_host_shape", "VM.Standard.E4.Flex"),
786+
resource.TestCheckResourceAttr(resourceName, "opendashboard_node_host_shape", "VM.Standard.E4.Flex"),
787+
resource.TestCheckResourceAttr(resourceName, "search_node_host_shape", "VM.Standard.E4.Flex"),
740788
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
789+
resource.TestCheckResourceAttr(resourceName, "search_node_count", "2"),
790+
resource.TestCheckResourceAttr(resourceName, "search_node_host_memory_gb", "20"),
791+
resource.TestCheckResourceAttr(resourceName, "search_node_host_ocpu_count", "2"),
792+
resource.TestCheckResourceAttr(resourceName, "search_node_host_type", "FLEX"),
793+
resource.TestCheckResourceAttr(resourceName, "search_node_storage_gb", "50"),
741794
resource.TestCheckResourceAttr(resourceName, "data_node_count", "2"),
742795
resource.TestCheckResourceAttr(resourceName, "data_node_host_memory_gb", "40"),
743796
resource.TestCheckResourceAttr(resourceName, "data_node_host_ocpu_count", "4"),
@@ -991,6 +1044,22 @@ func init() {
9911044
}
9921045
}
9931046

1047+
func getListOpensearchClusterShapes() ([]string, error) {
1048+
var shapes []string
1049+
opensearchClusterClient := acctest.GetTestClients(&schema.ResourceData{}).OpensearchClusterClient()
1050+
listOpensearchClusterShapesRequest := oci_opensearch.ListOpensearchClusterShapesRequest{}
1051+
1052+
listOpensearchClustersResponse, err := opensearchClusterClient.ListOpensearchClusterShapes(context.Background(), listOpensearchClusterShapesRequest)
1053+
1054+
if err != nil {
1055+
return shapes, fmt.Errorf("Error getting OpensearchCluster list %s \n", err)
1056+
}
1057+
for _, shape := range listOpensearchClustersResponse.Shapes {
1058+
shapes = append(shapes, shape)
1059+
}
1060+
return shapes, nil
1061+
}
1062+
9941063
func sweepOpensearchOpensearchClusterResource(compartment string) error {
9951064
opensearchClusterClient := acctest.GetTestClients(&schema.ResourceData{}).OpensearchClusterClient()
9961065
opensearchClusterIds, err := getOpensearchOpensearchClusterIds(compartment)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-testing/terraform"
11+
12+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
13+
14+
"github.com/oracle/terraform-provider-oci/httpreplay"
15+
"github.com/oracle/terraform-provider-oci/internal/acctest"
16+
)
17+
18+
// issue-routing-tag: opensearch/default
19+
func TestOpensearchShapeResource_basic(t *testing.T) {
20+
httpreplay.SetScenario("TestOpensearchShapeResource_basic")
21+
defer httpreplay.SaveScenario()
22+
23+
config := acctest.ProviderTestConfig()
24+
25+
acctest.SaveConfigContent("", "", "", t)
26+
27+
shapes, err := getListOpensearchClusterShapes()
28+
if err != nil {
29+
_ = fmt.Errorf("Error getting OpensearchCluster list for compartment id : %s , %s \n", compartmentId, err)
30+
}
31+
32+
acctest.ResourceTest(t, nil, []resource.TestStep{
33+
{
34+
Config: config,
35+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
36+
testCheckShapesNotEmpty(shapes),
37+
),
38+
},
39+
})
40+
}
41+
func testCheckShapesNotEmpty(shapes []string) resource.TestCheckFunc {
42+
return func(s *terraform.State) error {
43+
if len(shapes) == 0 {
44+
return fmt.Errorf("expected at least one shape, but got none")
45+
}
46+
return nil
47+
}
48+
}

internal/service/opensearch/opensearch_opensearch_cluster_data_source.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ func (s *OpensearchOpensearchClusterDataSourceCrud) SetData() error {
8989
s.D.Set("data_node_host_ocpu_count", *s.Res.DataNodeHostOcpuCount)
9090
}
9191

92+
if s.Res.DataNodeHostShape != nil {
93+
s.D.Set("data_node_host_shape", *s.Res.DataNodeHostShape)
94+
}
95+
9296
s.D.Set("data_node_host_type", s.Res.DataNodeHostType)
9397

9498
if s.Res.DataNodeStorageGB != nil {
@@ -137,6 +141,10 @@ func (s *OpensearchOpensearchClusterDataSourceCrud) SetData() error {
137141
s.D.Set("master_node_host_ocpu_count", *s.Res.MasterNodeHostOcpuCount)
138142
}
139143

144+
if s.Res.MasterNodeHostShape != nil {
145+
s.D.Set("master_node_host_shape", *s.Res.MasterNodeHostShape)
146+
}
147+
140148
s.D.Set("master_node_host_type", s.Res.MasterNodeHostType)
141149

142150
if s.Res.OpendashboardFqdn != nil {
@@ -155,6 +163,10 @@ func (s *OpensearchOpensearchClusterDataSourceCrud) SetData() error {
155163
s.D.Set("opendashboard_node_host_ocpu_count", *s.Res.OpendashboardNodeHostOcpuCount)
156164
}
157165

166+
if s.Res.OpendashboardNodeHostShape != nil {
167+
s.D.Set("opendashboard_node_host_shape", *s.Res.OpendashboardNodeHostShape)
168+
}
169+
158170
if s.Res.OpendashboardPrivateIp != nil {
159171
s.D.Set("opendashboard_private_ip", *s.Res.OpendashboardPrivateIp)
160172
}
@@ -181,6 +193,28 @@ func (s *OpensearchOpensearchClusterDataSourceCrud) SetData() error {
181193
}
182194
s.D.Set("reverse_connection_endpoints", reverseConnectionEndpoints)
183195

196+
if s.Res.SearchNodeCount != nil {
197+
s.D.Set("search_node_count", *s.Res.SearchNodeCount)
198+
}
199+
200+
if s.Res.SearchNodeHostMemoryGB != nil {
201+
s.D.Set("search_node_host_memory_gb", *s.Res.SearchNodeHostMemoryGB)
202+
}
203+
204+
if s.Res.SearchNodeHostOcpuCount != nil {
205+
s.D.Set("search_node_host_ocpu_count", *s.Res.SearchNodeHostOcpuCount)
206+
}
207+
208+
if s.Res.SearchNodeHostShape != nil {
209+
s.D.Set("search_node_host_shape", *s.Res.SearchNodeHostShape)
210+
}
211+
212+
s.D.Set("search_node_host_type", s.Res.SearchNodeHostType)
213+
214+
if s.Res.SearchNodeStorageGB != nil {
215+
s.D.Set("search_node_storage_gb", *s.Res.SearchNodeStorageGB)
216+
}
217+
184218
if s.Res.SecurityMasterUserName != nil {
185219
s.D.Set("security_master_user_name", *s.Res.SecurityMasterUserName)
186220
}
@@ -195,6 +229,10 @@ func (s *OpensearchOpensearchClusterDataSourceCrud) SetData() error {
195229
s.D.Set("software_version", *s.Res.SoftwareVersion)
196230
}
197231

232+
if s.Res.SecuritySamlConfig != nil {
233+
s.D.Set("security_saml_config", *s.Res.SecuritySamlConfig)
234+
}
235+
198236
s.D.Set("state", s.Res.LifecycleState)
199237

200238
if s.Res.SubnetCompartmentId != nil {

internal/service/opensearch/opensearch_opensearch_cluster_pipeline_data_source.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ func (s *OpensearchOpensearchClusterPipelineDataSourceCrud) SetData() error {
9292
s.D.Set("node_count", *s.Res.NodeCount)
9393
}
9494

95+
if s.Res.NodeShape != nil {
96+
s.D.Set("node_shape", *s.Res.NodeShape)
97+
}
98+
9599
if s.Res.NsgId != nil {
96100
s.D.Set("nsg_id", *s.Res.NsgId)
97101
}

internal/service/opensearch/opensearch_opensearch_cluster_pipeline_resource.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ func OpensearchOpensearchClusterPipelineResource() *schema.Resource {
7979
Computed: true,
8080
Elem: schema.TypeString,
8181
},
82+
"node_shape": {
83+
Type: schema.TypeString,
84+
Optional: true,
85+
Computed: true,
86+
},
8287
"nsg_id": {
8388
Type: schema.TypeString,
8489
Optional: true,
@@ -279,6 +284,11 @@ func (s *OpensearchOpensearchClusterPipelineResourceCrud) Create() error {
279284
request.NodeCount = &tmp
280285
}
281286

287+
if nodeShape, ok := s.D.GetOkExists("node_shape"); ok {
288+
tmp := nodeShape.(string)
289+
request.NodeShape = &tmp
290+
}
291+
282292
if nsgId, ok := s.D.GetOkExists("nsg_id"); ok {
283293
tmp := nsgId.(string)
284294
request.NsgId = &tmp
@@ -531,6 +541,11 @@ func (s *OpensearchOpensearchClusterPipelineResourceCrud) Update() error {
531541
request.NodeCount = &tmp
532542
}
533543

544+
if nodeShape, ok := s.D.GetOkExists("node_shape"); ok {
545+
tmp := nodeShape.(string)
546+
request.NodeShape = &tmp
547+
}
548+
534549
if nsgId, ok := s.D.GetOkExists("nsg_id"); ok {
535550
tmp := nsgId.(string)
536551
request.NsgId = &tmp
@@ -649,6 +664,10 @@ func (s *OpensearchOpensearchClusterPipelineResourceCrud) SetData() error {
649664
s.D.Set("node_count", *s.Res.NodeCount)
650665
}
651666

667+
if s.Res.NodeShape != nil {
668+
s.D.Set("node_shape", *s.Res.NodeShape)
669+
}
670+
652671
if s.Res.NsgId != nil {
653672
s.D.Set("nsg_id", *s.Res.NsgId)
654673
}
@@ -743,6 +762,10 @@ func OpensearchClusterPipelineSummaryToMap(obj oci_opensearch.OpensearchClusterP
743762
result["node_count"] = int(*obj.NodeCount)
744763
}
745764

765+
if obj.NodeShape != nil {
766+
result["node_shape"] = string(*obj.NodeShape)
767+
}
768+
746769
if obj.OcpuCount != nil {
747770
result["ocpu_count"] = int(*obj.OcpuCount)
748771
}

0 commit comments

Comments
 (0)