tl;dr

上記のような振りを頂戴したので、mruby 界に名を轟かす為にもうすぐ初老を迎えるという勢いでConsul HTTP API の mruby クライアントを作り始めた。

github.com

mgem-list への登録済み、尚、全てのエンドポイントはサポートしていない(引き続き追加していく予定)。

memo

サポートしている Endpoint

現時点では以下の Endpoint をサポート。

各種パラメータについても引き続き追加してくつもり。

example

localhost にてノード一台で構成されている Consul クラスタがある場合、以下のようなコードを用意する。

# HTTP API のエンドポイントを指定
config = {
  :host => "127.0.0.1",
  :port => "8500",
}

# Key / Value 用のインスタンスを作成
kv = Consul::Kv.new(config)
puts "put: #{kv.put("foo", "bar")['body']}"
puts "get: #{kv.get("foo")['body']}"
puts "delete: #{kv.del("foo")['body']}"

# Status 用のインスタンスを作成
status = Consul::Status.new(config)
puts "leader: #{status.leader['body']}"
puts "peers: #{status.peers['body']}"

# Health Check 用のインスタンスを作成
health = Consul::Health.new(config)
puts "node: #{health.node("localhost")['body']}"
puts "checks: #{health.checks("your_service")['body']}"
puts "service: #{health.service("your_service")['body']}"
puts "state: #{health.state("any")['body']}"

以下のように実行する。

$ bin/mruby example.rb

以下のように出力される。

put: true
get: [{"CreateIndex":523,"ModifyIndex":523,"LockIndex":0,"Key":"foo","Flags":0,"Value":"YmFy"}]
delete: true
leader: "10.0.2.xx:8300"
peers: ["10.0.2.xx:8300"]
node: [{"Node":"localhost","CheckID":"serfHealth","Name":"Serf Health Status","Status":"passing","Notes":"","Output":"Agent alive and reachable","ServiceID":"","ServiceName":""}]
checks: []
service: []
state: [{"Node":"localhost","CheckID":"serfHealth","Name":"Serf Health Status","Status":"passing","Notes":"","Output":"Agent alive and reachable","ServiceID":"","ServiceName":""}]

おわり

todo

  • サポートする Endpoint の追加
  • 各種 Endpoint のパラメータの追加
  • テスト(テスト用ダミーデータを用意する方法を調べる)

お礼

振りを下さった @matsumotory さん、@udzura さん、有難うございますm(__)m

元記事はこちら

初老が mruby 界に名を轟かす為に Consul HTTP API の mruby クライアントを作ってみる