From 114a4bddcef51acdcd38a88289df1a4dbb6beac8 Mon Sep 17 00:00:00 2001 From: Xe Iaso Date: Fri, 10 Nov 2023 14:34:57 -0500 Subject: web/fly/flydns: add get machines and regions functions Signed-off-by: Xe Iaso --- web/fly/flydns/flydns.go | 53 ++++++++++++++++++++++++++++++++++++++++++- web/fly/flydns/flydns_test.go | 14 ++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) (limited to 'web') diff --git a/web/fly/flydns/flydns.go b/web/fly/flydns/flydns.go index 7c34f14..4b1431a 100644 --- a/web/fly/flydns/flydns.go +++ b/web/fly/flydns/flydns.go @@ -7,6 +7,10 @@ import ( "strings" ) +func combineString(inp []string) string { + return strings.Join(inp, "") +} + func GetAppAddresses(appName string) ([]netip.Addr, error) { addrs, err := net.LookupAddr(fmt.Sprintf("%s.internal", appName)) if err != nil { @@ -89,9 +93,56 @@ func GetApps() ([]string, error) { } var result []string - for _, resp := range appString { + for _, resp := range strings.Split(appString[0], ",") { result = append(result, strings.Split(resp, ",")...) } return result, nil } + +type Machine struct { + ID string + Region string +} + +func parseMachine(input string) (Machine, error) { + var result Machine + split := strings.Split(input, " ") + if len(split) != 2 { + return result, fmt.Errorf("invalid input") + } + + result.ID = split[0] + result.Region = split[1] + + return result, nil +} + +func GetMachines(appName string) ([]Machine, error) { + machines, err := net.LookupTXT(fmt.Sprintf("vms.%s.internal", appName)) + if err != nil { + return nil, err + } + + var result []Machine + for _, machine := range strings.Split(combineString(machines), ",") { + m, err := parseMachine(machine) + if err != nil { + return nil, err + } + + result = append(result, m) + } + + return result, nil + +} + +func GetRegions(appName string) ([]string, error) { + regions, err := net.LookupTXT(fmt.Sprintf("regions.%s.internal", appName)) + if err != nil { + return nil, err + } + + return strings.Split(combineString(regions), ","), nil +} diff --git a/web/fly/flydns/flydns_test.go b/web/fly/flydns/flydns_test.go index c566461..9145ed4 100644 --- a/web/fly/flydns/flydns_test.go +++ b/web/fly/flydns/flydns_test.go @@ -15,3 +15,17 @@ func TestGetApps(t *testing.T) { t.Errorf("Expected no error, but got an error: %v", err) } } + +func TestParseMachine(t *testing.T) { + input := "1781965b593689 yyz" + expected := Machine{"1781965b593689", "yyz"} + + result, err := parseMachine(input) + if err != nil { + t.Errorf("Expected no error, but got an error: %v", err) + } + + if result != expected { + t.Errorf("Expected %v, but got %v", expected, result) + } +} -- cgit v1.2.3