diff --git a/libkv/libkv.go b/libkv/libkv.go index 006f0d5b1..5678758d8 100644 --- a/libkv/libkv.go +++ b/libkv/libkv.go @@ -10,12 +10,13 @@ import ( "strconv" "time" + yaml "gopkg.in/yaml.v2" + "github.com/blang/vfs" "github.com/docker/libkv" "github.com/docker/libkv/store" "github.com/docker/libkv/store/boltdb" "github.com/docker/libkv/store/consul" - "github.com/hairyhenderson/gomplate" "github.com/hairyhenderson/gomplate/env" "github.com/hairyhenderson/gomplate/vault" consulapi "github.com/hashicorp/consul/api" @@ -116,9 +117,13 @@ func setupConsul(url *url.URL, enableTLS bool) (*SetupDetails, error) { return nil, err } - decoded := &gomplate.TypeConv{}.JSON(string(data)) + decoded := make(map[string]interface{}) + err = yaml.Unmarshal(data, &decoded) + if err != nil { + return nil, err + } - var token = decoded.token + var token = decoded["token"].(string) client.Logout() diff --git a/test/integration/datasources_consul.bats b/test/integration/datasources_consul.bats index 383bed9a4..222075dcd 100644 --- a/test/integration/datasources_consul.bats +++ b/test/integration/datasources_consul.bats @@ -9,6 +9,7 @@ function setup () { function teardown () { rm -rf $tmpdir consul kv delete foo + vault unmount consul } @test "Testing consul" { @@ -33,3 +34,15 @@ function teardown () { [ "$status" -eq 0 ] [[ "${output}" == "$BATS_TEST_DESCRIPTION" ]] } + +@test "Consul datasource works with hostname in URL" { + vault mount consul + vault write consul/config/access address=127.0.0.1:8500 token=${CONSUL_ROOT_TOKEN} + POLICY='key "" { policy = "read" }' + echo $POLICY | base64 | vault write consul/roles/readonly policy=- + consul kv put foo "$BATS_TEST_DESCRIPTION" + unset CONSUL_HTTP_ADDR + CONSUL_VAULT_ROLE=readonly gomplate -d consul=consul:// -i '{{(datasource "consul" "foo")}}' + [ "$status" -eq 0 ] + [[ "${output}" == "$BATS_TEST_DESCRIPTION" ]] +} diff --git a/test/integration/test.sh b/test/integration/test.sh index 298d1a35f..bd55f3b0d 100755 --- a/test/integration/test.sh +++ b/test/integration/test.sh @@ -14,7 +14,12 @@ export VAULT_ROOT_TOKEN=00000000-1111-2222-3333-444455556666 vault server -dev -dev-root-token-id=${VAULT_ROOT_TOKEN} -log-level=err >&/dev/null & export CONSUL_HTTP_ADDR=http://127.0.0.1:8500 +export CONSUL_ROOT_TOKEN=00000000-1111-2222-3333-444455556666 -consul agent -dev -log-level=err >&/dev/null & +tmpdir=$(mktemp -d) +echo "{\"acl_datacenter\": \"dc1\", \"acl_master_token\": \"${CONSUL_ROOT_TOKEN}\"}" >> $tmpdir/config.json +consul agent -dev -config-file=$tmpdir/config.json -log-level=err >&/dev/null & +sleep 2 +rm -rf $tmpdir bats $(dirname $0)