0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vagrant複数起動時、Vagrantfileを共通化させる(副題:フォルダ名を参照してVagrantfileの設定に使う)

Posted at

概要

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結果が出力されるので、
安定稼働に入ったら消していいかも。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?