Skip to content

Commit 3c51b68

Browse files
Varun Kohadesagarp337
authored andcommitted
Added - support for metering computation
1 parent 72bba9c commit 3c51b68

18 files changed

+2147
-18
lines changed

internal/integrationtest/metering_computation_schedule_test.go

Lines changed: 319 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright (c) 2017, 2021, 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/terraform-providers/terraform-provider-oci/httpreplay"
13+
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
14+
15+
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
16+
)
17+
18+
var (
19+
scheduledRunSingularDataSourceRepresentation = map[string]interface{}{
20+
"scheduled_run_id": acctest.Representation{RepType: acctest.Required, Create: `${var.scheduled_run_ocid}`},
21+
}
22+
23+
scheduledRunDataSourceRepresentation = map[string]interface{}{
24+
"schedule_id": acctest.Representation{RepType: acctest.Required, Create: `${var.schedule_ocid}`},
25+
}
26+
)
27+
28+
// issue-routing-tag: metering_computation/default
29+
func TestMeteringComputationScheduledRunResource_basic(t *testing.T) {
30+
httpreplay.SetScenario("TestMeteringComputationScheduledRunResource_basic")
31+
defer httpreplay.SaveScenario()
32+
33+
config := acctest.ProviderTestConfig()
34+
35+
scheduledRunId := utils.GetEnvSettingWithBlankDefault("scheduled_run_id")
36+
scheduledRunIdVariableStr := fmt.Sprintf("variable \"scheduled_run_ocid\" { default = \"%s\" }\n", scheduledRunId)
37+
38+
scheduleId := utils.GetEnvSettingWithBlankDefault("schedule_id")
39+
scheduleIdVariableStr := fmt.Sprintf("variable \"schedule_ocid\" { default = \"%s\" }\n", scheduleId)
40+
41+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
42+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
43+
44+
datasourceName := "data.oci_metering_computation_scheduled_runs.test_scheduled_runs"
45+
singularDatasourceName := "data.oci_metering_computation_scheduled_run.test_scheduled_run"
46+
47+
acctest.SaveConfigContent("", "", "", t)
48+
49+
acctest.ResourceTest(t, nil, []resource.TestStep{
50+
// verify datasource
51+
{
52+
Config: config + scheduleIdVariableStr + scheduledRunIdVariableStr +
53+
acctest.GenerateDataSourceFromRepresentationMap("oci_metering_computation_scheduled_runs", "test_scheduled_runs", acctest.Required, acctest.Create, scheduledRunDataSourceRepresentation) +
54+
compartmentIdVariableStr,
55+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
56+
resource.TestCheckResourceAttrSet(datasourceName, "schedule_id"),
57+
58+
resource.TestCheckResourceAttrSet(datasourceName, "scheduled_run_collection.#"),
59+
),
60+
},
61+
// verify singular datasource
62+
{
63+
Config: config + scheduleIdVariableStr + scheduledRunIdVariableStr +
64+
acctest.GenerateDataSourceFromRepresentationMap("oci_metering_computation_scheduled_run", "test_scheduled_run", acctest.Required, acctest.Create, scheduledRunSingularDataSourceRepresentation) +
65+
compartmentIdVariableStr,
66+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
67+
resource.TestCheckResourceAttrSet(singularDatasourceName, "scheduled_run_id"),
68+
69+
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
70+
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
71+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
72+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_finished"),
73+
),
74+
},
75+
})
76+
}

