読者です 読者をやめる 読者になる 読者になる

はやさがたりない。

へっぽこぷろぐらまのメモログ

vagrantで複数仮想マシンの実行

Vagrantfileに追記
こうすることでweb,dbそれぞれの仮想マシンが実行される
config.vm.boxに記述したOSをインポートしてくれて
webサーバ用のプロビジョニング、dbサーバ用のプロビジョニング我実行される

  config.vm.define "web" do |web|
    web.vm.provision "shell" , inline: "hostname"
    web.vm.provision "shell" , inline: "echo web"
  end

  config.vm.define "db" do |db|
    db.vm.provision "shell" , inline: "hostname"
    db.vm.provision "shell" , inline: "echo db"
  end

実行するとこんな感じ。

$ vagrant up
Bringing machine 'web' up with 'virtualbox' provider...
Bringing machine 'db' up with 'virtualbox' provider...
==> web: Importing base box 'centos6.5'...
==> web: Matching MAC address for NAT networking...
==> web: Setting the name of the VM: ansible_web_1402146864324_22420
==> web: Fixed port collision for 22 => 2222. Now on port 2200.
==> web: Clearing any previously set network interfaces...
==> web: Preparing network interfaces based on configuration...
    web: Adapter 1: nat
==> web: Forwarding ports...
    web: 22 => 2200 (adapter 1)
==> web: Booting VM...
==> web: Waiting for machine to boot. This may take a few minutes...
    web: SSH address: 127.0.0.1:2200
    web: SSH username: vagrant
    web: SSH auth method: private key
    web: Warning: Remote connection disconnect. Retrying...
    web: Warning: Remote connection disconnect. Retrying...
    web: Warning: Remote connection disconnect. Retrying...
==> web: Machine booted and ready!
==> web: Checking for guest additions in VM...
==> web: Mounting shared folders...
    web: /vagrant => /Users/akira/vagrant/ansible
==> web: Running provisioner: shell...
    web: Running: inline script
==> web: vagrant-centos65.vagrantup.com
==> web: Running provisioner: shell...
    web: Running: inline script
==> web: web
==> db: Importing base box 'centos6.5'...
==> db: Matching MAC address for NAT networking...
==> db: Setting the name of the VM: ansible_db_1402146904643_94627
==> db: Fixed port collision for 22 => 2222. Now on port 2201.
==> db: Clearing any previously set network interfaces...
==> db: Preparing network interfaces based on configuration...
    db: Adapter 1: nat
==> db: Forwarding ports...
    db: 22 => 2201 (adapter 1)
==> db: Booting VM...
==> db: Waiting for machine to boot. This may take a few minutes...
    db: SSH address: 127.0.0.1:2201
    db: SSH username: vagrant
    db: SSH auth method: private key
    db: Warning: Remote connection disconnect. Retrying...
    db: Warning: Remote connection disconnect. Retrying...
==> db: Machine booted and ready!
==> db: Checking for guest additions in VM...
==> db: Mounting shared folders...
    db: /vagrant => /Users/akira/vagrant/ansible
==> db: Running provisioner: shell...
    db: Running: inline script
==> db: vagrant-centos65.vagrantup.com
==> db: Running provisioner: shell...
    db: Running: inline script
==> db: db

ステータスを見てみよう。
ばっちり2台起動していることがわかる。

$ vagrant status
Current machine states:

web                       running (virtualbox)
db                        running (virtualbox)

個々の仮想マシンに対してコマンド実行するときは後ろに名前を指定する
複数指定することも可能っぽい。

$ vagrant status web
Current machine states:

web                       running (virtualbox)
$ vagrant status db
Current machine states:

db                        running (virtualbox)
$ vagrant status web db
Current machine states:

web                       running (virtualbox)
db                        running (virtualbox)

おまけ

Vagrantfileで構築できるとはいえいろんな人に渡したときに毎回プロビジョニングさせてたら もったいないなーとおもったらやっぱりBoxを自作できるのか。
ちな、未確認

vagrant package
vagrant package --base my_new_box
vagrant package --base my_new_box --vagrantfile=Vagrantfile