くりにっき

フルスタックキュアエンジニアです

【今月のgem】itamae-plugin-recipe-consulを作った

Consul をインストールするためのitamaeプラグインを作りました

github.com

モチベーション

consul自体はgolang製なのでバイナリポン置きでインストールできるのですが、consulのagentをinit.dやsystemdでデーモン化する必要があったのでitamaeプラグインにしました。

OSのバージョンを見てよしなにinit.dスクリプトやsystemdユニットファイルを設置します。CentOS 6, CentOS 7, Debian 8辺りでCIしてます。

consul watchをserviceで起動するレシピも作ったのですが、stretcher辺りと密結合してるので含めていません。(社内レシピには含めてる)

使い方

レシピの中で下記のように書けばOK

include_recipe "consul"

プラグイン内でモジュール化してるので下記のように個別に include_recipe もできます

include_recipe "consul::setup"
include_recipe "consul::install"
include_recipe "consul::service"

node.ymlはこんな感じ

consul:
  # install consul version (required)
  version: "0.6.4"

  # download zip platform (default: "linux_amd64")
  platform: "linux_amd64"

  # path to downloaded zip file (default: "/usr/local/src")
  src_dir: "/usr/local/src"

  # path to consul executable file (default: "/usr/local/src")
  bin_dir: "/usr/local/bin"

  # consul agent -data-dir option (default: "/tmp/consul")
  data_dir: "/tmp/consul"

  # consul agent other options (default: none)
  options: "-server -bootstrap-expect 1"

  gomaxprocs: 2

メリット

serviceにしておくとitamaeやserverspecで

# consul.rb
service "consul" do
  action [:enable, :start]
end
# consul_spec.rb
describe service("consul") do
  it { should be_enabled }
  it { should be_running }
end

のように書けて便利

スペシャルサンクス

consulのinit.dスクリプトとsystemdユニットは下記を参考にさせてもらいました m( )m

qiita.com

追伸

gemをリリースした後で別の人が作った同名のgemを見つけたorz *1 https://github.com/toritori0318/itamae-plugin-recipe-consul

*1:rubygems.orgになければ誰も作ってないと思うじゃないですか。。。