diff --git a/service.go b/service.go index 8f14aa7..cff31cd 100644 --- a/service.go +++ b/service.go @@ -414,6 +414,34 @@ func parseActionAliasList(value any) ([]string, error) { return normalizeAliasList([]string{aliases}), nil case []string: return normalizeAliasList(aliases), nil + case []map[string]any: + parsed := make([]string, 0, len(aliases)) + for _, alias := range aliases { + name, err := parseActionAliasRecord(alias) + if err != nil { + return nil, err + } + if name != "" { + parsed = append(parsed, name) + } + } + return normalizeAliasList(parsed), nil + case []map[string]string: + parsed := make([]string, 0, len(aliases)) + for _, alias := range aliases { + normalized := map[string]any{} + for key, value := range alias { + normalized[key] = value + } + name, err := parseActionAliasRecord(normalized) + if err != nil { + return nil, err + } + if name != "" { + parsed = append(parsed, name) + } + } + return normalizeAliasList(parsed), nil case []any: parsed := make([]string, 0, len(aliases)) for _, item := range aliases { diff --git a/service_test.go b/service_test.go index 3e5c18d..0ea2ac4 100644 --- a/service_test.go +++ b/service_test.go @@ -3182,6 +3182,48 @@ func TestStringActionValueRejectsWhitespaceOnlyArgument(t *testing.T) { } } +func TestParseActionAliasListAcceptsMapSliceTypedAny(t *testing.T) { + aliases, err := parseActionAliasList([]map[string]any{ + { + "hns": "gateway.charon.lthn", + }, + { + "name": "node", + "comment": "node alias hns=node.charon.lthn", + }, + }) + if err != nil { + t.Fatalf("unexpected typed map slice parse error: %v", err) + } + if len(aliases) != 2 { + t.Fatalf("expected two aliases, got %#v", aliases) + } + if aliases[0] != "gateway.charon.lthn" || aliases[1] != "node.charon.lthn" { + t.Fatalf("unexpected alias parsing result: %#v", aliases) + } +} + +func TestParseActionAliasListAcceptsStringMapSlice(t *testing.T) { + aliases, err := parseActionAliasList([]map[string]string{ + { + "hns": "gateway.charon.lthn", + }, + { + "name": "node", + "comment": "node alias hns=node.charon.lthn", + }, + }) + if err != nil { + t.Fatalf("unexpected typed string map slice parse error: %v", err) + } + if len(aliases) != 2 { + t.Fatalf("expected two aliases, got %#v", aliases) + } + if aliases[0] != "gateway.charon.lthn" || aliases[1] != "node.charon.lthn" { + t.Fatalf("unexpected alias parsing result: %#v", aliases) + } +} + func TestNormalizeNameAndNormalizeIPArePublicWrappers(t *testing.T) { normalizedName := NormalizeName(" Gateway.Charon.lthn. ") if normalizedName != "gateway.charon.lthn" {