grpcflag

package module
v0.0.0-...-f43cf22 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2021 License: Apache-2.0 Imports: 16 Imported by: 0

README

Package grpcflag implements functions to use gRPC with github.com/urfave/cli/v2.

GoDoc

Server example

package main

import (
	"context"
	"os"
	"time"

	"github.com/takumakei/go-exit"
	"github.com/takumakei/go-urfave-cli/clix"
	"github.com/takumakei/go-urfave-cli/grpcflag"
	"github.com/urfave/cli/v2"
	pb "google.golang.org/grpc/examples/helloworld/helloworld"
)

var flag = grpcflag.NewServer(
	clix.FlagPrefix("GREETER_"),
	grpcflag.Address("127.0.0.1:9900"),
)

func main() {
	app := cli.NewApp()
	app.Usage = "greeter server"
	app.Flags = flag.Flags()
	app.Before = flag.Before
	app.Action = Action
	exit.Exit(app.Run(os.Args))
}

func Action(c *cli.Context) error {
	s, err := flag.NewServer()
	if err != nil {
		return err
	}
	pb.RegisterGreeterServer(s, &Greeter{})
	return flag.ListenAndServe(s)
}

type Greeter struct {
	pb.UnimplementedGreeterServer
}

func (*Greeter) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
	reply := &pb.HelloReply{
		Message: "hello " + req.Name + " ! " + time.Now().Format(time.RFC3339Nano),
	}
	return reply, nil
}
output
$ go run ./examples/greeter/server --help
NAME:
   server - greeter server

USAGE:
   server [global options] command [command options] [arguments...]

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --address value, --addr value            address to connect (default: "127.0.0.1:9900") [$GREETER_ADDRESS, $GREETER_ADDR]
   --tls-cert file, --tlscrt file           client certificate pem file [$GREETER_TLS_CERT, $GREETER_TLSCRT]
   --tls-cert-key file, --tlskey file       private key file for client certificate [$GREETER_TLS_CERT_KEY, $GREETER_TLSKEY]
   --tls-gen-cert, --tlsgen                 whether to create and use self signed certificate (default: false) [$GREETER_TLS_GEN_CERT, $GREETER_TLSGEN]
   --tls-verify-client, --mtls              verify client certificate (mTLS) (default: false) [$GREETER_TLS_VERIFY_CLIENT, $GREETER_MTLS]
   --tls-client-ca file, --tlsca file       root CAs certificate file [$GREETER_TLS_CLIENT_CA, $GREETER_TLSCA]
   --tls-min-version value, --tlsmin value  TLS minimum version (default: 1.2) [$GREETER_TLS_MIN_VERSION, $GREETER_TLSMIN]
   --tls-max-version value, --tlsmax value  TLS maximum version (default: 1.3) [$GREETER_TLS_MAX_VERSION, $GREETER_TLSMAX]
   --help, -h                               show help (default: false)
$

Client example

package main

import (
	"context"
	"fmt"
	"os"
	"time"

	"github.com/takumakei/go-exit"
	"github.com/takumakei/go-urfave-cli/clix"
	"github.com/takumakei/go-urfave-cli/grpcflag"
	"github.com/urfave/cli/v2"
	pb "google.golang.org/grpc/examples/helloworld/helloworld"
)

var flag = grpcflag.NewDialer(
	clix.FlagPrefix("GREETER_"),
	grpcflag.Address("127.0.0.1:9900"),
)

func main() {
	app := cli.NewApp()
	app.Usage = "greeter client"
	app.Flags = flag.Flags()
	app.Before = flag.Before
	app.Action = Action
	exit.Exit(app.Run(os.Args))
}

func Action(c *cli.Context) error {
	ctx, cancel := context.WithTimeout(c.Context, 3*time.Second)
	conn, err := flag.DialContext(ctx)
	cancel()
	if err != nil {
		return err
	}

	greeter := pb.NewGreeterClient(conn)

	ctx, cancel = context.WithTimeout(c.Context, 3*time.Second)
	reply, err := greeter.SayHello(ctx, &pb.HelloRequest{Name: "kei"})
	cancel()
	if err != nil {
		return err
	}
	fmt.Println(reply.Message)

	return nil
}
output
$ go run -trimpath ./examples/greeter/client --help
NAME:
   client - greeter client

