From bcbd0fec0f046acfcf85249f21c7e790d2f60d1c Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 16 Jan 2015 01:29:44 +0000 Subject: [PATCH] allow hostnames in join Signed-off-by: Victor Vieux --- join.go | 10 ++++++++-- join_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 join_test.go diff --git a/join.go b/join.go index 1f511bf81b..0a20ff3382 100644 --- a/join.go +++ b/join.go @@ -9,6 +9,11 @@ import ( "github.com/docker/swarm/discovery" ) +func checkAddrFormat(addr string) bool { + m, _ := regexp.MatchString("^[0-9a-zA-Z._-]+:[0-9]{1,5}$", addr) + return m +} + func join(c *cli.Context) { if c.String("discovery") == "" { @@ -21,8 +26,9 @@ func join(c *cli.Context) { } addr := c.String("addr") - if m, _ := regexp.MatchString("^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}:[0-9]{1,5}$", addr); !m { - log.Fatal("--addr should be of the form ip:port") + + if !checkAddrFormat(addr) { + log.Fatal("--addr should be of the form ip:port or hostname:port") } if err := d.Register(addr); err != nil { diff --git a/join_test.go b/join_test.go new file mode 100644 index 0000000000..8ee9af1e7a --- /dev/null +++ b/join_test.go @@ -0,0 +1,27 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestCheckAddrFormat(t *testing.T) { + assert.False(t, checkAddrFormat("1.1.1.1")) + assert.False(t, checkAddrFormat("hostname")) + assert.False(t, checkAddrFormat("1.1.1.1:")) + assert.False(t, checkAddrFormat("hostname:")) + assert.False(t, checkAddrFormat("1.1.1.1:111111")) + assert.False(t, checkAddrFormat("hostname:111111")) + assert.False(t, checkAddrFormat("http://1.1.1.1")) + assert.False(t, checkAddrFormat("http://hostname")) + assert.False(t, checkAddrFormat("http://1.1.1.1:1")) + assert.False(t, checkAddrFormat("http://hostname:1")) + assert.False(t, checkAddrFormat(":1.1.1.1")) + assert.False(t, checkAddrFormat(":hostname")) + assert.False(t, checkAddrFormat(":1.1.1.1:1")) + assert.False(t, checkAddrFormat(":hostname:1")) + assert.True(t, checkAddrFormat("1.1.1.1:1111")) + assert.True(t, checkAddrFormat("hostname:1111")) + assert.True(t, checkAddrFormat("host-name_42:1111")) +}