capistranoで今タスクを実行中のホスト名を取得する

問題

$ cap hoge ROLES=app HOSTS=app-01,app-02,app-03

としたときに、各ホストに、ホスト名をファイル名にしたファイルをtouchするようなタスク hoge を記述せよ。

ただし、/etc/hostnameを参照してはならない。

こたえ

task :hoge do
  run "touch $CAPISTRANO:HOST$"
end

$CAPISTRANO:HOST$ はcapistranoが内部的に使ってるプレースホルダなので、ドキュメントにも無いし、今後サポートされるかは不明。

結論

可能なら/etc/hostnameを配布しましょう
とはいいつつもクラウドだとホスト名けっこう困るよね

参考

Getting the currently running host name in Capistrano | Code for Concinnity
@bongole さん情報ありがとうございます!