Skip to content

Commit 3801d8d

Browse files
committed
backup: prefer CLI datastore path when merging inventory
Fix PBS datastore inventory merge so the runtime CLI path overrides datastore.cfg for the same datastore identity. Add a regression test covering config-vs-CLI path precedence during merge.
1 parent 825bc63 commit 3801d8d

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

internal/backup/collector_pbs_datastore_inventory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ func mergePBSDatastoreDefinitions(cli, config []pbsDatastore) []pbsDatastoreDefi
496496
if entry.Name == "" && name != "" {
497497
entry.Name = name
498498
}
499-
if entry.Path == "" && path != "" {
499+
if path != "" && (entry.Path == "" || origin == pbsDatastoreSourceCLI) {
500500
entry.Path = path
501501
}
502502
if entry.Comment == "" && comment != "" {

internal/backup/collector_pbs_datastore_inventory_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,39 @@ func TestMergePBSDatastoreDefinitionsKeepsOverridesSeparate(t *testing.T) {
351351
}
352352
}
353353

354+
func TestMergePBSDatastoreDefinitionsPrefersCLIPathOverConfigPath(t *testing.T) {
355+
config := []pbsDatastore{{
356+
Name: "backup",
357+
Path: "/config/backup",
358+
Comment: "from config",
359+
Source: pbsDatastoreSourceConfig,
360+
CLIName: "backup",
361+
NormalizedPath: normalizePBSDatastorePath("/config/backup"),
362+
OutputKey: collectorPathKey("backup"),
363+
}}
364+
cli := []pbsDatastore{{
365+
Name: "backup",
366+
Path: "/runtime/backup",
367+
Comment: "from cli",
368+
Source: pbsDatastoreSourceCLI,
369+
CLIName: "backup",
370+
NormalizedPath: normalizePBSDatastorePath("/runtime/backup"),
371+
OutputKey: collectorPathKey("backup"),
372+
}}
373+
374+
merged := mergePBSDatastoreDefinitions(cli, config)
375+
if len(merged) != 1 {
376+
t.Fatalf("expected 1 merged entry, got %d: %+v", len(merged), merged)
377+
}
378+
379+
if merged[0].Origin != pbsDatastoreOriginMerged {
380+
t.Fatalf("expected merged origin, got %+v", merged[0])
381+
}
382+
if merged[0].Path != "/runtime/backup" {
383+
t.Fatalf("expected CLI path to win, got %+v", merged[0])
384+
}
385+
}
386+
354387
func TestMergePBSDatastoreDefinitionsDisambiguatesCLIAndOverrideOutputKeyCollisions(t *testing.T) {
355388
overridePath := "/mnt/a/backup"
356389
collidingKey := buildPBSOverrideOutputKey(overridePath)

0 commit comments

Comments
 (0)