はじめに
クラウド基盤チームの常田です。
SoftLayerはSSL-VPNが標準で使えるなど開発環境としての魅力もあるサービスです。
今回は、皆さんの大好きなVagrantからSoftLayerを使ってみたいと思います。いつの間にかSoftLayerを操作するためのVagrantのプラグインが用意されていました。
Install手順
SoftLayerのプラグインは標準レポジトリに登録されているのでそのまま vagrant 経由でInstall可能です。
$ vagrant plugin install vagrant-softlayer
Installing the 'vagrant-softlayer' plugin. This can take a few minutes...
Installed the plugin 'vagrant-softlayer (0.3.1)'!
Vagrantfileの書き方
READMEには完全なVagrantfileが載っていませんでしたのでサンプルを載せておきたいと思います。
- SSHキーは登録名を指定しますので事前にポータル画面またはコマンドラインから登録が必要です。
 - ダミーのBoxが必要なので box_urlの指定のようにしておきます。
 - 指定したSSHキーを 
ssh_private_key_pathで指定します。 - Syncdフォルたが rsync 経由で使えるのは便利です。
 
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
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"
    config.ssh.private_key_path = "/Users/tokida/.ssh/sl_rsa"
    config.ssh.username = "root"
    config.vm.provider :softlayer do | sl, override |
            sl.api_key = "*****"
            sl.username = "SL****"
            sl.datacenter   = "ams01"
            sl.dedicated    = false
            sl.domain       = "niandc.co.jp"
            sl.disk_capacity = { 0 => 25 }
            sl.hostname     = "vagrant01"
            sl.hourly_billing = true
            sl.image_guid   = nil
            sl.local_disk   = true
            sl.max_memory   = 1024
            sl.network_speed = 10
            sl.operating_system = "UBUNTU_LATEST"
            sl.ssh_key = ["tokida"]
            sl.start_cpus   = 1
            override.ssh.username = "root"
    end
end
ここでは上記の記載にとどまっていますが更にオプションを選択することも可能です。
| パラメータ | 説明 | ディフォルト | 必須 | 
|---|---|---|---|
datacenter | 
DC指定 | First available | no | 
dedicated | 
CCI専有 (non-shared host) | false | no | 
disk_capacity | 
ディスク容量 | no | |
domain | 
ドメイン名 | yes | |
hostname | 
ホスト名 | yes | |
hourly_billing | 
時間単価 (falseは月単価) | true | no | 
image_guid | 
Flexイメージの指定 | no | |
local_disk | 
ディスクタイプ(falseはSAN) | true | no | 
max_memory | 
メモリ容量 (Mb) | 1024 | no | 
network_speed | 
ネットワーク速度(Mbps) / 10,100,1000 | 10 | no | 
operating_system | 
導入OSの指定 | UBUNTU_LATEST | no | 
post_install | 
起動スクリプトの指定 | no | |
private_only | 
プライベートネットワークのみ | false | no | 
ssh_key | 
SSHキー名 | yes | |
start_cpus | 
CPU-Core数 / 1,2,4,8,12,16 | 1 | no | 
user_data | 
metadataの設定 | no | |
vlan_private | 
Private VLAN番号 | 自動 | no | 
vlan_public | 
Public VLAN番号 | 自動 | no | 
- READMEより転記
 
これらのオプションで指定できる項目は sl vs create-optionsコマンドで確認することが出来ます。
起動方法
Providerに softlayerを指定して起動します。正しく指定ができれば起動してきます。
通常Vagrantではユーザ「vagrant」で接続をしますが、override.ssh.usernameを指定することによりユーザ「root」で接続する事ができますので普段のSoftLayer同様の操作が可能になります。
$ vagrant up --provider=softlayer
Bringing machine 'default' up with 'softlayer' provider...
==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead.
==> default: This is a bug with the provider. Please contact the creator
==> default: of the provider you use to fix this.
==> default: Creating a new SoftLayer instance...
==> default: Waiting for instance provisioning. This may take a few minutes...
==> default: SoftLayer instance successfully provisioned!
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 5.153.2.111:22
    default: SSH username: root
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Rsyncing folder: /Users/tokida/repos/softlayer/ => /vagrant
5分程度待つと上記のメッセージが出力されPortal側でCCIが起動できていることを確認できます。
使ってみる
$ vagrant ssh
パブリック側のネットワークからsshをしてログインが出来きます。
$ vagrant reload
Reloadではインスタンスが再起動されます。こちらも問題なく動作しているようです。
$ vagrant rebuild
SoftLayerでは、インスタンスを破棄することなくOSを初期化することが出来る OS Relaodという機能がありますがRebuildを指定するとこの機能が利用できるようです。
$ vagrant halt
停止されている事を確認できます。
もっともSoftLayerは停止しても費用には関係がないため、haltコマンドを実行するシチュエーションは無いかもしれません。
$vagrant destroy 
で環境が削除(破棄)されます。
まとめ
VagrantからSoftLayerが操作できると言うことは、プロビジョニング時にChefやAnsibleと組み合わせやすくなるため簡単にそして柔軟にサーバの構築が出来そうです。
また Sync_folder も動作しているため /vagrant で確認することが出来るのは開発環境として便利かと思います。



