Skip to content

Commit 0dac637

Browse files
Terraform Team AutomationjiaqchenO
authored andcommitted
Added - Support for Replacing hard-coded list of items on dropdowns on the Console with response from an internal API call
1 parent a53aa9f commit 0dac637

10 files changed

+427
-21
lines changed

internal/client/announcements_service_clients.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
func init() {
1313
RegisterOracleClient("oci_announcements_service.AnnouncementSubscriptionClient", &OracleClient{InitClientFn: initAnnouncementsserviceAnnouncementSubscriptionClient})
14+
RegisterOracleClient("oci_announcements_service.ServiceClient", &OracleClient{InitClientFn: initAnnouncementsserviceServiceClient})
1415
}
1516

1617
func initAnnouncementsserviceAnnouncementSubscriptionClient(configProvider oci_common.ConfigurationProvider, configureClient ConfigureClient, serviceClientOverrides ServiceClientOverrides) (interface{}, error) {
@@ -32,3 +33,23 @@ func initAnnouncementsserviceAnnouncementSubscriptionClient(configProvider oci_c
3233
func (m *OracleClients) AnnouncementSubscriptionClient() *oci_announcements_service.AnnouncementSubscriptionClient {
3334
return m.GetClient("oci_announcements_service.AnnouncementSubscriptionClient").(*oci_announcements_service.AnnouncementSubscriptionClient)
3435
}
36+
37+
func initAnnouncementsserviceServiceClient(configProvider oci_common.ConfigurationProvider, configureClient ConfigureClient, serviceClientOverrides ServiceClientOverrides) (interface{}, error) {
38+
client, err := oci_announcements_service.NewServiceClientWithConfigurationProvider(configProvider)
39+
if err != nil {
40+
return nil, err
41+
}
42+
err = configureClient(&client.BaseClient)
43+
if err != nil {
44+
return nil, err
45+
}
46+
47+
if serviceClientOverrides.HostUrlOverride != "" {
48+
client.Host = serviceClientOverrides.HostUrlOverride
49+
}
50+
return &client, nil
51+
}
52+
53+
func (m *OracleClients) ServiceClient() *oci_announcements_service.ServiceClient {
54+
return m.GetClient("oci_announcements_service.ServiceClient").(*oci_announcements_service.ServiceClient)
55+
}

internal/integrationtest/announcements_service_announcement_subscriptions_filter_group_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ func TestAnnouncementsServiceAnnouncementSubscriptionsFilterGroupResource_basic(
6060
resource.TestCheckResourceAttr(resourceName, "filters.0.type", "COMPARTMENT_ID"),
6161
resource.TestCheckResourceAttr(resourceName, "filters.0.value", compartmentId),
6262
resource.TestCheckResourceAttr(resourceName, "name", "fg-name"),
63-
6463
func(s *terraform.State) (err error) {
6564
resId, err = acctest.FromInstanceState(s, resourceName, "id")
6665
if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment {
@@ -83,7 +82,6 @@ func TestAnnouncementsServiceAnnouncementSubscriptionsFilterGroupResource_basic(
8382
resource.TestCheckResourceAttr(resourceName, "filters.0.type", "PLATFORM_TYPE"),
8483
resource.TestCheckResourceAttr(resourceName, "filters.0.value", "IAAS"),
8584
resource.TestCheckResourceAttr(resourceName, "name", "fg-name"),
86-
8785
func(s *terraform.State) (err error) {
8886
resId2, err = acctest.FromInstanceState(s, resourceName, "id")
8987
if resId != resId2 {
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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-sdk/v2/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+
AnnouncementsServiceServiceDataSourceRepresentation = map[string]interface{}{
20+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
21+
"comms_manager_name": acctest.Representation{RepType: acctest.Optional, Create: `CN`},
22+
"platform_type": acctest.Representation{RepType: acctest.Optional, Create: `IAAS`},
23+
}
24+
25+
AnnouncementsServiceServiceResourceConfig = ""
26+
)
27+
28+
// issue-routing-tag: announcements_service/default
29+
func TestAnnouncementsServiceServiceResource_basic(t *testing.T) {
30+
httpreplay.SetScenario("TestAnnouncementsServiceServiceResource_basic")
31+
defer httpreplay.SaveScenario()
32+
33+
config := acctest.ProviderTestConfig()
34+
35+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
36+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
37+
38+
datasourceName := "data.oci_announcements_service_services.test_services"
39+
40+
acctest.SaveConfigContent("", "", "", t)
41+
42+
acctest.ResourceTest(t, nil, []resource.TestStep{
43+
// verify datasource
44+
{
45+
Config: config +
46+
acctest.GenerateDataSourceFromRepresentationMap("oci_announcements_service_services", "test_services", acctest.Required, acctest.Create, AnnouncementsServiceServiceDataSourceRepresentation) +
47+
compartmentIdVariableStr + AnnouncementsServiceServiceResourceConfig,
48+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
49+
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
50+
51+
resource.TestCheckResourceAttrSet(datasourceName, "services_collection.#"),
52+
resource.TestCheckResourceAttrSet(datasourceName, "services_collection.0.items.#"),
53+
),
54+
},
55+
})
56+
}
57+
58+
func TestAnnouncementsServiceServiceResource_WithOptionalParams(t *testing.T) {
59+
httpreplay.SetScenario("TestAnnouncementsServiceServiceResource_WithOptionalParams")
60+
defer httpreplay.SaveScenario()
61+
62+
config := acctest.ProviderTestConfig()
63+
64+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
65+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
66+
67+
datasourceName := "data.oci_announcements_service_services.test_services"
68+
69+
acctest.SaveConfigContent("", "", "", t)
70+
71+
acctest.ResourceTest(t, nil, []resource.TestStep{
72+
// verify datasource
73+
{
74+
Config: config +
75+
acctest.GenerateDataSourceFromRepresentationMap("oci_announcements_service_services", "test_services", acctest.Optional, acctest.Create, AnnouncementsServiceServiceDataSourceRepresentation) +
76+
compartmentIdVariableStr + AnnouncementsServiceServiceResourceConfig,
77+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
78+
resource.TestCheckResourceAttr(datasourceName, "comms_manager_name", "CN"),
79+
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
80+
resource.TestCheckResourceAttr(datasourceName, "platform_type", "IAAS"),
81+
82+
resource.TestCheckResourceAttrSet(datasourceName, "services_collection.#"),
83+
resource.TestCheckResourceAttrSet(datasourceName, "services_collection.0.items.#"),
84+
),
85+
},
86+
})
87+
}
Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
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 announcements_service
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
oci_announcements_service "github.com/oracle/oci-go-sdk/v65/announcementsservice"
11+
12+
"github.com/oracle/terraform-provider-oci/internal/client"
13+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
14+
)
15+
16+
func AnnouncementsServiceServicesDataSource() *schema.Resource {
17+
return &schema.Resource{
18+
Read: readAnnouncementsServiceServices,
19+
Schema: map[string]*schema.Schema{
20+
"filter": tfresource.DataSourceFiltersSchema(),
21+
"comms_manager_name": {
22+
Type: schema.TypeString,
23+
Optional: true,
24+
},
25+
"compartment_id": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
},
29+
"platform_type": {
30+
Type: schema.TypeString,
31+
Optional: true,
32+
},
33+
"services_collection": {
34+
Type: schema.TypeList,
35+
Computed: true,
36+
Elem: &schema.Resource{
37+
Schema: map[string]*schema.Schema{
38+
// Required
39+
40+
// Optional
41+
42+
// Computed
43+
"items": {
44+
Type: schema.TypeList,
45+
Computed: true,
46+
Elem: &schema.Resource{
47+
Schema: map[string]*schema.Schema{
48+
// Required
49+
50+
// Optional
51+
52+
// Computed
53+
"comms_manager_name": {
54+
Type: schema.TypeString,
55+
Computed: true,
56+
},
57+
"excluded_realms": {
58+
Type: schema.TypeList,
59+
Computed: true,
60+
Elem: &schema.Schema{
61+
Type: schema.TypeString,
62+
},
63+
},
64+
"id": {
65+
Type: schema.TypeString,
66+
Computed: true,
67+
},
68+
"platform_type": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
},
72+
"previous_service_names": {
73+
Type: schema.TypeList,
74+
Computed: true,
75+
Elem: &schema.Schema{
76+
Type: schema.TypeString,
77+
},
78+
},
79+
"service_name": {
80+
Type: schema.TypeString,
81+
Computed: true,
82+
},
83+
"short_name": {
84+
Type: schema.TypeString,
85+
Computed: true,
86+
},
87+
"state": {
88+
Type: schema.TypeString,
89+
Computed: true,
90+
},
91+
"team_name": {
92+
Type: schema.TypeString,
93+
Computed: true,
94+
},
95+
"time_created": {
96+
Type: schema.TypeString,
97+
Computed: true,
98+
},
99+
"time_updated": {
100+
Type: schema.TypeString,
101+
Computed: true,
102+
},
103+
"type": {
104+
Type: schema.TypeString,
105+
Computed: true,
106+
},
107+
},
108+
},
109+
},
110+
},
111+
},
112+
},
113+
},
114+
}
115+
}
116+
117+
func readAnnouncementsServiceServices(d *schema.ResourceData, m interface{}) error {
118+
sync := &AnnouncementsServiceServicesDataSourceCrud{}
119+
sync.D = d
120+
sync.Client = m.(*client.OracleClients).ServiceClient()
121+
122+
return tfresource.ReadResource(sync)
123+
}
124+
125+
type AnnouncementsServiceServicesDataSourceCrud struct {
126+
D *schema.ResourceData
127+
Client *oci_announcements_service.ServiceClient
128+
Res *oci_announcements_service.ListServicesResponse
129+
}
130+
131+
func (s *AnnouncementsServiceServicesDataSourceCrud) VoidState() {
132+
s.D.SetId("")
133+
}
134+
135+
func (s *AnnouncementsServiceServicesDataSourceCrud) Get() error {
136+
request := oci_announcements_service.ListServicesRequest{}
137+
138+
if commsManagerName, ok := s.D.GetOkExists("comms_manager_name"); ok {
139+
request.CommsManagerName = oci_announcements_service.ListServicesCommsManagerNameEnum(commsManagerName.(string))
140+
}
141+
142+
if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok {
143+
tmp := compartmentId.(string)
144+
request.CompartmentId = &tmp
145+
}
146+
147+
if platformType, ok := s.D.GetOkExists("platform_type"); ok {
148+
request.PlatformType = oci_announcements_service.ListServicesPlatformTypeEnum(platformType.(string))
149+
}
150+
151+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "announcements_service")
152+
153+
response, err := s.Client.ListServices(context.Background(), request)
154+
if err != nil {
155+
return err
156+
}
157+
158+
s.Res = &response
159+
request.Page = s.Res.OpcNextPage
160+
161+
for request.Page != nil {
162+
listResponse, err := s.Client.ListServices(context.Background(), request)
163+
if err != nil {
164+
return err
165+
}
166+
167+
s.Res.Items = append(s.Res.Items, listResponse.Items...)
168+
request.Page = listResponse.OpcNextPage
169+
}
170+
171+
return nil
172+
}
173+
174+
func (s *AnnouncementsServiceServicesDataSourceCrud) SetData() error {
175+
if s.Res == nil {
176+
return nil
177+
}
178+
179+
s.D.SetId(tfresource.GenerateDataSourceHashID("AnnouncementsServiceServicesDataSource-", AnnouncementsServiceServicesDataSource(), s.D))
180+
resources := []map[string]interface{}{}
181+
service := map[string]interface{}{}
182+
183+
items := []interface{}{}
184+
for _, item := range s.Res.Items {
185+
items = append(items, ServiceSummaryToMap(item))
186+
}
187+
service["items"] = items
188+
189+
if f, fOk := s.D.GetOkExists("filter"); fOk {
190+
items = tfresource.ApplyFiltersInCollection(f.(*schema.Set), items, AnnouncementsServiceServicesDataSource().Schema["services_collection"].Elem.(*schema.Resource).Schema)
191+
service["items"] = items
192+
}
193+
194+
resources = append(resources, service)
195+
if err := s.D.Set("services_collection", resources); err != nil {
196+
return err
197+
}
198+
199+
return nil
200+
}
201+
202+
func ServiceSummaryToMap(obj oci_announcements_service.ServiceSummary) map[string]interface{} {
203+
result := map[string]interface{}{}
204+
205+
result["comms_manager_name"] = string(obj.CommsManagerName)
206+
207+
result["excluded_realms"] = obj.ExcludedRealms
208+
209+
if obj.Id != nil {
210+
result["id"] = string(*obj.Id)
211+
}
212+
213+
result["platform_type"] = string(obj.PlatformType)
214+
215+
result["previous_service_names"] = obj.PreviousServiceNames
216+
217+
if obj.ServiceName != nil {
218+
result["service_name"] = string(*obj.ServiceName)
219+
}
220+
221+
if obj.ShortName != nil {
222+
result["short_name"] = string(*obj.ShortName)
223+
}
224+
225+
result["state"] = string(obj.LifecycleState)
226+
227+
if obj.TeamName != nil {
228+
result["team_name"] = string(*obj.TeamName)
229+
}
230+
231+
if obj.TimeCreated != nil {
232+
result["time_created"] = obj.TimeCreated.String()
233+
}
234+
235+
if obj.TimeUpdated != nil {
236+
result["time_updated"] = obj.TimeUpdated.String()
237+
}
238+
239+
return result
240+
}

internal/service/announcements_service/register_datasource.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ import "github.com/oracle/terraform-provider-oci/internal/tfresource"
88
func RegisterDatasource() {
99
tfresource.RegisterDatasource("oci_announcements_service_announcement_subscription", AnnouncementsServiceAnnouncementSubscriptionDataSource())
1010
tfresource.RegisterDatasource("oci_announcements_service_announcement_subscriptions", AnnouncementsServiceAnnouncementSubscriptionsDataSource())
11+
tfresource.RegisterDatasource("oci_announcements_service_services", AnnouncementsServiceServicesDataSource())
1112
}

0 commit comments

Comments
 (0)