Skip to content
This repository has been archived by the owner on Jan 8, 2024. It is now read-only.

core/api: Add grpc-gateway api #4379

Merged
merged 9 commits into from
Feb 8, 2023
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .changelog/4379.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:improvement
api: Enable HTTP API to talk to Waypoint
demophoon marked this conversation as resolved.
Show resolved Hide resolved
```
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ gen/server: # Generates server protobuf Go files from server.proto
@test -s "thirdparty/proto/api-common-protos/.git" || { echo "git submodules not initialized, run 'git submodule update --init --recursive' and try again"; exit 1; }
go generate ./pkg/server

.PHONY: gen/client
gen/client: # Generates grpc-gateway client from server.swagger.json
go generate ./pkg/client

.PHONY: gen/ts
gen/ts: # Generates frontend typescript files
# Clear existing generated files
Expand Down
10 changes: 5 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ require (
github.com/fsnotify/fsnotify v1.5.4
github.com/gliderlabs/ssh v0.3.1
github.com/go-git/go-git/v5 v5.2.0
github.com/go-openapi/errors v0.20.3
github.com/go-openapi/runtime v0.19.24
github.com/go-openapi/strfmt v0.21.3
github.com/go-openapi/swag v0.19.14
github.com/go-openapi/validate v0.20.2
github.com/go-ozzo/ozzo-validation/v4 v4.2.1
github.com/go-playground/validator v9.31.0+incompatible
github.com/gofrs/flock v0.8.0
Expand Down Expand Up @@ -190,15 +195,10 @@ require (
github.com/go-git/go-billy/v5 v5.0.0 // indirect
github.com/go-logr/logr v0.4.0 // indirect
github.com/go-openapi/analysis v0.20.0 // indirect
github.com/go-openapi/errors v0.20.3 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.19.5 // indirect
github.com/go-openapi/loads v0.20.2 // indirect
github.com/go-openapi/runtime v0.19.24 // indirect
github.com/go-openapi/spec v0.20.3 // indirect
github.com/go-openapi/strfmt v0.21.3 // indirect
github.com/go-openapi/swag v0.19.14 // indirect
github.com/go-openapi/validate v0.20.2 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/gobwas/glob v0.2.3 // indirect
Expand Down
25 changes: 23 additions & 2 deletions internal/server/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@ package server

import (
"context"
"crypto/tls"
"net"
"net/http"
"time"

assetfs "github.com/elazarl/go-bindata-assetfs"
"github.com/gorilla/mux"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/hashicorp/go-hclog"
"github.com/improbable-eng/grpc-web/go/grpcweb"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"

"github.com/hashicorp/waypoint/internal/server/httpapi"
"github.com/hashicorp/waypoint/pkg/server/gen"
"github.com/hashicorp/waypoint/pkg/serverclient"
)

type httpServer struct {
Expand All @@ -25,7 +29,7 @@ type httpServer struct {

// newHttpServer initializes a new http server.
// Uses grpc-web to wrap an existing grpc server.
func newHttpServer(grpcServer *grpc.Server, ln net.Listener, opts *options) *httpServer {
func newHttpServer(grpcServer *grpc.Server, ln net.Listener, opts *options) (*httpServer, error) {
log := opts.Logger.Named("http").With("ln", ln.Addr().String())

// Wrap the grpc server so that it is grpc-web compatible
Expand All @@ -48,11 +52,28 @@ func newHttpServer(grpcServer *grpc.Server, ln net.Listener, opts *options) *htt
// gRPC server. This is used by the exec handler.
grpcAddr := opts.GRPCListener.Addr().String()

// Create grpc-gateway muxer
grpcHandler := runtime.NewServeMux()

grpcOpts := serverclient.BuildDialOptions()

grpcOpts = append(grpcOpts,
grpc.WithTransportCredentials(
credentials.NewTLS(&tls.Config{InsecureSkipVerify: true}),
),
)

err := gen.RegisterWaypointHandlerFromEndpoint(opts.Context, grpcHandler, grpcAddr, grpcOpts)
if err != nil {
return nil, err
}

// Create our full router
r := mux.NewRouter()
r.HandleFunc("/v1/exec", httpapi.HandleExec(grpcAddr, true))
r.HandleFunc("/v1/trigger/{id:[a-zA-Z0-9]+}", httpapi.HandleTrigger(grpcAddr, true))
r.PathPrefix("/grpc").Handler(grpcWrapped)
r.PathPrefix("/v1").Handler(grpcHandler)
r.PathPrefix("/").Handler(uifs)

// Create our root handler which is just our router. We then wrap it
Expand All @@ -78,7 +99,7 @@ func newHttpServer(grpcServer *grpc.Server, ln net.Listener, opts *options) *htt
return opts.Context
},
},
}
}, nil
}

// start starts an http server
Expand Down
6 changes: 5 additions & 1 deletion internal/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,11 @@ func Run(opts ...Option) error {
httpErrs := make(chan error, len(cfg.HTTPListener))
for _, ln := range cfg.HTTPListener {
wg.Add(1)
httpServer := newHttpServer(grpcServer.server, ln, &cfg)
httpServer, err := newHttpServer(grpcServer.server, ln, &cfg)
if err != nil {
log.Error("failed setting up http server", "err", err)
return err
}
go func() {
err := httpServer.start()
httpErrs <- err
Expand Down
3 changes: 3 additions & 0 deletions pkg/client/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package client

//go:generate swagger generate client --strict-responders --spec ../server/gen/server.swagger.json --target ./gen --default-scheme=https
112 changes: 112 additions & 0 deletions pkg/client/gen/client/pkg_server_proto_server_proto_client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading