はじめに
ansibleやserverspecを学習するにあたり、仮想マシン環境が欲しいと思いました。
vagrantのプロバイダはVirtualBoxが主流ですが
元からVMwareFusionがMACに入ってたので、VMware FusionをvagrantのProviderとしました。
環境
環境
Mac OS:10.15.4
vagrant version:2.2.9
vmware fusion pro: 11.5
vagrant環境の作成
vagrantのインストール
vagrant自体とプラグインをインストールします。
-
vagrant-hosts
はbox同士で名前解決させるプラグイン -
vagrant-vmware-desktop
はproviderにvmwareを使えるようにするプラグイン
% brew cask install vagrant
% vagrant plugin install vagrant-hosts
% vagrant plugin install vagrant-vmware-desktop
ライセンスの購入
以下公式サイトからライセンスを購入します。2020年6月現在79ドルです。
購入時に登録したメールアドレス宛に、ライセンスダウンロードリンクがきます。
ライセンスの適用
ライセンスファイルをダウンロードしたら適用させます。
% vagrant plugin license vagrant-vmware-desktop ~/Downloads/license.lic
VMwareユーティリティのインストール
以下リンクのVMwareユーティリティをインストールします。
これでVMware Fusionをproviderにする準備が出来ました!
Vagrantfileの作成
適当なディレクトリを作成し、Vagrantfileを作成します。
- ほとんど同じ構成で作りたかったので、
each do
で処理をまとめました - ホストOS(MAC)で作成したSSH公開鍵を貼り付けてキー認証出来るようにしています。
-
:hosts, :sync_hosts => true
によってbox同士が名前解決出来ます。
Vagrantfile
Vagrant.configure("2") do |config|
# boxを3台分作成
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.box = "centos/7"
node.vm.hostname = "node-#{i}"
node.vm.network "private_network", ip: "192.168.33.1#{i}"
node.vm.provision :hosts, :sync_hosts => true
node.vm.provision "shell", inline: <<-SHELL
echo "- Copy Public Key"
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCrh2TAqqNE+BrMttioX3dWwxP9WdUktZmMsVRro1XI/f2u4KTJFQOo6tXB/Zq27LQ7bNn/sWLfXDib40oh3qCDs4UdWovlpg8xFQYZzD4BHYQIPjF0FaBVhLDSmrBBgvMMjgIZbRo8/iZgix/Ea05Yx1X05K528rcfDWk1HrkE043eBTaxELunVlcGIVWYtUoUKeT6N1YJSymSY7vzUZOw7Mj3q2z96cs2RNcwLoagquaKma1Px4srQ60RKO5VyvXhhnrpqmT3mE4fibDLFIAuqezfimMYZlTZFFI/Xwe9q0HrTf15TZAlmOAiIqFIBbVWBZMfnlT3GkI/sRPMAT9QePMA5FnKJ6s1Rrol0S+d/she/01xiZLf84Na0q4R8F2xdGtHbVEJFbO4zAGJ0DHn9RYEghY9NIdN62NiUZnwj7nNbcl0wMrOz4VVMPaPtQB+uPe0VsDffeaPjbz4OmxzOzNIzrJGJ7jLdOlKIskA5EfAwS20b3Htp+BFWWurK38= myname@mymac.local" >> /home/vagrant/.ssh/authorized_keys
SHELL
node.vm.provider :vmware_desktop do |v|
v.gui = false
v.memory = "1024"
v.cpus = "1"
end
end
end
end
Vagrantfileを作成したら、そのディレクトリにいる状態でvagrant up
します。
% vagrant up
% vagrant status
Current machine states:
node-1 running (vmware_desktop)
node-2 running (vmware_desktop)
node-3 running (vmware_desktop)
boxが起動したら、秘密鍵を使って各boxにSSHが出来ます。
% ssh -i ~/.ssh/testkey vagrant@192.168.33.11
[vagrant@node-1 ~]$
boxから他のboxに名前でpingが出来ました。
/etc/hosts
に普通に書かれていました。
[vagrant@node-1 ~]$ ping node-3
PING node-3 (192.168.33.13) 56(84) bytes of data.
64 bytes from node-3 (192.168.33.13): icmp_seq=1 ttl=64 time=0.956 ms
64 bytes from node-3 (192.168.33.13): icmp_seq=2 ttl=64 time=0.740 ms