Skip to content

Commit dad6352

Browse files
Sanjay Zagadesagarp337
authored andcommitted
Added - filter to ListSystemVersions api to get Latest Versions only
1 parent 87797fb commit dad6352

10 files changed

+344
-4
lines changed

internal/integrationtest/database_gi_version_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import (
1717
var (
1818
DatabaseDatabaseGiVersionDataSourceRepresentation = map[string]interface{}{
1919
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
20-
"shape": acctest.Representation{RepType: acctest.Required, Create: `ExadataCC.Quarter3.100`},
21-
"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
20+
"availability_domain": acctest.Representation{RepType: acctest.Optional, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
21+
"resource_id": acctest.Representation{RepType: acctest.Optional, Create: `resource_id`},
22+
"shape": acctest.Representation{RepType: acctest.Optional, Create: `ExadataCC.Quarter3.100`},
2223
}
2324

2425
DatabaseGiVersionResourceConfig = AvailabilityDomainConfig
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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/helper/resource"
11+
12+
"github.com/oracle/terraform-provider-oci/httpreplay"
13+
"github.com/oracle/terraform-provider-oci/internal/acctest"
14+
15+
"github.com/oracle/terraform-provider-oci/internal/utils"
16+
)
17+
18+
var (
19+
DatabaseSystemVersionMinorVersionDataSourceRepresentation = map[string]interface{}{
20+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
21+
"gi_version": acctest.Representation{RepType: acctest.Required, Create: `18.0.0.0`},
22+
"major_version": acctest.Representation{RepType: acctest.Required, Create: `23`},
23+
"is_latest": acctest.Representation{RepType: acctest.Optional, Create: `false`},
24+
"resource_id": acctest.Representation{RepType: acctest.Optional, Create: `resource_id`},
25+
"shape": acctest.Representation{RepType: acctest.Required, Create: `Exadata.X9M`},
26+
}
27+
28+
DatabaseSystemVersionMinorVersionResourceConfig = ""
29+
)
30+
31+
// issue-routing-tag: database/default
32+
func TestDatabaseSystemVersionMinorVersionResource_basic(t *testing.T) {
33+
httpreplay.SetScenario("TestDatabaseSystemVersionMinorVersionResource_basic")
34+
defer httpreplay.SaveScenario()
35+
36+
config := acctest.ProviderTestConfig()
37+
38+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
39+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
40+
41+
datasourceName := "data.oci_database_system_version_minor_versions.test_system_version_minor_versions"
42+
43+
acctest.SaveConfigContent("", "", "", t)
44+
45+
acctest.ResourceTest(t, nil, []resource.TestStep{
46+
// verify datasource
47+
{
48+
Config: config +
49+
acctest.GenerateDataSourceFromRepresentationMap("oci_database_system_version_minor_versions", "test_system_version_minor_versions", acctest.Required, acctest.Create, DatabaseSystemVersionMinorVersionDataSourceRepresentation) +
50+
compartmentIdVariableStr + DatabaseSystemVersionMinorVersionResourceConfig,
51+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
52+
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
53+
resource.TestCheckResourceAttrSet(datasourceName, "system_version_minor_version_collection.#"),
54+
),
55+
},
56+
})
57+
}

internal/integrationtest/database_system_version_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ var (
1919
DatabaseSystemVersionDataSourceRepresentation = map[string]interface{}{
2020
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
2121
"gi_version": acctest.Representation{RepType: acctest.Required, Create: `18.0.0.0`},
22+
"is_latest": acctest.Representation{RepType: acctest.Optional, Create: `false`},
23+
"resource_id": acctest.Representation{RepType: acctest.Optional, Create: `resource_id`},
2224
"shape": acctest.Representation{RepType: acctest.Required, Create: `Exadata.X9M`},
2325
}
2426

internal/service/database/database_gi_versions_data_source.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ func DatabaseGiVersionsDataSource() *schema.Resource {
2626
Type: schema.TypeString,
2727
Required: true,
2828
},
29+
"resource_id": {
30+
Type: schema.TypeString,
31+
Optional: true,
32+
},
2933
"shape": {
3034
Type: schema.TypeString,
3135
Optional: true,
@@ -82,6 +86,11 @@ func (s *DatabaseGiVersionsDataSourceCrud) Get() error {
8286
request.CompartmentId = &tmp
8387
}
8488

89+
if resourceId, ok := s.D.GetOkExists("resource_id"); ok {
90+
tmp := resourceId.(string)
91+
request.ResourceId = &tmp
92+
}
93+
8594
if shape, ok := s.D.GetOkExists("shape"); ok {
8695
tmp := shape.(string)
8796
request.Shape = &tmp
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
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 database
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
oci_database "github.com/oracle/oci-go-sdk/v65/database"
11+
12+
"github.com/oracle/terraform-provider-oci/internal/client"
13+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
14+
)
15+
16+
func DatabaseSystemVersionMinorVersionsDataSource() *schema.Resource {
17+
return &schema.Resource{
18+
Read: readDatabaseSystemVersionMinorVersions,
19+
Schema: map[string]*schema.Schema{
20+
"filter": tfresource.DataSourceFiltersSchema(),
21+
"compartment_id": {
22+
Type: schema.TypeString,
23+
Required: true,
24+
},
25+
"gi_version": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
},
29+
"is_latest": {
30+
Type: schema.TypeBool,
31+
Optional: true,
32+
},
33+
"major_version": {
34+
Type: schema.TypeString,
35+
Required: true,
36+
},
37+
"resource_id": {
38+
Type: schema.TypeString,
39+
Optional: true,
40+
},
41+
"shape": {
42+
Type: schema.TypeString,
43+
Optional: true,
44+
},
45+
"system_version_minor_version_collection": {
46+
Type: schema.TypeList,
47+
Computed: true,
48+
Elem: &schema.Resource{
49+
Schema: map[string]*schema.Schema{
50+
// Required
51+
52+
// Optional
53+
54+
// Computed
55+
"items": {
56+
Type: schema.TypeList,
57+
Computed: true,
58+
Elem: &schema.Resource{
59+
Schema: map[string]*schema.Schema{
60+
// Required
61+
62+
// Optional
63+
64+
// Computed
65+
"version": {
66+
Type: schema.TypeString,
67+
Computed: true,
68+
},
69+
},
70+
},
71+
},
72+
},
73+
},
74+
},
75+
},
76+
}
77+
}
78+
79+
func readDatabaseSystemVersionMinorVersions(d *schema.ResourceData, m interface{}) error {
80+
sync := &DatabaseSystemVersionMinorVersionsDataSourceCrud{}
81+
sync.D = d
82+
sync.Client = m.(*client.OracleClients).DatabaseClient()
83+
84+
return tfresource.ReadResource(sync)
85+
}
86+
87+
type DatabaseSystemVersionMinorVersionsDataSourceCrud struct {
88+
D *schema.ResourceData
89+
Client *oci_database.DatabaseClient
90+
Res *oci_database.ListSystemVersionMinorVersionsResponse
91+
}
92+
93+
func (s *DatabaseSystemVersionMinorVersionsDataSourceCrud) VoidState() {
94+
s.D.SetId("")
95+
}
96+
97+
func (s *DatabaseSystemVersionMinorVersionsDataSourceCrud) Get() error {
98+
request := oci_database.ListSystemVersionMinorVersionsRequest{}
99+
100+
if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok {
101+
tmp := compartmentId.(string)
102+
request.CompartmentId = &tmp
103+
}
104+
105+
if giVersion, ok := s.D.GetOkExists("gi_version"); ok {
106+
tmp := giVersion.(string)
107+
request.GiVersion = &tmp
108+
}
109+
110+
if isLatest, ok := s.D.GetOkExists("is_latest"); ok {
111+
tmp := isLatest.(bool)
112+
request.IsLatest = &tmp
113+
}
114+
115+
if majorVersion, ok := s.D.GetOkExists("major_version"); ok {
116+
tmp := majorVersion.(string)
117+
request.MajorVersion = &tmp
118+
}
119+
120+
if resourceId, ok := s.D.GetOkExists("resource_id"); ok {
121+
tmp := resourceId.(string)
122+
request.ResourceId = &tmp
123+
}
124+
125+
if shape, ok := s.D.GetOkExists("shape"); ok {
126+
tmp := shape.(string)
127+
request.Shape = &tmp
128+
}
129+
130+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "database")
131+
132+
response, err := s.Client.ListSystemVersionMinorVersions(context.Background(), request)
133+
if err != nil {
134+
return err
135+
}
136+
137+
s.Res = &response
138+
request.Page = s.Res.OpcNextPage
139+
140+
for request.Page != nil {
141+
listResponse, err := s.Client.ListSystemVersionMinorVersions(context.Background(), request)
142+
if err != nil {
143+
return err
144+
}
145+
146+
s.Res.Items = append(s.Res.Items, listResponse.Items...)
147+
request.Page = listResponse.OpcNextPage
148+
}
149+
150+
return nil
151+
}
152+
153+
func (s *DatabaseSystemVersionMinorVersionsDataSourceCrud) SetData() error {
154+
if s.Res == nil {
155+
return nil
156+
}
157+
158+
s.D.SetId(tfresource.GenerateDataSourceHashID("DatabaseSystemVersionMinorVersionsDataSource-", DatabaseSystemVersionMinorVersionsDataSource(), s.D))
159+
resources := []map[string]interface{}{}
160+
systemVersionMinorVersion := map[string]interface{}{}
161+
162+
items := []interface{}{}
163+
for _, item := range s.Res.Items {
164+
items = append(items, SystemVersionMinorVersionSummaryToMap(item))
165+
}
166+
systemVersionMinorVersion["items"] = items
167+
168+
if f, fOk := s.D.GetOkExists("filter"); fOk {
169+
items = tfresource.ApplyFiltersInCollection(f.(*schema.Set), items, DatabaseSystemVersionMinorVersionsDataSource().Schema["system_version_minor_version_collection"].Elem.(*schema.Resource).Schema)
170+
systemVersionMinorVersion["items"] = items
171+
}
172+
173+
resources = append(resources, systemVersionMinorVersion)
174+
if err := s.D.Set("system_version_minor_version_collection", resources); err != nil {
175+
return err
176+
}
177+
178+
return nil
179+
}
180+
181+
func SystemVersionMinorVersionSummaryToMap(obj oci_database.SystemVersionMinorVersionSummary) map[string]interface{} {
182+
result := map[string]interface{}{}
183+
184+
if obj.Version != nil {
185+
result["version"] = string(*obj.Version)
186+
}
187+
188+
return result
189+
}

internal/service/database/database_system_versions_data_source.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,17 @@ func DatabaseSystemVersionsDataSource() *schema.Resource {
2626
Type: schema.TypeString,
2727
Required: true,
2828
},
29+
"is_latest": {
30+
Type: schema.TypeBool,
31+
Optional: true,
32+
},
33+
"resource_id": {
34+
Type: schema.TypeString,
35+
Optional: true,
36+
},
2937
"shape": {
3038
Type: schema.TypeString,
31-
Required: true,
39+
Optional: true,
3240
},
3341
"system_version_collection": {
3442
Type: schema.TypeList,
@@ -106,6 +114,16 @@ func (s *DatabaseSystemVersionsDataSourceCrud) Get() error {
106114
request.GiVersion = &tmp
107115
}
108116

117+
if isLatest, ok := s.D.GetOkExists("is_latest"); ok {
118+
tmp := isLatest.(bool)
119+
request.IsLatest = &tmp
120+
}
121+
122+
if resourceId, ok := s.D.GetOkExists("resource_id"); ok {
123+
tmp := resourceId.(string)
124+
request.ResourceId = &tmp
125+
}
126+
109127
if shape, ok := s.D.GetOkExists("shape"); ok {
110128
tmp := shape.(string)
111129
request.Shape = &tmp

internal/service/database/register_datasource.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ func RegisterDatasource() {
125125
tfresource.RegisterDatasource("oci_database_pluggable_database", DatabasePluggableDatabaseDataSource())
126126
tfresource.RegisterDatasource("oci_database_pluggable_databases", DatabasePluggableDatabasesDataSource())
127127
tfresource.RegisterDatasource("oci_database_scheduled_action", DatabaseScheduledActionDataSource())
128+
tfresource.RegisterDatasource("oci_database_system_version_minor_versions", DatabaseSystemVersionMinorVersionsDataSource())
128129
tfresource.RegisterDatasource("oci_database_scheduled_action_params", DatabaseScheduledActionParamsDataSource())
129130
tfresource.RegisterDatasource("oci_database_scheduled_actions", DatabaseScheduledActionsDataSource())
130131
tfresource.RegisterDatasource("oci_database_scheduling_plan", DatabaseSchedulingPlanDataSource())

website/docs/d/database_gi_versions.html.markdown

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ data "oci_database_gi_versions" "test_gi_versions" {
2121
2222
#Optional
2323
availability_domain = var.gi_version_availability_domain
24+
resource_id = oci_cloud_guard_resource.test_resource.id
2425
shape = var.gi_version_shape
2526
}
2627
```
@@ -31,6 +32,7 @@ The following arguments are supported:
3132

3233
* `availability_domain` - (Optional) The target availability domain. Only passed if the limit is AD-specific.
3334
* `compartment_id` - (Required) The compartment [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm).
35+
* `resource_id` - (Optional) If provided, filters the results for the specified resource Id.
3436
* `shape` - (Optional) If provided, filters the results for the given shape.
3537

3638

0 commit comments

Comments
 (0)