質問: 調べたんですが capistorano と連携する記事はでてきたけど単独で行う記事がでてきません itamae 自体に機能がないなら パラメーターで台数を与えたらその台数分ホスト名だけ連番にして レシピを適用するようなレシピをかきたいと思っています そこで itamae コマンドラインでパラメータを与える方法はないでしょうか ``` for i in 1..node[n_api_servers] execute 'bundle exec itamae ssh -h api#{i}.local roles/api/default.rb -y nodes/api.#{env}.yml' end ``` イメージではこういうレシピを書いて実行したいんですが ここに レシピ内で(たとえば node['host_name']) で取得できる値に api#{i} という連番ホスト名のパラメーターを渡したいです できそうなのに調べてもなかなか記事がでてこなくて... できないなら nodes/ の設定ファイルに host_name だけ変えたものを台数分かいて ``` for i in 1..node[n_api_servers] execute 'bundle exec itamae ssh -h api#{i}.local roles/api/default.rb -y nodes/api#{i}.#{env}.yml' end ``` という感じでよぶしかないでしょうか... あるいはもっといい複数台に同一レシピを適用する方法があれば教えていただけるとありがたいです 追記: kondate を試してみたのですが hosts.yml に台数分の設定を用意する必要がある気がします 十分な数の設定を用意しておけば実現はできそうですがきれいじゃないので 可変個数に対応した書き方はできないでしょうか hosts.yml に ``` api1: [api] api2: [api] : ``` のようにかくかわりに ssh/config みたいに ``` api*: [api] ``` のようなことができたりしないでしょうか
回答: ^ kondate という Gem があり、これは、 Ansible っぽく itamae を実行するためのツールです。 複数台のサーバーに、同じプロビジョニングを施したい場合、これは role の recipe を定義し、それに対して複数のホストを割り当てることで実現されると思っています。 複数台のホストを並列で実行するにあたっては、 README によると `bundle exec kondate itamae-role` が、今まさに質問者さんが欲しいと思っている機能であると思っています。 (追記をうけて) ^ 上記の、 host plugin を用いると、 host 名と role の紐付けのロジックを、自分で記述することができそうです。 自分でこの機能を使ったことはないので、うまくできるかわかりませんが、ドキュメントを読む限り、任意のホスト -> role の紐付けを定義できそうではあると思っています。