Skip to content

Commit a4375fd

Browse files
jotruongovindrao55
authored andcommitted
Support save report in cost analysis
1 parent a246974 commit a4375fd

16 files changed

+1597
-15
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
### Added
44
- Support for Maintenance Windows History in `database`
5+
- Support save report in cost analysis
56

67
## 4.18.0 (March 17, 2021)
78

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
3+
// These variables would commonly be defined as environment variables or sourced in a .env file
4+
5+
variable "tenancy_ocid" {
6+
}
7+
8+
variable "user_ocid" {
9+
}
10+
11+
variable "fingerprint" {
12+
}
13+
14+
variable "private_key_path" {
15+
}
16+
17+
variable "compartment_ocid" {
18+
}
19+
20+
variable "region" {
21+
}
22+
23+
provider "oci" {
24+
region = var.region
25+
tenancy_ocid = var.tenancy_ocid
26+
user_ocid = var.user_ocid
27+
fingerprint = var.fingerprint
28+
private_key_path = var.private_key_path
29+
}
30+
31+
variable "time_usage_ended" {
32+
default = "2020-01-02T00:00:00.000Z"
33+
}
34+
35+
variable "time_usage_started" {
36+
default = "2020-01-01T00:00:00.000Z"
37+
}
38+
39+
variable "dimensions_value" {
40+
default = "dimensions_value"
41+
}
42+
43+
resource "oci_metering_computation_query" "test_query" {
44+
#Required
45+
compartment_id = var.tenancy_ocid
46+
query_definition {
47+
#Required
48+
cost_analysis_ui {
49+
50+
#Optional
51+
graph = "BARS"
52+
is_cumulative_graph = false
53+
}
54+
display_name = "tf_display_name"
55+
report_query {
56+
#Required
57+
granularity = "DAILY"
58+
tenant_id = var.tenancy_ocid
59+
60+
#Optional
61+
compartment_depth = 1
62+
date_range_name = "LAST_TEN_DAYS"
63+
filter = <<EOF
64+
{
65+
"operator": "AND",
66+
"dimensions": [],
67+
"tags": [],
68+
"filters": [
69+
{
70+
"operator": "OR",
71+
"dimensions": [
72+
{
73+
"key": "compartmentName",
74+
"value": "${var.dimensions_value}"
75+
}
76+
],
77+
"filters": null,
78+
"tags": []
79+
}
80+
]
81+
}
82+
EOF
83+
84+
group_by = []
85+
is_aggregate_by_time = false
86+
query_type = "COST"
87+
}
88+
version = 1
89+
}
90+
}
91+
92+
data "oci_metering_computation_queries" "test_queries" {
93+
#Required
94+
compartment_id = var.tenancy_ocid
95+
}

examples/metering_computation/main.tf renamed to examples/metering_computation/usage/main.tf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ provider "oci" {
2929
}
3030

3131
variable "time_usage_ended" {
32+
default = "2020-01-02T00:00:00.000Z"
3233
}
3334

3435
variable "time_usage_started" {
36+
default = "2020-01-01T00:00:00.000Z"
3537
}
3638

3739
variable "dimensions_value" {
40+
default = "dimensions_value"
3841
}
3942

