diff options
| -rw-r--r-- | web/fly/flydns/flydns.go | 97 | ||||
| -rw-r--r-- | web/fly/flydns/flydns_test.go | 17 |
2 files changed, 114 insertions, 0 deletions
diff --git a/web/fly/flydns/flydns.go b/web/fly/flydns/flydns.go new file mode 100644 index 0000000..7c34f14 --- /dev/null +++ b/web/fly/flydns/flydns.go @@ -0,0 +1,97 @@ +package flydns + +import ( + "fmt" + "net" + "net/netip" + "strings" +) + +func GetAppAddresses(appName string) ([]netip.Addr, error) { + addrs, err := net.LookupAddr(fmt.Sprintf("%s.internal", appName)) + if err != nil { + return nil, err + } + + var result []netip.Addr + + for _, addr := range addrs { + ip, err := netip.ParseAddr(addr) + if err != nil { + return nil, err + } + + result = append(result, ip) + } + + return result, nil +} + +func GetIndividualInstanceAddress(instanceID string, appName string) (netip.Addr, error) { + var ip netip.Addr + addr, err := net.LookupAddr(fmt.Sprintf("%s.vm.%s.internal", instanceID, appName)) + if err != nil { + return ip, err + } + + ip, err = netip.ParseAddr(addr[0]) + if err != nil { + return ip, err + } + + return ip, nil +} + +func GetAppInstancesInRegion(appName string, region string) ([]netip.Addr, error) { + instances, err := net.LookupHost(fmt.Sprintf("%s.%s.internal", appName, region)) + if err != nil { + return nil, err + } + + var result []netip.Addr + + for _, instance := range instances { + ip, err := netip.ParseAddr(instance) + if err != nil { + return nil, err + } + + result = append(result, ip) + } + + return result, nil +} + +func GetClosestInstances(appName string, count int) ([]netip.Addr, error) { + instances, err := net.LookupHost(fmt.Sprintf("top%d.nearest.of.%s.internal", count, appName)) + if err != nil { + return nil, err + } + + var result []netip.Addr + + for _, instance := range instances { + ip, err := netip.ParseAddr(instance) + if err != nil { + return nil, err + } + + result = append(result, ip) + } + + return result, nil +} + +func GetApps() ([]string, error) { + appString, err := net.LookupTXT("_apps.internal") + if err != nil { + return nil, err + } + + var result []string + for _, resp := range appString { + result = append(result, strings.Split(resp, ",")...) + } + + return result, nil +} diff --git a/web/fly/flydns/flydns_test.go b/web/fly/flydns/flydns_test.go new file mode 100644 index 0000000..c566461 --- /dev/null +++ b/web/fly/flydns/flydns_test.go @@ -0,0 +1,17 @@ +package flydns + +import ( + "testing" +) + +func TestGetApps(t *testing.T) { + // Call the function to be tested + result, err := GetApps() + + t.Logf("%v", result) + + // Check for the error + if err != nil { + t.Errorf("Expected no error, but got an error: %v", err) + } +} |
