Skip to content

Commit

Permalink
Populate 'processor_features' Column When Default Value Is Set Closes #…
Browse files Browse the repository at this point in the history
…2018 (#2028)

Co-authored-by: Madhushree Ray <[email protected]>
  • Loading branch information
ParthaI and madhushreeray30 authored Jan 18, 2024
1 parent adc67b4 commit a001072
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions aws/table_aws_rds_db_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ func tableAwsRDSDBInstance(_ context.Context) *plugin.Table {
Func: getRDSDBInstanceCertificate,
Tags: map[string]string{"service": "rds", "action": "DescribeCertificates"},
},
{
Func: getRDSDBInstanceProcessorFeatures,
Tags: map[string]string{"service": "rds", "action": "DescribeOrderableDBInstanceOptions"},
},
},
GetMatrixItemFunc: SupportedRegionMatrix(rdsv1.EndpointsID),
Columns: awsRegionalColumns([]*plugin.Column{
Expand Down Expand Up @@ -399,6 +403,8 @@ func tableAwsRDSDBInstance(_ context.Context) *plugin.Table {
Name: "processor_features",
Description: "The number of CPU cores and the number of threads per core for the DB instance class of the DB instance.",
Type: proto.ColumnType_JSON,
Hydrate: getRDSDBInstanceProcessorFeatures,
Transform: transform.FromValue(),
},
{
Name: "read_replica_db_cluster_identifiers",
Expand Down Expand Up @@ -608,6 +614,57 @@ func getRDSDBInstanceCertificate(ctx context.Context, d *plugin.QueryData, h *pl
return nil, nil
}

// DescribeDBInstances API returns the non-default ProcessorFeature value.
// For populating the default ProcessorFeature value we need to make DescribeOrderableDBInstanceOptions API call.
func getRDSDBInstanceProcessorFeatures(ctx context.Context, d *plugin.QueryData, h *plugin.HydrateData) (interface{}, error) {
var processFeatures []types.ProcessorFeature
dbInstance := h.Item.(types.DBInstance)

// Return the ProcessFeature details if the
if dbInstance.ProcessorFeatures != nil {
return dbInstance.ProcessorFeatures, nil
}

// Create service
svc, err := RDSClient(ctx, d)
if err != nil {
plugin.Logger(ctx).Error("aws_rds_db_instance.getRDSDBInstanceProcessorFeatures", "connection_error", err)
return nil, err
}

params := &rds.DescribeOrderableDBInstanceOptionsInput{
Engine: dbInstance.Engine,
EngineVersion: dbInstance.EngineVersion,
DBInstanceClass: dbInstance.DBInstanceClass,
AvailabilityZoneGroup: aws.String(d.EqualsQualString(matrixKeyRegion)),
}

op, err := svc.DescribeOrderableDBInstanceOptions(ctx, params)
if err != nil {
plugin.Logger(ctx).Error("aws_rds_db_instance.getRDSDBInstanceProcessorFeatures", "api_error", err)
return nil, err
}

for _, p := range op.OrderableDBInstanceOptions {
if *p.StorageType == *dbInstance.StorageType {
// Match the RDS insance Availability Zone
for _, a := range p.AvailabilityZones {
if *a.Name == *dbInstance.AvailabilityZone {
for _, f := range p.AvailableProcessorFeatures {
processFeature := &types.ProcessorFeature{
Name: f.Name,
Value: f.DefaultValue,
}
processFeatures = append(processFeatures, *processFeature)
}
}
}
}
}

return processFeatures, nil
}

//// TRANSFORM FUNCTIONS

func getRDSDBInstanceTurbotTags(_ context.Context, d *transform.TransformData) (interface{}, error) {
Expand Down

0 comments on commit a001072

Please sign in to comment.