Skip to content

Commit

Permalink
use common fields for cast ai commitment fields
Browse files Browse the repository at this point in the history
  • Loading branch information
Max Twardowski committed Apr 30, 2024
1 parent ee2e197 commit e52211d
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 71 deletions.
38 changes: 19 additions & 19 deletions castai/commitments/mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@ import (
type (
// Terraform SDK's diff setter uses mapstructure under the hood

GCPCUDResource struct {
// CAST AI only fields
CASTFields struct {
ID *string `mapstructure:"id,omitempty"` // ID of the commitment
AllowedUsage *float32 `mapstructure:"allowed_usage,omitempty"`
Prioritization *bool `mapstructure:"prioritization,omitempty"`
Status *string `mapstructure:"status,omitempty"`
Assignments []*CommitmentAssignmentResource `mapstructure:"assignments,omitempty"`
}

GCPCUDResource struct {
CASTFields `mapstructure:",squash"`
// Fields from GCP CUDs export JSON
CUDID string `mapstructure:"cud_id"` // ID of the CUD in GCP
CUDStatus string `mapstructure:"cud_status"`
Expand All @@ -40,13 +42,7 @@ type (
}

AzureReservationResource struct {
// CAST AI only fields
ID *string `mapstructure:"id,omitempty"` // ID of the commitment
AllowedUsage *float32 `mapstructure:"allowed_usage,omitempty"`
Prioritization *bool `mapstructure:"prioritization,omitempty"`
Status *string `mapstructure:"status,omitempty"`
Assignments []*CommitmentAssignmentResource `mapstructure:"assignments,omitempty"`

CASTFields `mapstructure:",squash"`
// Fields from Azure reservations export CSV
Count int `mapstructure:"count"`
ReservationID string `mapstructure:"reservation_id"` // ID of the reservation in Azure
Expand Down Expand Up @@ -184,10 +180,13 @@ func MapCommitmentToCUDResource(
}

return &GCPCUDResource{
ID: c.Id,
AllowedUsage: c.AllowedUsage,
Prioritization: c.Prioritization,
Status: (*string)(c.Status),
CASTFields: CASTFields{
ID: c.Id,
AllowedUsage: c.AllowedUsage,
Prioritization: c.Prioritization,
Status: (*string)(c.Status),
Assignments: MapCommitmentAssignmentsToResources(as, lo.FromPtr(c.Prioritization)),
},
CUDID: lo.FromPtr(c.GcpResourceCudContext.CudId),
CUDStatus: lo.FromPtr(c.GcpResourceCudContext.Status),
EndTimestamp: endDate,
Expand All @@ -198,7 +197,6 @@ func MapCommitmentToCUDResource(
MemoryMb: memory,
Plan: lo.FromPtr((*string)(c.GcpResourceCudContext.Plan)),
Type: lo.FromPtr(c.GcpResourceCudContext.Type),
Assignments: MapCommitmentAssignmentsToResources(as, lo.FromPtr(c.Prioritization)),
}, nil
}

Expand All @@ -218,10 +216,13 @@ func MapCommitmentToReservationResource(
endDate = c.EndDate.Format(time.RFC3339)
}
return &AzureReservationResource{
ID: c.Id,
AllowedUsage: c.AllowedUsage,
Prioritization: c.Prioritization,
Status: (*string)(c.Status),
CASTFields: CASTFields{
ID: c.Id,
AllowedUsage: c.AllowedUsage,
Prioritization: c.Prioritization,
Status: (*string)(c.Status),
Assignments: MapCommitmentAssignmentsToResources(as, lo.FromPtr(c.Prioritization)),
},
Count: int(lo.FromPtr(c.AzureReservationContext.Count)),
ReservationID: lo.FromPtr(c.AzureReservationContext.Id),
ReservationStatus: lo.FromPtr(c.AzureReservationContext.Status),
Expand All @@ -234,7 +235,6 @@ func MapCommitmentToReservationResource(
Scope: lo.FromPtr(c.AzureReservationContext.Scope),
ScopeResourceGroup: lo.FromPtr(c.AzureReservationContext.ScopeResourceGroup),
ScopeSubscription: lo.FromPtr(c.AzureReservationContext.ScopeSubscription),
Assignments: MapCommitmentAssignmentsToResources(as, lo.FromPtr(c.Prioritization)),
}, nil
}

Expand Down
120 changes: 68 additions & 52 deletions castai/commitments/mapping_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,16 @@ func TestMapCommitmentToCUDResource(t *testing.T) {
{ClusterId: lo.ToPtr("cluster-id-2")},
},
expected: &GCPCUDResource{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
CUDID: "123456",
CUDStatus: "ACTIVE",
StartTimestamp: endTs.Format(time.RFC3339),
Expand All @@ -66,10 +72,6 @@ func TestMapCommitmentToCUDResource(t *testing.T) {
MemoryMb: 1024,
Plan: "TWELVE_MONTHS",
Type: "COMPUTE_OPTIMIZED_C2D",
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
},
"should fail as gcp cud context is nil": {
Expand All @@ -91,10 +93,16 @@ func TestMapCommitmentToCUDResource(t *testing.T) {
{ClusterId: lo.ToPtr("cluster-id-2")},
},
expected: &GCPCUDResource{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
CUDID: "123456",
CUDStatus: "ACTIVE",
StartTimestamp: endTs.Format(time.RFC3339),
Expand All @@ -104,10 +112,6 @@ func TestMapCommitmentToCUDResource(t *testing.T) {
MemoryMb: 1024,
Plan: "TWELVE_MONTHS",
Type: "COMPUTE_OPTIMIZED_C2D",
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
},
"should succeed with nil memory": {
Expand All @@ -121,10 +125,16 @@ func TestMapCommitmentToCUDResource(t *testing.T) {
{ClusterId: lo.ToPtr("cluster-id-2")},
},
expected: &GCPCUDResource{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
CUDID: "123456",
CUDStatus: "ACTIVE",
StartTimestamp: endTs.Format(time.RFC3339),
Expand All @@ -134,10 +144,6 @@ func TestMapCommitmentToCUDResource(t *testing.T) {
CPU: 8,
Plan: "TWELVE_MONTHS",
Type: "COMPUTE_OPTIMIZED_C2D",
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
},
"should fail as cpu is an invalid string": {
Expand Down Expand Up @@ -218,10 +224,16 @@ func TestMapCommitmentToReservationResource(t *testing.T) {
{ClusterId: lo.ToPtr("cluster-id-2")},
},
expected: &AzureReservationResource{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
ID: lo.ToPtr(id1.String()),
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
Count: 2,
ReservationID: reservationID.String(),
ReservationStatus: "Succeeded",
Expand All @@ -234,10 +246,6 @@ func TestMapCommitmentToReservationResource(t *testing.T) {
Scope: "Single subscription",
ScopeResourceGroup: "All resource groups",
ScopeSubscription: scopeSubscription.String(),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-id-1"},
{ClusterID: "cluster-id-2"},
},
},
},
"should fail as azure reservation context is nil": {
Expand Down Expand Up @@ -341,9 +349,11 @@ func TestMapCUDImportToResource(t *testing.T) {
Plan: "TWELVE_MONTHS",
Type: "COMPUTE_OPTIMIZED_C2D",
// Configured fields
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
AllowedUsage: lo.ToPtr[float32](0.7),
CASTFields: CASTFields{
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
AllowedUsage: lo.ToPtr[float32](0.7),
},
},
},
"should fail as cpu amount is invalid": {
Expand Down Expand Up @@ -469,9 +479,11 @@ func TestMapReservationImportToResource(t *testing.T) {
return c
}(),
expected: &AzureReservationResource{
AllowedUsage: lo.ToPtr[float32](0.7),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
AllowedUsage: lo.ToPtr[float32](0.7),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
},
Count: 2,
ReservationID: lo.FromPtr(testAzureCommitmentImport.ReservationId),
ReservationStatus: lo.FromPtr(testAzureCommitmentImport.Status),
Expand Down Expand Up @@ -912,9 +924,15 @@ func TestMapConfiguredCUDImportsToResources(t *testing.T) {
},
expected: []*GCPCUDResource{
{
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-1", Priority: lo.ToPtr(1)},
{ClusterID: "cluster-2", Priority: lo.ToPtr(2)},
},
},
CUDID: lo.FromPtr(testGCPCommitmentImport.Id),
CUDStatus: lo.FromPtr(testGCPCommitmentImport.Status),
StartTimestamp: lo.FromPtr(testGCPCommitmentImport.StartTimestamp),
Expand All @@ -925,10 +943,6 @@ func TestMapConfiguredCUDImportsToResources(t *testing.T) {
MemoryMb: 20480,
Plan: lo.FromPtr(testGCPCommitmentImport.Plan),
Type: lo.FromPtr(testGCPCommitmentImport.Type),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-1"},
{ClusterID: "cluster-2"},
},
},
},
},
Expand Down Expand Up @@ -1015,9 +1029,15 @@ func TestMapConfiguredReservationImportsToResources(t *testing.T) {
},
expected: []*AzureReservationResource{
{
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
CASTFields: CASTFields{
AllowedUsage: lo.ToPtr[float32](0.5),
Prioritization: lo.ToPtr(true),
Status: lo.ToPtr("ACTIVE"),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-1", Priority: lo.ToPtr(1)},
{ClusterID: "cluster-2", Priority: lo.ToPtr(2)},
},
},
Count: int(lo.FromPtr(testAzureCommitmentImport.Quantity)),
ReservationID: lo.FromPtr(testAzureCommitmentImport.ReservationId),
ReservationStatus: lo.FromPtr(testAzureCommitmentImport.Status),
Expand All @@ -1030,10 +1050,6 @@ func TestMapConfiguredReservationImportsToResources(t *testing.T) {
Scope: lo.FromPtr(testAzureCommitmentImport.Scope),
ScopeResourceGroup: lo.FromPtr(testAzureCommitmentImport.ScopeResourceGroup),
ScopeSubscription: lo.FromPtr(testAzureCommitmentImport.ScopeSubscription),
Assignments: []*CommitmentAssignmentResource{
{ClusterID: "cluster-1"},
{ClusterID: "cluster-2"},
},
},
},
},
Expand Down

0 comments on commit e52211d

Please sign in to comment.