16
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vagrantで外部のサーバを管理する

16
Last updated at Posted at 2016-10-26

Vagrantは

VrituaBoxの仮想環境を作ったり、壊したりし放題な便利なツール…。だけではありません!

この手のツールでは当たり前の話ではありますが、プラグインで機能を拡張できます。
managed-serversというプラグインをインストールすると、外部のサーバをVagrant配下に置けるようになります。

何が嬉しいの?

  • 他のVagrant配下にある仮想マシンと同じコマンドでマシンを操作できる。
  • Vagrantの仮想マシンの連携機能が使える。
    • 特にプロビジョニングツール(Ansibleなど)との連携機能が使えるのが便利。

ということでやってみましょう。

インストール方法

プラグインをインストールするだけです。コマンド1発でOK。

$ vagrant plugin install vagrant-managed-servers

設定方法

Vagrantfile
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コマンドでまたリンクを確立することが出来ます。

参考

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?