internal/provider/register_datasource.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,10 @@ func init() {
925925
RegisterDatasource("oci_metering_computation_custom_tables", tf_metering_computation.MeteringComputationCustomTablesDataSource())
926926
RegisterDatasource("oci_metering_computation_queries", tf_metering_computation.MeteringComputationQueriesDataSource())
927927
RegisterDatasource("oci_metering_computation_query", tf_metering_computation.MeteringComputationQueryDataSource())
928+
RegisterDatasource("oci_metering_computation_schedule", tf_metering_computation.MeteringComputationScheduleDataSource())
929+
RegisterDatasource("oci_metering_computation_scheduled_run", tf_metering_computation.MeteringComputationScheduledRunDataSource())
930+
RegisterDatasource("oci_metering_computation_scheduled_runs", tf_metering_computation.MeteringComputationScheduledRunsDataSource())
931+
RegisterDatasource("oci_metering_computation_schedules", tf_metering_computation.MeteringComputationSchedulesDataSource())
928932
// monitoring service
929933
RegisterDatasource("oci_monitoring_alarm", tf_monitoring.MonitoringAlarmDataSource())
930934
RegisterDatasource("oci_monitoring_alarm_history_collection", tf_monitoring.MonitoringAlarmHistoryCollectionDataSource())

internal/provider/register_resource.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ func init() {
474474
// metering_computation service
475475
RegisterResource("oci_metering_computation_custom_table", tf_metering_computation.MeteringComputationCustomTableResource())
476476
RegisterResource("oci_metering_computation_query", tf_metering_computation.MeteringComputationQueryResource())
477+
RegisterResource("oci_metering_computation_schedule", tf_metering_computation.MeteringComputationScheduleResource())
477478
RegisterResource("oci_metering_computation_usage", tf_metering_computation.MeteringComputationUsageResource())
478479
// monitoring service
479480
RegisterResource("oci_monitoring_alarm", tf_monitoring.MonitoringAlarmResource())

internal/resourcediscovery/export_definitions.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
oci_sch "github.com/oracle/oci-go-sdk/v65/sch"
4141
oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring"
4242
oci_streaming "github.com/oracle/oci-go-sdk/v65/streaming"
43+
oci_metering_computation "github.com/oracle/oci-go-sdk/v65/usageapi"
4344
oci_vault "github.com/oracle/oci-go-sdk/v65/vault"
4445
oci_visual_builder "github.com/oracle/oci-go-sdk/v65/visualbuilder"
4546
oci_vulnerability_scanning "github.com/oracle/oci-go-sdk/v65/vulnerabilityscanning"
@@ -2656,6 +2657,18 @@ var exportMeteringComputationCustomTableHints = &TerraformResourceHints{
26562657
requireResourceRefresh: true,
26572658
}
26582659

2660+
var exportMeteringComputationScheduleHints = &TerraformResourceHints{
2661+
resourceClass: "oci_metering_computation_schedule",
2662+
datasourceClass: "oci_metering_computation_schedules",
2663+
datasourceItemsAttr: "schedule_collection",
2664+
isDatasourceCollection: true,
2665+
resourceAbbreviation: "schedule",
2666+
requireResourceRefresh: true,
2667+
discoverableLifecycleStates: []string{
2668+
string(oci_metering_computation.ScheduleLifecycleStateActive),
2669+
},
2670+
}
2671+
26592672
var exportMonitoringAlarmHints = &TerraformResourceHints{
26602673
resourceClass: "oci_monitoring_alarm",
26612674
datasourceClass: "oci_monitoring_alarms",

internal/resourcediscovery/export_graphs.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,7 @@ var marketplaceResourceGraph = TerraformResourceGraph{
10121012
var meteringComputationResourceGraph = TerraformResourceGraph{
10131013
"oci_identity_tenancy": {
10141014
{TerraformResourceHints: exportMeteringComputationQueryHints},
1015+
{TerraformResourceHints: exportMeteringComputationScheduleHints},
10151016
},
10161017
}
10171018

internal/service/metering_computation/metering_computation_custom_table_resource.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -399,21 +399,3 @@ func (s *MeteringComputationCustomTableResourceCrud) mapToTag(fieldKeyFormat str
399399

400400
return result, nil
401401
}
402-
403-
func TagToMap(obj oci_metering_computation.Tag) map[string]interface{} {
404-
result := map[string]interface{}{}
405-
406-
if obj.Key != nil {
407-
result["key"] = string(*obj.Key)
408-
}
409-
410-
if obj.Namespace != nil {
411-
result["namespace"] = string(*obj.Namespace)
412-
}
413-
414-
if obj.Value != nil {
415-
result["value"] = string(*obj.Value)
416-
}
417-
418-
return result
419-
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package metering_computation
5+
6+
import (
7+
"context"
8+
"time"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
oci_metering_computation "github.com/oracle/oci-go-sdk/v65/usageapi"
12+
13+
"github.com/terraform-providers/terraform-provider-oci/internal/client"
14+
"github.com/terraform-providers/terraform-provider-oci/internal/tfresource"
15+
)
16+
17+
func MeteringComputationScheduleDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["schedule_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
return tfresource.GetSingularDataSourceItemSchema(MeteringComputationScheduleResource(), fieldMap, readSingularMeteringComputationSchedule)
24+
}
25+
26+
func readSingularMeteringComputationSchedule(d *schema.ResourceData, m interface{}) error {
27+
sync := &MeteringComputationScheduleDataSourceCrud{}
28+
sync.D = d
29+
sync.Client = m.(*client.OracleClients).UsageapiClient()
30+
31+
return tfresource.ReadResource(sync)
32+
}
33+
34+
type MeteringComputationScheduleDataSourceCrud struct {
35+
D *schema.ResourceData
36+
Client *oci_metering_computation.UsageapiClient
37+
Res *oci_metering_computation.GetScheduleResponse
38+
}
39+
40+
func (s *MeteringComputationScheduleDataSourceCrud) VoidState() {
41+
s.D.SetId("")
42+
}
43+
44+
func (s *MeteringComputationScheduleDataSourceCrud) Get() error {
45+
request := oci_metering_computation.GetScheduleRequest{}
46+
47+
if scheduleId, ok := s.D.GetOkExists("schedule_id"); ok {
48+
tmp := scheduleId.(string)
49+
request.ScheduleId = &tmp
50+
}
51+
52+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "metering_computation")
53+
54+
response, err := s.Client.GetSchedule(context.Background(), request)
55+
if err != nil {
56+
return err
57+
}
58+
59+
s.Res = &response
60+
return nil
61+
}
62+
63+
func (s *MeteringComputationScheduleDataSourceCrud) SetData() error {
64+
if s.Res == nil {
65+
return nil
66+
}
67+
68+
s.D.SetId(*s.Res.Id)
69+
70+
if s.Res.CompartmentId != nil {
71+
s.D.Set("compartment_id", *s.Res.CompartmentId)
72+
}
73+
74+
if s.Res.DefinedTags != nil {
75+
s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags))
76+
}
77+
78+
s.D.Set("freeform_tags", s.Res.FreeformTags)
79+
80+
if s.Res.Name != nil {
81+
s.D.Set("name", *s.Res.Name)
82+
}
83+
84+
if s.Res.QueryProperties != nil {
85+
s.D.Set("query_properties", []interface{}{QueryPropertiesToMap(s.Res.QueryProperties)})
86+
} else {
87+
s.D.Set("query_properties", nil)
88+
}
89+
90+
if s.Res.ResultLocation != nil {
91+
resultLocationArray := []interface{}{}
92+
if resultLocationMap := ResultLocationToMap(&s.Res.ResultLocation); resultLocationMap != nil {
93+
resultLocationArray = append(resultLocationArray, resultLocationMap)
94+
}
95+
s.D.Set("result_location", resultLocationArray)
96+
} else {
97+
s.D.Set("result_location", nil)
98+
}
99+
100+
if s.Res.ScheduleRecurrences != nil {
101+
s.D.Set("schedule_recurrences", *s.Res.ScheduleRecurrences)
102+
}
103+
104+
s.D.Set("state", s.Res.LifecycleState)
105+
106+
if s.Res.SystemTags != nil {
107+
s.D.Set("system_tags", tfresource.SystemTagsToMap(s.Res.SystemTags))
108+
}
109+
110+
if s.Res.TimeCreated != nil {
111+
s.D.Set("time_created", s.Res.TimeCreated.String())
112+
}
113+
114+
if s.Res.TimeScheduled != nil {
115+
s.D.Set("time_scheduled", s.Res.TimeScheduled.Format(time.RFC3339Nano))
116+
}
117+
118+
return nil
119+
}

0 commit comments

Comments
 (0)