Vagrantは
VrituaBoxの仮想環境を作ったり、壊したりし放題な便利なツール…。だけではありません!
この手のツールでは当たり前の話ではありますが、プラグインで機能を拡張できます。
managed-serversというプラグインをインストールすると、外部のサーバをVagrant配下に置けるようになります。
何が嬉しいの?
- 他のVagrant配下にある仮想マシンと同じコマンドでマシンを操作できる。
- Vagrantの仮想マシンの連携機能が使える。
- 特にプロビジョニングツール(Ansibleなど)との連携機能が使えるのが便利。
ということでやってみましょう。
インストール方法
プラグインをインストールするだけです。コマンド1発でOK。
$ vagrant plugin install vagrant-managed-servers
設定方法
Vagrant.configure("2") do |config|
config.vm.box = "tknerr/managed-server-dummy"
config.vm.provider :managed do |managed, override|
managed.server = "<server name or IP address>"
override.ssh.username = "vagrant"
override.ssh.private_key_path="./path/to/id_rsa"
end
config.vm.provision "shell", inline: <<-SHELL
if [ ! -f /usr/bin/python ]; then
apt-get update
apt-get install -y --no-install-recommends python
fi
SHELL
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.extra_vars = {
ansible_python_interpreter: '/usr/bin/python2'
}
end
end
通常と違うのは以下の点です。
- boxにはダミーで用意されている
tknerr/managed-server-dummyを指定すること。 - providorセクションに
managedを指定して、managed.serverに接続先サーバ名を指定すること。 -
override.ssh.username,override.ssh.private_key_pathで接続先sshユーザ名と秘密鍵を上書き指定すること。
コマンド
リンクの確立
まずは最初に通常のVagrantと同様に
$ vagrant up
を実行します。
サーバが外部にあるわけですから、実際に電源が入るわけではありません。sshの接続テストが行われて成功すれば管理情報が作成されます。
Bringing machine 'default' up with 'managed' provider...
==> default: Linking with managed server <server name>
==> default: -- Server: <server name>
この状態でstatusを確認してみましょう。
$ vagrant status
Current machine states:
default running (managed)
The managed server is running. To ssh into this machine, you can run
`vagrant ssh`. To provision the machine, you can run `vagrant provision`.
うん。当然ですね。
ssh接続
当たり前のようにsshコマンドが使えます。
$ vagrant ssh
プロビジョニング
upコマンド時にはプロビジョニングは行われません。
provisionコマンドで明示的に実行することが必要です。
$ vagrant provision
マシンの再起動
reloadコマンドが使えます。
$ vagrant reload
なぜかhaltコマンドには対応していません。
間違ってリモートで電源を落としてしまうと再起動できなくなってしまいますので、その事故防止のためあえて未実装にしてるのかもしれません。
(sshで中に入って、haltコマンド実行すれば良いだけですし…。)
Vagrantの管理下から外す
destroyコマンドを実行します。
$ vagrant destroy
==> default: Unlinking from managed server <server name>
==> default: -- Server: <server name>
$ vagrant status
Current machine states:
default not linked (managed)
The managed server is not linked.
当然ですが、管理情報が消えるだけでリモートのマシンが削除されるわけではありません。
upコマンドでまたリンクを確立することが出来ます。