forked from TrueCloudLab/frostfs-api-go
[#290] client: Add WithURIAddress
option
Add `WithURIAddress` option to client. It parses passed address with `url.ParseRequestURI` function and use(or not) TLS over grpc connection based on retrieved scheme('grpc' or 'grpcs'). Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
65080c8b69
commit
52c1c4c5ab
3 changed files with 284 additions and 9 deletions
|
@ -116,19 +116,19 @@ func defaultClientOptions() *clientOptions {
|
|||
}
|
||||
}
|
||||
|
||||
// WithAddress returns option to specify
|
||||
// network address of the remote server.
|
||||
//
|
||||
// Ignored if WithGRPCConnection is provided.
|
||||
func WithAddress(addr string) Option {
|
||||
return func(opts *clientOptions) {
|
||||
opts.rawOpts = append(opts.rawOpts, client.WithNetworkAddress(addr))
|
||||
}
|
||||
}
|
||||
|
||||
func WithGRPCConnection(grpcConn *grpc.ClientConn) Option {
|
||||
return func(opts *clientOptions) {
|
||||
opts.rawOpts = append(opts.rawOpts, client.WithGRPCConn(grpcConn))
|
||||
}
|
||||
}
|
||||
|
||||
// WithDialTimeout returns option to set connection timeout to the remote node.
|
||||
//
|
||||
// Ignored if WithGRPCConn is provided.
|
||||
func WithDialTimeout(dur time.Duration) Option {
|
||||
return func(opts *clientOptions) {
|
||||
opts.rawOpts = append(opts.rawOpts, client.WithDialTimeout(dur))
|
||||
|
@ -136,6 +136,8 @@ func WithDialTimeout(dur time.Duration) Option {
|
|||
}
|
||||
|
||||
// WithTLSConfig returns option to set connection's TLS config to the remote node.
|
||||
//
|
||||
// Ignored if WithGRPCConnection is provided.
|
||||
func WithTLSConfig(cfg *tls.Config) Option {
|
||||
return func(opts *clientOptions) {
|
||||
opts.rawOpts = append(opts.rawOpts, client.WithTLSCfg(cfg))
|
||||
|
@ -149,3 +151,37 @@ func WithDefaultPrivateKey(key *ecdsa.PrivateKey) Option {
|
|||
opts.key = key
|
||||
}
|
||||
}
|
||||
|
||||
// WithURIAddress returns option to specify
|
||||
// network address of a remote server and connection
|
||||
// scheme for it.
|
||||
//
|
||||
// Format of the URI:
|
||||
//
|
||||
// [scheme://]host:port
|
||||
//
|
||||
// Supported schemes:
|
||||
// - grpc;
|
||||
// - grpcs.
|
||||
//
|
||||
// tls.Cfg second argument is optional and is taken into
|
||||
// account only in case of `grpcs` scheme.
|
||||
//
|
||||
// Falls back to WithNetworkAddress if address is not a valid URI.
|
||||
//
|
||||
// Do not use along with WithAddress and WithTLSConfig.
|
||||
//
|
||||
// Ignored if WithGRPCConnection is provided.
|
||||
func WithURIAddress(addr string, tlsCfg *tls.Config) Option {
|
||||
return func(opts *clientOptions) {
|
||||
opts.rawOpts = append(opts.rawOpts, client.WithNetworkURIAddress(addr, tlsCfg)...)
|
||||
}
|
||||
}
|
||||
|
||||
// WithGRPCConnection returns option to set GRPC connection to
|
||||
// the remote node.
|
||||
func WithGRPCConnection(grpcConn *grpc.ClientConn) Option {
|
||||
return func(opts *clientOptions) {
|
||||
opts.rawOpts = append(opts.rawOpts, client.WithGRPCConn(grpcConn))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue