2022年9月14日水曜日

Capistranoで動的にroleを設定する方法

Capistranoで動的にroleを設定する方法

概要

config/deploy/production.rb などにホストやロールの情報を記載します
インスタンスの情報が毎回変わる場合などは書き換えるのが面倒なのでどこかしらからホスト情報を取得して動的にロールを設定したくなります

今回はそのポイントを紹介します

環境

  • Ubuntu18.04
  • Ruby 3.1.2
  • capistrano 3.17.1

結論: role に動的に取得した配列を指定する

通常ロールは role メソッドを使って指定します
その際に Array で IP アドレスを複数していします
結論から言うとこの前段で何かしらの方法で取得した IP アドレスの情報を配列の変数にして設定すれば OK です

role :local_mac, %w{192.168.100.1}, my_property: :hello

require './lib/fetch.rb'

f = Fetch.new
targets = f.ip_addresses

role :local_mac, targets, my_property: :hello

fetch.rb は例です
この中で例えば外部サーバに問い合わせてホストの情報を取得したりファイルから読み込んでホストの情報を取得したりすれば OK です

タスク側で動的にホストを取得しないほうがいい

タスク内で対象のIPアドレス一覧を取得してそれらに対してループして exec することもできますがそれだと cap console などが使えないのであまりオススメしません

タスク側でも role メソッドをコールできるのでそうすることもできるのですが role は config/deploy 配下のファイルで実施したほうが良いです

0 件のコメント:

コメントを投稿