概要
vagrant仮想マシンを複数同時に起動するとき、
Vagrantfileの格納フォルダ名をVagrantfileの設定に使うことで、
仮想マシンごとにVagrantfileを編集しなくていいようにした
解決したかった問題点
プライベートネットワーク内でVagrant仮想マシンを複数同時に起動するときは、
各マシンごとの設定で、
例:
config.vm.network "private_network", ip: "192.168.33.15"
config.vm.network "forwarded_port", guest: 22, host: 2015
この2つはマシンごとに異なる値としなければいけない。
面倒なので設定しないでいいようにしたい。
解決方法
フォルダ名から情報を取得するようにした。
(注釈:仮想マシンを複数扱う場合、Vagrantfileは個別のフォルダに置くはずという前提です。)
Vagrantfile
# フォルダ名の中で最初に出てくる数字を、IPアドレス第4オクテットとして用いる
# フォルダ名の中で最初のアンダースコアまでを、ホスト名として用いる
# IPアドレス第4オクテット+2000をポート番号とする
dirname = File.basename(Dir.pwd)
confOctet4 = dirname.gsub(/^[^1-9]*([1-9][0-9]*).+$/, '\1')
confHostName = 'vm' + dirname.gsub(/^([^_]+).+$/, '\1')
confPort = 2000 + confOctet4.to_i
puts 'folder: ' + dirname
puts 'octet4: ' + confOctet4
puts 'hostName: ' + confHostName
puts 'port: ' + confPort.to_s
# ゲストOSにはプライベートネットワーク接続とする
config.vm.hostname = confHostName
config.vm.network "private_network", ip: "192.168.33." + confOctet4
config.vm.network "forwarded_port", guest: 22, host: confPort
必須ではないがホスト名を識別できた方が便利なので、ホスト名も指定した。
結果
vagrant up したとき、putsの結果が出力されるので、これで設定値を確認できる。
例:フォルダ名が012_testのときの出力
folder: 012_test
octet4: 12
hostName: vm012
port: 2012
構築もうまくいった。
puts は実は邪魔かも
putsは結果確認目的で記述したが、
vagrant ssh するたびにputs結果が出力されるので、
安定稼働に入ったら消していいかも。