Skip to content

Commit 0da7ded

Browse files
committed
Support BOOTSTRAP_SERVER_MAPPING and EXTERNAL_SERVER_MAPPING as env variables
1 parent 9769bc4 commit 0da7ded

File tree

136 files changed

+31780
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+31780
-7
lines changed

Gopkg.lock

Lines changed: 69 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ VERSION ?= $(shell git describe --tags --always --dirty)
88
GOPKGS = $(shell go list ./... | grep -v /vendor/)
99
BUILD_FLAGS ?=
1010
LDFLAGS ?= -X github.com/grepplabs/kafka-proxy/config.Version=$(VERSION) -w -s
11-
TAG ?= "v0.0.5"
11+
TAG ?= "v0.0.6"
1212
GOARCH ?= amd64
1313
GOOS ?= linux
1414

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ See:
3434

3535
Linux
3636

37-
curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.0.5/kafka-proxy_0.0.5_linux_amd64.tar.gz | tar xz
37+
curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.0.6/kafka-proxy_0.0.6_linux_amd64.tar.gz | tar xz
3838

3939
macOS
4040

41-
curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.0.5/kafka-proxy_0.0.5_darwin_amd64.tar.gz | tar xz
41+
curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.0.6/kafka-proxy_0.0.6_darwin_amd64.tar.gz | tar xz
4242

4343
2. Move the binary in to your PATH.
4444

@@ -148,6 +148,8 @@ See:
148148
--tls-enable --tls-insecure-skip-verify \
149149
--sasl-enable --sasl-username myuser --sasl-password mysecret
150150
151+
export BOOTSTRAP_SERVER_MAPPING="192.168.99.100:32401,0.0.0.0:32402 192.168.99.100:32402,0.0.0.0:32403" && kafka-proxy server
152+
151153
### Proxy authentication example
152154
153155
make clean build plugin.auth-user && build/kafka-proxy server --proxy-listener-key-file "server-key.pem" \

cmd/kafka-proxy/server.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/prometheus/client_golang/prometheus/promhttp"
1010
"github.com/sirupsen/logrus"
1111
"github.com/spf13/cobra"
12+
1213
"net"
1314
"net/http"
1415
_ "net/http/pprof"
@@ -25,11 +26,13 @@ import (
2526
localauth "github.com/grepplabs/kafka-proxy/plugin/local-auth/shared"
2627
"github.com/hashicorp/go-hclog"
2728
"github.com/hashicorp/go-plugin"
29+
"strings"
2830

2931
"github.com/grepplabs/kafka-proxy/pkg/registry"
3032
// built-in plugins
3133
_ "github.com/grepplabs/kafka-proxy/pkg/libs/googleid-info"
3234
_ "github.com/grepplabs/kafka-proxy/pkg/libs/googleid-provider"
35+
"github.com/spf13/viper"
3336
)
3437

