diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-11-10 13:55:42 -0500 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-11-10 13:55:56 -0500 |
| commit | 9eda2ab57e642a0628b73bc0a9b7be13d12fbae4 (patch) | |
| tree | 4856a58c167126065382c4bf00237e6806e3fd72 /web | |
| parent | 38966c9ca9611087c901f5029046139d9b7f003e (diff) | |
| download | x-9eda2ab57e642a0628b73bc0a9b7be13d12fbae4.tar.xz x-9eda2ab57e642a0628b73bc0a9b7be13d12fbae4.zip | |
web/fly: start flydns client
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'web')
| -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) + } +} |
