Vagrantで複数ゲストOSを立ててみる

やりたいこと

Vagrantで複数ゲストOSを作って更にPostgreSQLをインストールしたい。

VagrantのVersion

以下の通りです。

➜  ~ vagrant -v
Vagrant 2.2.0

Vagrantfileを作ってみる

以下のようにしました。
ポイントは以下です。

  • config.vm.defineのところを作成するゲストOS分定義します
    • 今回は3つのゲストOSを定義し、それぞれdb1, db2, db3と割りふっています
  • 今回はCentOS7なので、config.vm.box = "centos/7"で共通的に定義します
  • sshで繋ぐことを考慮して、ゲストOSごとにIPアドレスを分けます
  • ゲストOS作成後のスクリプトとして、以下2つを定義し、xxx.vm.provisionで読みこませます
    • yumのアップデートを行う$yum_script
    • PostgreSQLのインストール、初期セットアップを行う$postgresql_script
# -*- mode: ruby -*-
# vi: set ft=ruby :

$yum_script = <<EOF
yum update -y
EOF

$postgresql_script = <<EOF
yum -y localinstall https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
yum -y install postgresql10-server
/usr/pgsql-10/bin/postgres --version
/usr/pgsql-10/bin/postgresql-10-setup initdb
EOF

Vagrant.configure("2") do |config|

  config.vm.box = "centos/7"

  config.vm.define :db1 do |db1|
    db1.vm.network "private_network", ip: "192.168.33.10"
    db1.vm.provision "shell", inline: $yum_script
    db1.vm.provision "shell", inline: $postgresql_script    
  end
  config.vm.define :db2 do |db2|
    db2.vm.network "private_network", ip: "192.168.33.11"
    db2.vm.provision "shell", inline: $yum_script
    db2.vm.provision "shell", inline: $postgresql_script
  end
  config.vm.define :db3 do |db3|
    db3.vm.network "private_network", ip: "192.168.33.12"
    db3.vm.provision "shell", inline: $yum_script
    db3.vm.provision "shell", inline: $postgresql_script
  end
end

vagrant up

うまく出来ました。yumアップデート、postgresqlインストールも出来ていい感じです。
あとはスクリプトをもうちょっと整理したりすると良さそう。
ここまでくるとChefとかAnsible使ったほうがいいのではないかなと思うけれども。