4043
resource "oci_metering_computation_usage" "test_usage" {
@@ -76,4 +79,3 @@ EOF
7679
data "oci_metering_computation_configuration" "test_configuration" {
7780
tenant_id = var.tenancy_ocid
7881
}
79-

oci/export_definitions.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1586,6 +1586,14 @@ var exportMarketplaceAcceptedAgreementHints = &TerraformResourceHints{
15861586
requireResourceRefresh: true,
15871587
}
15881588

1589+
var exportMeteringComputationQueryHints = &TerraformResourceHints{
1590+
resourceClass: "oci_metering_computation_query",
1591+
datasourceClass: "oci_metering_computation_queries",
1592+
datasourceItemsAttr: "query_collection",
1593+
resourceAbbreviation: "query",
1594+
requireResourceRefresh: true,
1595+
}
1596+
15891597
var exportMonitoringAlarmHints = &TerraformResourceHints{
15901598
resourceClass: "oci_monitoring_alarm",
15911599
datasourceClass: "oci_monitoring_alarms",

oci/export_graphs.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,12 @@ var marketplaceResourceGraph = TerraformResourceGraph{
706706
},
707707
}
708708

709+
var meteringComputationResourceGraph = TerraformResourceGraph{
710+
"oci_identity_compartment": {
711+
{TerraformResourceHints: exportMeteringComputationQueryHints},
712+
},
713+
}
714+
709715
var monitoringResourceGraph = TerraformResourceGraph{
710716
"oci_identity_compartment": {
711717
{TerraformResourceHints: exportMonitoringAlarmHints},
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 oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_metering_computation "github.com/oracle/oci-go-sdk/v36/usageapi"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_metering_computation_queries", MeteringComputationQueriesDataSource())
15+
}
16+
17+
func MeteringComputationQueriesDataSource() *schema.Resource {
18+
return &schema.Resource{
19+
Read: readMeteringComputationQueries,
20+
Schema: map[string]*schema.Schema{
21+
"filter": dataSourceFiltersSchema(),
22+
"compartment_id": {
23+
Type: schema.TypeString,
24+
Required: true,
25+
},
26+
"query_collection": {
27+
Type: schema.TypeList,
28+
Computed: true,
29+
Elem: &schema.Resource{
30+
Schema: map[string]*schema.Schema{
31+
32+
"items": {
33+
Type: schema.TypeList,
34+
Computed: true,
35+
Elem: GetDataSourceItemSchema(MeteringComputationQueryResource()),
36+
},
37+
},
38+
},
39+
},
40+
},
41+
}
42+
}
43+
44+
func readMeteringComputationQueries(d *schema.ResourceData, m interface{}) error {
45+
sync := &MeteringComputationQueriesDataSourceCrud{}
46+
sync.D = d
47+
sync.Client = m.(*OracleClients).usageapiClient()
48+
49+
return ReadResource(sync)
50+
}
51+
52+
type MeteringComputationQueriesDataSourceCrud struct {
53+
D *schema.ResourceData
54+
Client *oci_metering_computation.UsageapiClient
55+
Res *oci_metering_computation.ListQueriesResponse
56+
}
57+
58+
func (s *MeteringComputationQueriesDataSourceCrud) VoidState() {
59+
s.D.SetId("")
60+
}
61+
62+
func (s *MeteringComputationQueriesDataSourceCrud) Get() error {
63+
request := oci_metering_computation.ListQueriesRequest{}
64+
65+
if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok {
66+
tmp := compartmentId.(string)
67+
request.CompartmentId = &tmp
68+
}
69+
70+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "metering_computation")
71+
72+
response, err := s.Client.ListQueries(context.Background(), request)
73+
if err != nil {
74+
return err
75+
}
76+
77+
s.Res = &response
78+
request.Page = s.Res.OpcNextPage
79+
80+
for request.Page != nil {
81+
listResponse, err := s.Client.ListQueries(context.Background(), request)
82+
if err != nil {
83+
return err
84+
}
85+
86+
s.Res.Items = append(s.Res.Items, listResponse.Items...)
87+
request.Page = listResponse.OpcNextPage
88+
}
89+
90+
return nil
91+
}
92+
93+
func (s *MeteringComputationQueriesDataSourceCrud) SetData() error {
94+
if s.Res == nil {
95+
return nil
96+
}
97+
98+
s.D.SetId(GenerateDataSourceHashID("MeteringComputationQueriesDataSource-", MeteringComputationQueriesDataSource(), s.D))
99+
resources := []map[string]interface{}{}
100+
query := map[string]interface{}{}
101+
102+
items := []interface{}{}
103+
for _, item := range s.Res.Items {
104+
items = append(items, QuerySummaryToMap(item))
105+
}
106+
query["items"] = items
107+
108+
if f, fOk := s.D.GetOkExists("filter"); fOk {
109+
items = ApplyFiltersInCollection(f.(*schema.Set), items, MeteringComputationQueriesDataSource().Schema["query_collection"].Elem.(*schema.Resource).Schema)
110+
query["items"] = items
111+
}
112+
113+
resources = append(resources, query)
114+
if err := s.D.Set("query_collection", resources); err != nil {
115+
return err
116+
}
117+
118+
return nil
119+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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 oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_metering_computation "github.com/oracle/oci-go-sdk/v36/usageapi"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_metering_computation_query", MeteringComputationQueryDataSource())
15+
}
16+
17+
func MeteringComputationQueryDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["query_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
return GetSingularDataSourceItemSchema(MeteringComputationQueryResource(), fieldMap, readSingularMeteringComputationQuery)
24+
}
25+
26+
func readSingularMeteringComputationQuery(d *schema.ResourceData, m interface{}) error {
27+
sync := &MeteringComputationQueryDataSourceCrud{}
28+
sync.D = d
29+
sync.Client = m.(*OracleClients).usageapiClient()
30+
31+
return ReadResource(sync)
32+
}
33+
34+
type MeteringComputationQueryDataSourceCrud struct {
35+
D *schema.ResourceData
36+
Client *oci_metering_computation.UsageapiClient
37+
Res *oci_metering_computation.GetQueryResponse
38+
}
39+
40+
func (s *MeteringComputationQueryDataSourceCrud) VoidState() {
41+
s.D.SetId("")
42+
}
43+
44+
func (s *MeteringComputationQueryDataSourceCrud) Get() error {
45+
request := oci_metering_computation.GetQueryRequest{}
46+
47+
if queryId, ok := s.D.GetOkExists("query_id"); ok {
48+
tmp := queryId.(string)
49+
request.QueryId = &tmp
50+
}
51+
52+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "metering_computation")
53+
54+
response, err := s.Client.GetQuery(context.Background(), request)
55+
if err != nil {
56+
return err
57+
}
58+
59+
s.Res = &response
60+
return nil
61+
}
62+
63+
func (s *MeteringComputationQueryDataSourceCrud) 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.QueryDefinition != nil {
75+
s.D.Set("query_definition", []interface{}{QueryDefinitionToMap(s.Res.QueryDefinition)})
76+
} else {
77+
s.D.Set("query_definition", nil)
78+
}
79+
80+
return nil
81+
}

0 commit comments

Comments
 (0)