USAGE:
   client [global options] command [command options] [arguments...]

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --address value, --addr value               address to connect (default: "127.0.0.1:9900") [$GREETER_ADDRESS, $GREETER_ADDR]
   --with-insecure, --insecure                 whether to use grpc.WithInsecure (default: false) [$GREETER_WITH_INSECURE, $GREETER_INSECURE]
   --with-block, --block                       whether to use grpc.WithBlock (default: false) [$GREETER_WITH_BLOCK, $GREETER_BLOCK]
   --tls-root-ca file, --tlsca file            root CAs certificate file [$GREETER_TLS_ROOT_CA, $GREETER_TLSCA]
   --tls-server-name value, --tlsserver value  ServerName of tls.Config [$GREETER_TLS_SERVER_NAME, $GREETER_TLSSERVER]
   --tls-skip-verify, --tlsinsecure            InsecureSkipVerify of tls.Config (default: false) [$GREETER_TLS_SKIP_VERIFY, $GREETER_TLSINSECURE]
   --tls-cert file, --tlscrt file              client certificate pem file [$GREETER_TLS_CERT, $GREETER_TLSCRT]
   --tls-cert-key file, --tlskey file          private key file for client certificate [$GREETER_TLS_CERT_KEY, $GREETER_TLSKEY]
   --tls-min-version value, --tlsmin value     TLS minimum version (default: 1.2) [$GREETER_TLS_MIN_VERSION, $GREETER_TLSMIN]
   --tls-max-version value, --tlsmax value     TLS maximum version (default: 1.3) [$GREETER_TLS_MAX_VERSION, $GREETER_TLSMAX]
   --help, -h                                  show help (default: false)
$

Documentation

Overview

Package grpcflag implements functions to use gRPC with github.com/urfave/cli/v2.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	Network       []string
	Address       string
	Reflection    bool
	TLSMinVersion uint16
	TLSMaxVersion uint16
}

func NewConfig

func NewConfig(opt ...Option) Config

func (*Config) Apply

func (c *Config) Apply(opts []Option)

func (*Config) NetworkPredetermined

func (c *Config) NetworkPredetermined() bool

func (*Config) NetworkRequired

func (c *Config) NetworkRequired() bool

func (*Config) NetworkUsage

func (c *Config) NetworkUsage() string

func (*Config) NetworkValue

func (c *Config) NetworkValue() string

type Dialer

type Dialer struct {
	Name string

	// PredeterminedNetwork is true if the value of FlagNetwork is predetermined by the option.
	PredeterminedNetwork bool

	FlagNetwork       *cli.StringFlag
	FlagAddress       *cli.StringFlag
	FlagInsecure      *cli.BoolFlag
	FlagBlock         *cli.BoolFlag
	FlagTLSRootCAs    *cli.StringSliceFlag
	FlagTLSServerName *cli.StringFlag
	FlagTLSSkipVerify *cli.BoolFlag
	FlagTLSCerts      *cli.StringSliceFlag
	FlagTLSCertKeys   *cli.StringSliceFlag
	FlagTLSMinVersion *cli.GenericFlag
	FlagTLSMaxVersion *cli.GenericFlag

	FlagSet clix.FlagSet
}

func NewDialer

func NewDialer(prefix clix.FlagPrefix, opt ...Option) *Dialer

func NewDialerName

func NewDialerName(prefix clix.FlagPrefix, name string, opt ...Option) *Dialer

func (*Dialer) Address

func (f *Dialer) Address() string

func (*Dialer) Before

func (f *Dialer) Before(c *cli.Context) error

func (*Dialer) Block

func (f *Dialer) Block() bool

func (*Dialer) Dial

func (f *Dialer) Dial() (*grpc.ClientConn, error)

func (*Dialer) DialContext

func (f *Dialer) DialContext(ctx context.Context) (*grpc.ClientConn, error)

func (*Dialer) DialOption

func (f *Dialer) DialOption() ([]grpc.DialOption, error)

func (*Dialer) Flags

func (f *Dialer) Flags() []cli.Flag

func (*Dialer) Insecure

func (f *Dialer) Insecure() bool

func (*Dialer) Network

func (f *Dialer) Network() string

func (*Dialer) TLSCertKeys

func (f *Dialer) TLSCertKeys() []string

func (*Dialer) TLSCerts

func (f *Dialer) TLSCerts() []string

func (*Dialer) TLSConfig

