Skip to content

Commit

Permalink
Fix errors, separate usage variables
Browse files Browse the repository at this point in the history
  • Loading branch information
Eugene Koo committed May 8, 2024
1 parent 4686ecc commit 0947ced
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 96 deletions.
16 changes: 8 additions & 8 deletions infracost-usage-example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1357,13 +1357,13 @@ resource_usage:
data_transfer_global: 2500 # Monthly global traffic through the gateway in GB

ibm_database.postgres:
database_ram_mb: 12288 # Allocated memory in MB per-member
database_disk_mb: 131072 # Allocated disk in MB per-member
database_core: 3 # Allocated dedicated CPU per-member
database_members: 4 # Allocated number of members in the cluster
postgresql_database_ram_mb: 12288 # Allocated memory in MB per-member
postgresql_database_disk_mb: 131072 # Allocated disk in MB per-member
postgresql_database_core: 3 # Allocated dedicated CPU per-member
postgresql_database_members: 4 # Allocated number of members in the cluster

ibm_database.elasticsearch:
database_ram_mb: 12288 # Allocated memory in MB per-member
database_disk_mb: 131072 # Allocated disk in MB per-member
database_core: 3 # Allocated dedicated CPU per-member
database_members: 4 # Allocated number of members in the cluster
elasticsearch_database_ram_mb: 12288 # Allocated memory in MB per-member
elasticsearch_database_disk_mb: 131072 # Allocated disk in MB per-member
elasticsearch_database_core: 3 # Allocated dedicated CPU per-member
elasticsearch_database_members: 4 # Allocated number of members in the cluster
1 change: 1 addition & 0 deletions internal/providers/terraform/ibm/ibm.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ var globalCatalogServiceId = map[string]catalogMetadata{
"sysdig-secure": {"e831e900-82d6-11ec-95c5-c12c5a5d9687", []string{}, nil, "https://cloud.ibm.com/workload-protection/catalog/security-and-compliance-center-workload-protection"},
"logdna": {"e13e1860-959c-11e8-871e-ad157af61ad7", []string{}, nil, "https://cloud.ibm.com/catalog/services/logdna"},
"databases-for-postgresql": {"databases-for-postgresql", []string{}, nil, "https://cloud.ibm.com/databases/databases-for-postgresql/create"},
"databases-for-elasticsearch": {"databases-for-elasticsearch", []string{}, nil, "https://cloud.ibm.com/databases/databases-for-elasticsearch/create"},
"secrets-manager": {"ebc0cdb0-af2a-11ea-98c7-29e5db822649", []string{}, nil, "https://cloud.ibm.com/catalog/services/secrets-manager"},
"appid": {"AdvancedMobileAccess-d6aece47-d840-45b0-8ab9-ad15354deeea", []string{}, nil, "https://cloud.ibm.com/catalog/services/appid"},
"appconnect": {"96a0ebf2-2a02-4e32-815f-7c09a1268c78", []string{}, nil, "https://www.ibm.com/products/app-connect/pricing"},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
version: 0.1
resource_usage:
ibm_database.test_db1:
database_ram_mb: 12288
database_disk_mb: 131072
database_core: 3
postgresql_database_ram_mb: 12288
postgresql_database_disk_mb: 131072
postgresql_database_core: 3
ibm_database.test_db2:
database_ram_mb: 15360
database_members: 4
postgresql_database_ram_mb: 15360
postgresql_database_members: 4
ibm_database.test_es_enterprise_db1:
database_ram_mb: 12288
database_disk_mb: 131072
database_core: 3
elasticsearch_database_ram_mb: 12288
elasticsearch_database_disk_mb: 131072
elasticsearch_database_core: 3
ibm_database.test_es_enterprise_db2:
database_ram_mb: 15360
database_members: 4
elasticsearch_database_ram_mb: 15360
elasticsearch_database_members: 4
239 changes: 161 additions & 78 deletions internal/resources/ibm/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,15 @@ type Database struct {
// Databases For PostgreSQL
// Catalog Link: https://cloud.ibm.com/catalog/services/databases-for-postgresql
// Pricing Link: https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-pricing
RAM *int64 `infracost_usage:"database_ram_mb"`
Disk *int64 `infracost_usage:"database_disk_mb"`
Core *int64 `infracost_usage:"database_core"`
Members *int64 `infracost_usage:"database_members"`
postgresql_RAM *int64 `infracost_usage:"postgresql_database_ram_mb"`
postgresql_Disk *int64 `infracost_usage:"postgresql_database_disk_mb"`
postgresql_Core *int64 `infracost_usage:"postgresql_database_core"`
postgresql_Members *int64 `infracost_usage:"postgresql_database_members"`

elasticsearch_RAM *int64 `infracost_usage:"elasticsearch_database_ram_mb"`
elasticsearch_Disk *int64 `infracost_usage:"elasticsearch_database_disk_mb"`
elasticsearch_Core *int64 `infracost_usage:"elasticsearch_database_core"`
elasticsearch_Members *int64 `infracost_usage:"elasticsearch_database_members"`
}

type DatabaseCostComponentsFunc func(*Database) []*schema.CostComponent
Expand All @@ -37,10 +42,14 @@ func (r *Database) PopulateUsage(u *schema.UsageData) {

// DatabaseUsageSchema defines a list which represents the usage schema of Database.
var DatabaseUsageSchema = []*schema.UsageItem{
{Key: "database_ram_mb", DefaultValue: 0, ValueType: schema.Int64},
{Key: "database_disk_mb", DefaultValue: 0, ValueType: schema.Int64},
{Key: "database_core", DefaultValue: 0, ValueType: schema.Int64},
{Key: "database_members", DefaultValue: 0, ValueType: schema.Int64},
{Key: "postgresql_database_ram_mb", DefaultValue: 0, ValueType: schema.Int64},
{Key: "postgresql_database_disk_mb", DefaultValue: 0, ValueType: schema.Int64},
{Key: "postgresql_database_core", DefaultValue: 0, ValueType: schema.Int64},
{Key: "postgresql_database_members", DefaultValue: 0, ValueType: schema.Int64},
{Key: "elasticsearch_database_ram_mb", DefaultValue: 0, ValueType: schema.Int64},
{Key: "elasticsearch_database_disk_mb", DefaultValue: 0, ValueType: schema.Int64},
{Key: "elasticsearch_database_core", DefaultValue: 0, ValueType: schema.Int64},
{Key: "elasticsearch_database_members", DefaultValue: 0, ValueType: schema.Int64},
}

var DatabaseCostMap map[string]DatabaseCostComponentsFunc = map[string]DatabaseCostComponentsFunc{
Expand All @@ -61,14 +70,14 @@ func ConvertMBtoGB(d decimal.Decimal) decimal.Decimal {

func PostgresRAMCostComponent(r *Database) *schema.CostComponent {
var R decimal.Decimal
if r.RAM != nil {
R = ConvertMBtoGB(decimal.NewFromInt(*r.RAM))
if r.postgresql_RAM != nil {
R = ConvertMBtoGB(decimal.NewFromInt(*r.postgresql_RAM))
} else { // set the default
R = decimal.NewFromInt(1)
}
var m decimal.Decimal
if r.Members != nil {
m = decimal.NewFromInt(*r.Members)
if r.postgresql_Members != nil {
m = decimal.NewFromInt(*r.postgresql_Members)
} else { // set the default
m = decimal.NewFromInt(2)
}
Expand All @@ -95,14 +104,14 @@ func PostgresRAMCostComponent(r *Database) *schema.CostComponent {

func PostgresDiskCostComponent(r *Database) *schema.CostComponent {
var d decimal.Decimal
if r.Disk != nil {
d = ConvertMBtoGB(decimal.NewFromInt(*r.Disk))
if r.postgresql_Disk != nil {
d = ConvertMBtoGB(decimal.NewFromInt(*r.postgresql_Disk))
} else { // set the default
d = decimal.NewFromInt(5)
}
var m decimal.Decimal
if r.Members != nil {
m = decimal.NewFromInt(*r.Members)
if r.postgresql_Members != nil {
m = decimal.NewFromInt(*r.postgresql_Members)
} else { // set the default
m = decimal.NewFromInt(2)
}
Expand All @@ -129,14 +138,14 @@ func PostgresDiskCostComponent(r *Database) *schema.CostComponent {

func PostgresCoreCostComponent(r *Database) *schema.CostComponent {
var c decimal.Decimal
if r.Core != nil {
c = decimal.NewFromInt(*r.Core)
if r.postgresql_Core != nil {
c = decimal.NewFromInt(*r.postgresql_Core)
} else { // set the default
c = decimal.NewFromInt(0)
}
var m decimal.Decimal
if r.Members != nil {
m = decimal.NewFromInt(*r.Members)
if r.postgresql_Members != nil {
m = decimal.NewFromInt(*r.postgresql_Members)
} else { // set the default
m = decimal.NewFromInt(2)
}
Expand Down Expand Up @@ -171,104 +180,178 @@ func GetPostgresCostComponents(r *Database) []*schema.CostComponent {

func ElasticSearchRAMCostComponent(r *Database) *schema.CostComponent {
var R decimal.Decimal
if r.RAM != nil {
R = ConvertMBtoGB(decimal.NewFromInt(*r.RAM))
if r.elasticsearch_RAM != nil {
R = ConvertMBtoGB(decimal.NewFromInt(*r.elasticsearch_RAM))
} else { // set the default
R = decimal.NewFromInt(1)
}
var m decimal.Decimal
if r.Members != nil {
m = decimal.NewFromInt(*r.Members)
if r.elasticsearch_Members != nil {
m = decimal.NewFromInt(*r.elasticsearch_Members)
} else { // set the default
m = decimal.NewFromInt(3)
}

cost := R.Mul(m)

costComponent := schema.CostComponent{
Name: "RAM",
Unit: "GB-RAM",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("GIGABYTE_MONTHS_RAM"),
},
if r.Plan == "platinum" {
costComponent := schema.CostComponent{
Name: "RAM",
Unit: "GB-RAM",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
AttributeFilters: []*schema.AttributeFilter{
{Key: "planName", Value: &r.Plan},
},
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("GIGABYTE_MONTHS_RAM"),
},
}
return &costComponent
} else {
costComponent := schema.CostComponent{
Name: "RAM",
Unit: "GB-RAM",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
AttributeFilters: []*schema.AttributeFilter{
{Key: "planName", Value: &r.Plan},
},
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("GIGABYTE_MONTHS_RAM"),
},
}
return &costComponent
}
return &costComponent
}

func ElasticSearchDiskCostComponent(r *Database) *schema.CostComponent {
var d decimal.Decimal
if r.Disk != nil {
d = ConvertMBtoGB(decimal.NewFromInt(*r.Disk))
if r.elasticsearch_Disk != nil {
d = ConvertMBtoGB(decimal.NewFromInt(*r.elasticsearch_Disk))
} else { // set the default
d = decimal.NewFromInt(5)
}
var m decimal.Decimal
if r.Members != nil {
m = decimal.NewFromInt(*r.Members)
if r.elasticsearch_Members != nil {
m = decimal.NewFromInt(*r.elasticsearch_Members)
} else { // set the default
m = decimal.NewFromInt(3)
}

cost := d.Mul(m)

costComponent := schema.CostComponent{
Name: "Disk",
Unit: "GB-DISK",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("GIGABYTE_MONTHS_DISK"),
},
if r.Plan == "enterprise" {
costComponent := schema.CostComponent{
Name: "Disk",
Unit: "GB-DISK",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
AttributeFilters: []*schema.AttributeFilter{
{Key: "planName", Value: &r.Plan},
},
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("GIGABYTE_MONTHS_DISK"),
},
}
return &costComponent
} else {
costComponent := schema.CostComponent{
Name: "Disk",
Unit: "GB-DISK",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
AttributeFilters: []*schema.AttributeFilter{
{Key: "planName", Value: &r.Plan},
},
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("GIGABYTE_MONTHS_DISK"),
},
}
return &costComponent
}
return &costComponent
}

func ElasticSearchCoreCostComponent(r *Database) *schema.CostComponent {
var c decimal.Decimal
if r.Core != nil {
c = decimal.NewFromInt(*r.Core)
if r.elasticsearch_Core != nil {
c = decimal.NewFromInt(*r.elasticsearch_Core)
} else { // set the default
c = decimal.NewFromInt(0)
}
var m decimal.Decimal
if r.Members != nil {
m = decimal.NewFromInt(*r.Members)
if r.elasticsearch_Members != nil {
m = decimal.NewFromInt(*r.elasticsearch_Members)
} else { // set the default
m = decimal.NewFromInt(3)
}

cost := c.Mul(m)

costComponent := schema.CostComponent{
Name: "Core",
Unit: "Virtual Processor Core",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("VIRTUAL_PROCESSOR_CORES"),
},
if r.Plan == "enterprise" {
costComponent := schema.CostComponent{
Name: "Core",
Unit: "Virtual Processor Core",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
AttributeFilters: []*schema.AttributeFilter{
{Key: "planName", Value: &r.Plan},
},
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("VIRTUAL_PROCESSOR_CORES"),
},
}
return &costComponent
} else {
costComponent := schema.CostComponent{
Name: "Core",
Unit: "Virtual Processor Core",
MonthlyQuantity: &cost,
UnitMultiplier: decimal.NewFromInt(1),
ProductFilter: &schema.ProductFilter{
VendorName: strPtr("ibm"),
Region: strPtr(r.Location),
Service: strPtr("databases-for-elasticsearch"),
ProductFamily: strPtr("service"),
AttributeFilters: []*schema.AttributeFilter{
{Key: "planName", Value: &r.Plan},
},
},
PriceFilter: &schema.PriceFilter{
Unit: strPtr("VIRTUAL_PROCESSOR_CORES"),
},
}
return &costComponent
}
return &costComponent
}

func GetElasticSearchCostComponents(r *Database) []*schema.CostComponent {
Expand Down

0 comments on commit 0947ced

Please sign in to comment.