forked from TrueCloudLab/frostfs-http-gw
47 lines
1 KiB
Go
47 lines
1 KiB
Go
|
package resolver
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/nspcc-dev/neofs-sdk-go/netmap"
|
||
|
"github.com/nspcc-dev/neofs-sdk-go/pool"
|
||
|
)
|
||
|
|
||
|
// NeoFSResolver represents virtual connection to the NeoFS network.
|
||
|
// It implements resolver.NeoFS.
|
||
|
type NeoFSResolver struct {
|
||
|
pool *pool.Pool
|
||
|
}
|
||
|
|
||
|
// NewNeoFSResolver creates new NeoFSResolver using provided pool.Pool.
|
||
|
func NewNeoFSResolver(p *pool.Pool) *NeoFSResolver {
|
||
|
return &NeoFSResolver{pool: p}
|
||
|
}
|
||
|
|
||
|
// SystemDNS implements resolver.NeoFS interface method.
|
||
|
func (x *NeoFSResolver) SystemDNS(ctx context.Context) (string, error) {
|
||
|
networkInfo, err := x.pool.NetworkInfo(ctx)
|
||
|
if err != nil {
|
||
|
return "", fmt.Errorf("read network info via client: %w", err)
|
||
|
}
|
||
|
|
||
|
var domain string
|
||
|
|
||
|
networkInfo.NetworkConfig().IterateParameters(func(parameter *netmap.NetworkParameter) bool {
|
||
|
if string(parameter.Key()) == "SystemDNS" {
|
||
|
domain = string(parameter.Value())
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
return false
|
||
|
})
|
||
|
|
||
|
if domain == "" {
|
||
|
return "", errors.New("system DNS parameter not found or empty")
|
||
|
}
|
||
|
|
||
|
return domain, nil
|
||
|
}
|