func tomlToJson(data []byte) ([]byte, error) {
tree, err := toml.LoadBytes(data)
if err != nil {
return []byte{}, err
}
json, err := json.Marshal(tree.ToMap())
if err != nil {
return []byte{}, err
}
return json, nil
}
ほぼgithub.com/pelletier/go-toml
とencoding/json
の間で値を受け渡しているだけ
go-tomlのToMapメソッドでmapをそのまま出力できるので便利
depで採用されてるけど、これまでイマイチメリットが分からんかった
ドキュメントをバインドせずにそのまま扱うには便利
$ cat foo.toml | toml2json | jq . # jqで整形して出力
$ tunneler -c forwarding.toml
あとは起動しっぱなしになる
例えば、以下のような多段プロキシを貼りたい場合
localhost => bastion (192.168.100.1)
+=> app-server (192.168.100.2)
+=> db server (192.168.101.10) port 5432
[bastion-dev]
host = "192.168.100.1"
port = "22"
user = "bastion-user"
cert_path = "/Users/minori.tokuda/.ssh/bastion-dev.pem"
# 続く
[bastion-dev.cascades.app-server]
host = "192.168.100.2"
port = "22"
user = "appuser"
cert_path = "/Users/minori.tokuda/.ssh/bastion-dev.pem"
# 続く
[bastion-dev.cascades.app-server.tunnels.postgres]
local_port = "15432"
remote_host = "192.168.101.10"
remote_port = "5432"
{
"bastion-dev": {
"host":"192.168.100.1",
"port":"22",
"user":"bastion-user",
"cert_path":"/Users/minori.tokuda/.ssh/bastion-dev.pem",
"cascades": {
"app-server": {
"host":"192.168.100.2",
"port":"22",
"user":"appuser",
"cert_path":"/Users/minori.tokuda/.ssh/bastion-dev.pem",
"tunnels": {
"postgres": {
"local_port":"15432",
"remote_host":"192.168.101.10",
"remote_port":"5432"
}
}
}
}
}
※ 設定ファイルフォーマットはTOMLのみです