main: add grpc-gateway support

Now etcd can serve HTTP json request at /v3alpha/
This commit is contained in:
Xiang Li
2016-06-06 19:49:17 -07:00
parent 6958334db2
commit 5a7b7f7595
10 changed files with 2254 additions and 286 deletions

View File

@@ -21,6 +21,7 @@ DIRS="./wal/walpb ./etcdserver/etcdserverpb ./snap/snappb ./raft/raftpb ./mvcc/m
# exact version of protoc-gen-gogo to build
SHA="c3995ae437bb78d1189f4f147dfe5f87ad3596e4"
GRPC_GATEWAY_SHA="dcb844349dc5d2cb0300fdc4d2d374839d0d2e13"
# set up self-contained GOPATH for building
export GOPATH=${PWD}/gopath
@@ -31,6 +32,7 @@ COREOS_ROOT="${GOPATH}/src/github.com/coreos"
ETCD_ROOT="${COREOS_ROOT}/etcd"
GOGOPROTO_ROOT="${GOPATH}/src/github.com/gogo/protobuf"
GOGOPROTO_PATH="${GOGOPROTO_ROOT}:${GOGOPROTO_ROOT}/protobuf"
GRPC_GATEWAY_ROOT="${GOPATH}/src/github.com/gengo/grpc-gateway"
rm -f "${ETCD_ROOT}"
mkdir -p "${COREOS_ROOT}"
@@ -45,18 +47,30 @@ pushd "${GOGOPROTO_ROOT}"
make install
popd
# generate gateway code
go get -u github.com/gengo/grpc-gateway/protoc-gen-grpc-gateway
pushd "${GRPC_GATEWAY_ROOT}"
git reset --hard "${GRPC_GATEWAY_SHA}"
go install ./protoc-gen-grpc-gateway
popd
for dir in ${DIRS}; do
pushd ${dir}
protoc --gogofast_out=plugins=grpc,import_prefix=github.com/coreos/:. -I=.:"${GOGOPROTO_PATH}":"${COREOS_ROOT}" *.proto
protoc --gogofast_out=plugins=grpc,import_prefix=github.com/coreos/:. -I=.:"${GOGOPROTO_PATH}":"${COREOS_ROOT}":"${GRPC_GATEWAY_ROOT}/third_party/googleapis" *.proto
sed -i.bak -E "s/github\.com\/coreos\/(gogoproto|github\.com|golang\.org|google\.golang\.org)/\1/g" *.pb.go
sed -i.bak -E 's/github\.com\/coreos\/(errors|fmt|io)/\1/g' *.pb.go
sed -i.bak -E 's/import _ \"gogoproto\"//g' *.pb.go
sed -i.bak -E 's/import fmt \"fmt\"//g' *.pb.go
sed -i.bak -E 's/import _ \"github\.com\/coreos\/google\/api\"//g' *.pb.go
rm -f *.bak
goimports -w *.pb.go
popd
done
protoc -I. \
-I${GRPC_GATEWAY_ROOT}/third_party/googleapis \
-I${GOGOPROTO_PATH} \
-I${COREOS_ROOT} --grpc-gateway_out=logtostderr=true:. ./etcdserver/etcdserverpb/rpc.proto
# install protodoc
# go get -v -u github.com/coreos/protodoc