##概要
Vagrantfile 1ファイル で SoftLayer の仮想サーバを 1度に複数サーバ Provisioning する方法を検証します。
##前提
下記を参考に、Vagrant - SoftLayer 環境を整備しておいてください。
Qiita:Vagrant から SoftLayer の仮想サーバを Provisioning する
##Vagrantfile 準備
今回は2つの仮想サーバを1度にProvisioningしてみます。
準備として、Vagrantfile を下記内容に置き換えてください。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "dummy"
config.vm.box_url = "https://github.com/audiolize/vagrant-softlayer/raw/master/dummy.box"
config.vm.synced_folder ".", "/vagrant", type: "rsync", disabled: true
config.ssh.private_key_path = "/root/.ssh/id_rsa"
config.ssh.username = "root"
config.vm.define :vagrant01 do |vagrant01|
vagrant01.vm.provider :softlayer do | sl, override |
sl.api_key = ENV['SL_API_KEY']
sl.username = ENV['SL_USERNAME']
sl.datacenter = "hkg02"
sl.dedicated = false
sl.hourly_billing = true
sl.hostname = "vagrant01"
sl.domain = "domain.jp"
sl.start_cpus = 1
sl.max_memory = 1024
sl.local_disk = true
sl.disk_capacity = { 0 => 25 }
sl.network_speed = 10
sl.operating_system = "CENTOS_6_64"
sl.ssh_key = [ "APIKEY" ]
override.ssh.username = "root"
end
end
config.vm.define :vagrant02 do |vagrant02|
vagrant02.vm.provider :softlayer do | sl, override |
sl.api_key = ENV['SL_API_KEY']
sl.username = ENV['SL_USERNAME']
sl.datacenter = "hkg02"
sl.dedicated = false
sl.hourly_billing = true
sl.hostname = "vagrant02"
sl.domain = "domain.jp"
sl.start_cpus = 1
sl.max_memory = 1024
sl.local_disk = true
sl.disk_capacity = { 0 => 25 }
sl.network_speed = 10
sl.operating_system = "CENTOS_6_64"
sl.ssh_key = [ "APIKEY" ]
override.ssh.username = "root"
end
end
end
##Provisioning
では実際に、1度に複数Provisioningします。
標準出力みてると普通に順番に起動しているだけに見えます。
vagrant up
# vagrant up
Bringing machine 'vagrant01' up with 'softlayer' provider...
Bringing machine 'vagrant02' up with 'softlayer' provider...
==> vagrant01: Creating a new SoftLayer instance...
==> vagrant01: Waiting for instance provisioning. This may take a few minutes...
==> vagrant01: SoftLayer instance successfully provisioned!
==> vagrant01: Waiting for machine to boot. This may take a few minutes...
vagrant01: SSH address: 119.81.167.162:22
vagrant01: SSH username: root
vagrant01: SSH auth method: private key
==> vagrant01: Machine booted and ready!
==> vagrant02: Creating a new SoftLayer instance...
==> vagrant02: Waiting for instance provisioning. This may take a few minutes...
==> vagrant02: SoftLayer instance successfully provisioned!
==> vagrant02: Waiting for machine to boot. This may take a few minutes...
vagrant02: SSH address: 119.81.167.163:22
vagrant02: SSH username: root
vagrant02: SSH auth method: private key
==> vagrant02: Machine booted and ready!
確認
# vagrant status
Current machine states:
vagrant01 running (softlayer)
vagrant02 running (softlayer)
####Customer Portal での確認
####仮想サーバに ssh してみる
名前で vagrant ssh
することができます。
# vagrant ssh vagrant01
[root@vagrant01 ~]# uname -a
Linux vagrant01.domain.jp 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@vagrant01 ~]# exit
logout
# vagrant ssh vagrant02
[root@vagrant02 ~]# uname -a
Linux vagrant02.domain.jp 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@vagrant02 ~]# exit
logout
#
####仮想サーバの廃棄
名前を並べることで1度に vagrant destroy
することも可能です。
# vagrant destroy -f vagrant01 vagrant02
==> vagrant02: Destroying the SoftLayer instance...
==> vagrant01: Destroying the SoftLayer instance...
# vagrant status
Current machine states:
vagrant01 not created (softlayer)
vagrant02 not created (softlayer)
もちろん、Customer Portal でも確認できます。
##結果
- Vagrant から SoftLayer の仮想サーバを1度に複数 Provisioning できた
- destroy もできた。
Customer Portal から GUI で 1台1台注文してもいいのですが、大量の台数を注文する場合、結構な時間がかかってしまいます。それが Vagrantfile を準備する手間が必要とはいえ、1コマンドで済むメリットは大きいように思います。どんなサーバを発注するのか、発注したのか、という証跡を Vagrantfile という形で保管しておけるのも魅力ですね。
##課題
- Vagrantfile の中の繰り返し部分をベタ書きしているのがダサい。もう少し綺麗にまとめたい。
##参考
下記サイトを参考にさせて頂きました。ありがとうございました。