3538
var (
@@ -48,10 +51,10 @@ var Server = &cobra.Command{
4851
if err := c.InitSASLCredentials(); err != nil {
4952
return err
5053
}
51-
if err := c.InitBootstrapServers(bootstrapServersMapping); err != nil {
54+
if err := c.InitBootstrapServers(getOrStringSlice(bootstrapServersMapping, "bootstrap-server-mapping")); err != nil {
5255
return err
5356
}
54-
if err := c.InitExternalServers(externalServersMapping); err != nil {
57+
if err := c.InitExternalServers(getOrStringSlice(externalServersMapping, "external-server-mapping")); err != nil {
5558
return err
5659
}
5760
if err := c.Validate(); err != nil {
@@ -62,11 +65,21 @@ var Server = &cobra.Command{
6265
Run: Run,
6366
}
6467

68+
func getOrStringSlice(value []string, key string) []string {
69+
if len(bootstrapServersMapping) != 0 {
70+
return value
71+
}
72+
return viper.GetStringSlice(key)
73+
}
74+
6575
func init() {
76+
initFlags()
77+
}
78+
79+
func initFlags() {
6680
// proxy
6781
Server.Flags().StringVar(&c.Proxy.DefaultListenerIP, "default-listener-ip", "127.0.0.1", "Default listener IP")
6882
Server.Flags().StringArrayVar(&bootstrapServersMapping, "bootstrap-server-mapping", []string{}, "Mapping of Kafka bootstrap server address to local address (host:port,host:port(,advhost:advport))")
69-
Server.MarkFlagRequired("bootstrap-server-mapping")
7083
Server.Flags().StringArrayVar(&externalServersMapping, "external-server-mapping", []string{}, "Mapping of Kafka server address to external address (host:port,host:port). A listener for the external address is not started")
7184
Server.Flags().BoolVar(&c.Proxy.DisableDynamicListeners, "dynamic-listeners-disable", false, "Disable dynamic listeners.")
7285

@@ -151,6 +164,9 @@ func init() {
151164

152165
// Connect through Socks5 or HTTP CONNECT to Kafka
153166
Server.Flags().StringVar(&c.ForwardProxy.Url, "forward-proxy", "", "URL of the forward proxy. Supported schemas are socks5 and http")
167+
168+
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
169+
viper.AutomaticEnv() // read in environment variables that match
154170
}
155171

156172
func Run(_ *cobra.Command, _ []string) {

cmd/kafka-proxy/server_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package server
2+
3+
import (
4+
"github.com/grepplabs/kafka-proxy/config"
5+
"github.com/stretchr/testify/assert"
6+
"os"
7+
"testing"
8+
)
9+
10+
func setupBootstrapServersMappingTest() {
11+
Server.ResetFlags()
12+
c = new(config.Config)
13+
initFlags()
14+
os.Setenv("BOOTSTRAP_SERVER_MAPPING", "")
15+
}
16+
17+
func TestBootstrapServersMappingFromFlags(t *testing.T) {
18+
setupBootstrapServersMappingTest()
19+
20+
args := []string{"cobra.test",
21+
"--bootstrap-server-mapping", "192.168.99.100:32401,0.0.0.0:32401",
22+
"--bootstrap-server-mapping", "192.168.99.100:32402,0.0.0.0:32402",
23+
"--bootstrap-server-mapping", "kafka-2.example.com:9092,0.0.0.0:32403,kafka-2.grepplabs.com:9092",
24+
}
25+
26+
Server.ParseFlags(args)
27+
err := Server.PreRunE(nil, args)
28+
a := assert.New(t)
29+
a.Nil(err)
30+
a.Len(c.Proxy.BootstrapServers, 3)
31+
32+
a.Equal(c.Proxy.BootstrapServers[0].BrokerAddress, "192.168.99.100:32401")
33+
a.Equal(c.Proxy.BootstrapServers[0].ListenerAddress, "0.0.0.0:32401")
34+
a.Equal(c.Proxy.BootstrapServers[0].AdvertisedAddress, "0.0.0.0:32401")
35+
36+
a.Equal(c.Proxy.BootstrapServers[1].BrokerAddress, "192.168.99.100:32402")
37+
a.Equal(c.Proxy.BootstrapServers[1].ListenerAddress, "0.0.0.0:32402")
38+
a.Equal(c.Proxy.BootstrapServers[1].AdvertisedAddress, "0.0.0.0:32402")
39+
40+
a.Equal(c.Proxy.BootstrapServers[2].BrokerAddress, "kafka-2.example.com:9092")
41+
a.Equal(c.Proxy.BootstrapServers[2].ListenerAddress, "0.0.0.0:32403")
42+
a.Equal(c.Proxy.BootstrapServers[2].AdvertisedAddress, "kafka-2.grepplabs.com:9092")
43+
44+
}
45+
46+
func TestBootstrapServersMappingFromEnv(t *testing.T) {
47+
setupBootstrapServersMappingTest()
48+
49+
os.Setenv("BOOTSTRAP_SERVER_MAPPING", "192.168.99.100:32404,0.0.0.0:32404 kafka-5.example.com:9092,0.0.0.0:32405,kafka-5.grepplabs.com:9092")
50+
51+
var args []string
52+
Server.ParseFlags(args)
53+
err := Server.PreRunE(nil, args)
54+
a := assert.New(t)
55+
a.Nil(err)
56+
a.Len(c.Proxy.BootstrapServers, 2)
57+
58+
a.Equal(c.Proxy.BootstrapServers[0].BrokerAddress, "192.168.99.100:32404")
59+
a.Equal(c.Proxy.BootstrapServers[0].ListenerAddress, "0.0.0.0:32404")
60+
a.Equal(c.Proxy.BootstrapServers[0].AdvertisedAddress, "0.0.0.0:32404")
61+
62+
a.Equal(c.Proxy.BootstrapServers[1].BrokerAddress, "kafka-5.example.com:9092")
63+
a.Equal(c.Proxy.BootstrapServers[1].ListenerAddress, "0.0.0.0:32405")
64+
a.Equal(c.Proxy.BootstrapServers[1].AdvertisedAddress, "kafka-5.grepplabs.com:9092")
65+
66+
}
67+
68+
func TestEmptyBootstrapServersMapping(t *testing.T) {
69+
setupBootstrapServersMappingTest()
70+
71+
var args []string
72+
Server.ParseFlags(args)
73+
err := Server.PreRunE(nil, args)
74+
a := assert.New(t)
75+
a.Error(err, "list of bootstrap-server-mapping must not be empty")
76+
}

vendor/github.com/hashicorp/hcl/.gitignore

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/hashicorp/hcl/.travis.yml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)