Skip to content

Commit f51976e

Browse files
toppercodesampagent
andcommitted
Strip api-injected empty overrides from dashboard state
Amp-Thread-ID: https://ampcode.com/threads/T-019c9bc7-a165-774f-b025-2e92d6e0b9d5 Co-authored-by: Amp <amp@ampcode.com>
1 parent 6a32bc6 commit f51976e

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

axiom/resource_dashboard.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,14 @@ func normalizeDashboardRaw(raw json.RawMessage, configured types.String) (string
461461
delete(parsed, "uid")
462462
}
463463

464+
if overrides, ok := parsed["overrides"]; ok && isEmptyMap(overrides) {
465+
if !hasConfiguredMap {
466+
delete(parsed, "overrides")
467+
} else if _, configuredHasOverrides := configuredMap["overrides"]; !configuredHasOverrides {
468+
delete(parsed, "overrides")
469+
}
470+
}
471+
464472
normalized, err := json.Marshal(parsed)
465473
if err != nil {
466474
return "", err
@@ -510,6 +518,15 @@ func stringValueFromMap(in map[string]any, key string) (string, bool) {
510518
return s, true
511519
}
512520

521+
func isEmptyMap(v any) bool {
522+
m, ok := v.(map[string]any)
523+
if !ok {
524+
return false
525+
}
526+
527+
return len(m) == 0
528+
}
529+
513530
func addDashboardUpdateError(resp *resource.UpdateResponse, err error, uid string, localVersion int64) {
514531
addDashboardWriteErrorDiagnostics(&resp.Diagnostics, err, uid, localVersion)
515532
}

axiom/resource_dashboard_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,32 @@ func TestNormalizeDashboardRaw_RemovesUnconfiguredTopLevelFields(t *testing.T) {
9797
}
9898
}
9999

100+
func TestNormalizeDashboardRaw_KeepsConfiguredOverrides(t *testing.T) {
101+
got, err := normalizeDashboardRaw(
102+
json.RawMessage(`{"name":"dashboard","overrides":{"series":[]}}`),
103+
types.StringValue(`{"name":"dashboard","overrides":{"series":[]}}`),
104+
)
105+
if err != nil {
106+
t.Fatalf("expected no error, got %v", err)
107+
}
108+
if !strings.Contains(got, `"overrides"`) {
109+
t.Fatalf("expected configured overrides to be preserved, got %s", got)
110+
}
111+
}
112+
113+
func TestNormalizeDashboardRaw_RemovesEmptyOverridesWhenConfigUnavailable(t *testing.T) {
114+
got, err := normalizeDashboardRaw(
115+
json.RawMessage(`{"name":"dashboard","overrides":{}}`),
116+
types.StringNull(),
117+
)
118+
if err != nil {
119+
t.Fatalf("expected no error, got %v", err)
120+
}
121+
if strings.Contains(got, `"overrides"`) {
122+
t.Fatalf("expected empty overrides to be removed, got %s", got)
123+
}
124+
}
125+
100126
func TestDashboardUpsertPayloadFromModel_CreateWithUID(t *testing.T) {
101127
plan := DashboardResourceModel{
102128
UID: types.StringValue("uid_from_config"),

0 commit comments

Comments
 (0)