func (f *Dialer) TLSConfig() (*tls.Config, error)

func (*Dialer) TLSMaxVersion

func (f *Dialer) TLSMaxVersion() uint16

func (*Dialer) TLSMinVersion

func (f *Dialer) TLSMinVersion() uint16

func (*Dialer) TLSRootCAs

func (f *Dialer) TLSRootCAs() []string

func (*Dialer) TLSServerName

func (f *Dialer) TLSServerName() string

func (*Dialer) TLSSkipVerify

func (f *Dialer) TLSSkipVerify() bool

type Option

type Option func(*Config)

func Address

func Address(address string) Option

func Network

func Network(network ...string) Option

func Reflection

func Reflection(v bool) Option

func TLSMaxVersion

func TLSMaxVersion(v uint16) Option

func TLSMinVersion

func TLSMinVersion(v uint16) Option

type Server

type Server struct {
	Name string

	PredeterminedNetwork bool

	FlagNetwork *cli.StringFlag
	FlagAddress *cli.StringFlag

	FlagReflection *cli.BoolFlag

	FlagTLSCerts    *cli.StringSliceFlag
	FlagTLSCertKeys *cli.StringSliceFlag

	FlagTLSGenCert *cli.BoolFlag

	FlagTLSVerifyClient *cli.BoolFlag
	FlagTLSClientCAs    *cli.StringSliceFlag

	FlagTLSMinVersion *cli.GenericFlag
	FlagTLSMaxVersion *cli.GenericFlag

	FlagSet clix.FlagSet
}

func NewServer

func NewServer(prefix clix.FlagPrefix, opt ...Option) *Server

func NewServerName

func NewServerName(prefix clix.FlagPrefix, name string, opt ...Option) *Server

func (*Server) Address

func (f *Server) Address() string

func (*Server) Before

func (f *Server) Before(c *cli.Context) error

func (*Server) Flags

func (f *Server) Flags() []cli.Flag

func (*Server) Listen

func (f *Server) Listen() (net.Listener, error)

func (*Server) ListenAndServe

func (f *Server) ListenAndServe(s *grpc.Server) error

func (*Server) ListenNetwork

func (f *Server) ListenNetwork(network string) (net.Listener, error)

func (*Server) ListenNetworkAndServe

func (f *Server) ListenNetworkAndServe(network string, s *grpc.Server) error

func (*Server) LookupTLSVerifyClient

func (f *Server) LookupTLSVerifyClient() (val bool, ok bool)

func (*Server) Network

func (f *Server) Network() string

func (*Server) NewServer

func (f *Server) NewServer(opt ...grpc.ServerOption) (*grpc.Server, error)

func (*Server) Reflection

func (f *Server) Reflection() bool

func (*Server) ServerOptions

func (f *Server) ServerOptions(opt ...grpc.ServerOption) ([]grpc.ServerOption, error)

func (*Server) TLSCertKeys

func (f *Server) TLSCertKeys() []string

func (*Server) TLSCerts

func (f *Server) TLSCerts() []string

func (*Server) TLSClientCAs

func (f *Server) TLSClientCAs() []string

func (*Server) TLSConfig

func (f *Server) TLSConfig() (*tls.Config, error)

func (*Server) TLSGenCert

func (f *Server) TLSGenCert() bool

func (*Server) TLSMaxVersion

func (f *Server) TLSMaxVersion() uint16

func (*Server) TLSMinVersion

func (f *Server) TLSMinVersion() uint16

func (*Server) TLSVerifyClient

func (f *Server) TLSVerifyClient() bool

func (*Server) UseTLS

func (f *Server) UseTLS() bool

type TLSVersion

type TLSVersion struct {
	// contains filtered or unexported fields
}

TLSVersion wraps a uint16 as tls.Version* to satisfy flag.Value.

func NewTLSVersion

func NewTLSVersion(value uint16) *TLSVersion

NewTLSVersion creates a *TLSVersion with a default value.

func (*TLSVersion) Set

func (tv *TLSVersion) Set(value string) error

Set parses value as TLS version string, sets it.

func (*TLSVersion) String

func (tv *TLSVersion) String() string

String returns a readable representation of this value (for usage defaults)

func (*TLSVersion) Value

func (tv *TLSVersion) Value() uint16

Value returns an uint16 as TLS version set by this flag.

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL