vagrant
openstack
Conoha

VagrantからConoHaを使う

More than 1 year has passed since last update.

ConoHaは、おなじみOpenStackベースのクラウドです。APIも使えて、ほぼOpenStack互換です。VagrantにはOpenStackに対応したProviderがあるのですが、こちらのブログの通りそのままでは動きません。

OpenStackはあくまでコンポーネントの集まりで、組み合わせや設定などでだいぶ違うんですね・・・。

上記のProviderはRackSpace向けなのでそのままでは動きません。

というわけで、forkしてConoHa向けのProviderを作ってみました。


プラグインの機能


  • VPSの作成、起動、停止、破棄が行えます

  • ConoHaの各リージョンをサポートしています

  • VPS作成時にプランとインストールイメージを選択できます

  • SSHキーペアの自動作成、それを使ったSSH接続が行えます

  • コントロールパネルから登録済みのSSHキーペアを使うこともできます。

  • インストールイメージ一覧、VPSプランの一覧、ネットワーク、サブネットの一覧を取得するコマンドが用意されています

  • その他Vagrantの各コマンドが使用できます(provisionなど)


使い方

あらかじめVagrant1.2以降をインストールしておきます。


プラグインのインストール

$ vagrant plugin install vagrant-conoha

(2016/06/13) 最新版1.8.3ではインストールに失敗するようです。1.8.4で修正されるそうなので、それまでは一つ前のバージョン(1.8.1)を使って下さい https://github.com/hironobu-s/vagrant-conoha/issues/2


ConoHa APIアカウントの作成

ConoHaのAPIを使うため、APIユーザーの作成をします。これは以下のオフィシャルのドキュメントの[3]まで進めればOKです。

APIを使用するためのトークンを取得する

[4]でAPI接続するためのテナント情報などを確認します。これは次のステップで必要になります。


Vagrantfileの作成

以下の内容でVagrantfileを作成します。ConoHaのAPIに接続するための情報や、インスタンスのスペックとイメージ(UbuntuとかCentOSとか)などを設定します。

設定ファイルの各パラメータの解説はこちら

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = 'conoha'
config.ssh.username = 'root'
config.ssh.pty = true

config.vm.provider :conoha do |conoha|
conoha.openstack_auth_url = 'https://identity.tyo1.conoha.io/v2.0'

conoha.username = 'gncu*******'
conoha.password = '***********'
conoha.tenant_name = 'gnct*******'

conoha.flavor = 'g-1gb'
conoha.image = 'vmi-ubuntu-14.04-amd64'
conoha.region = "tyo1"
conoha.admin_pass = "AdminPass123*"
conoha.metadata = {
instance_name_tag: "vagrant_conoha"
}
conoha.security_groups = [
"default",
"gncs-ipv4-all",
"gncs-ipv6-all"
]
# conoha.keypair_name = "hironobu-key"

end
# config.ssh.private_key_path = "~/.ssh/id_rsa"
end


実行

早速vagrant upしましょう。providerにconohaを指定します。

# vagrant up --provider=conoha


Bringing machine 'default' up with 'conoha' provider...
==> default: Finding flavor for server...
==> default: Finding image for server...
==> default: Launching a server with the following settings...
==> default: -- Tenant : gnct*******
==> default: -- Name : default
==> default: -- Flavor : g-1gb
==> default: -- FlavorRef : 7eea7469-0d85-4f82-8050-6ae742394681
==> default: -- Image : vmi-ubuntu-14.04-amd64
==> default: -- ImageRef : 2b03327f-d453-4c7d-91c9-8b9924b6ea88
==> default: -- KeyPair : vagrant-generated-5i4746gl
==> default: Waiting for the server to be built...
==> default: Waiting for SSH to become available...
Connection to 133.130.***.*** closed.
==> default: The server is ready!
==> default: Rsyncing folder: /home/hiro/dev/work/vagrant/ => /vagrant

「The server is ready!」ということで準備OKです。ステータスを確認しましょう。

# vagrant status


Current machine states:

default active (conoha)

The server is up and running. Run `vagrant ssh` to access it.

「active」ですね。あとはsshやprovisionなど、Vagrantの機能を活用できます。

ためしにsshしてみましょう。

# vagrant ssh


Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-36-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Thu Aug 27 19:49:00 JST 2015

System load: 0.08 Processes: 96
Usage of /: 3.1% of 48.11GB Users logged in: 0
Memory usage: 6% IP address for eth0: 133.130.52.164
Swap usage: 0%

Graph this data and manage this system at:
https://landscape.canonical.com/

root@133-130-***-***:~#

いい感じです!

使い終わったらインスタンスを破棄します。ConoHaはインスタンスを削除しないと課金されるので注意です(停止ではだめです)。

# vagrant destroy

==> default: Deleting server...
==> default: Waiting for the server to be deleted...


vagrant-conohaの変更点

オリジナルのvagrant-openstack-providerとの相違点などは


fixed ipへの対応

RackSpaceはfloating ipというIPアドレスをプールする仕組みを使っています。一方ConoHaはfixed ipという、インスタンス毎に固定IPを割り振る方法を採用しています。vagrant-openstack-providerはfloating ipのみの対応だったので、fixed ip対応の実装に変えてます。


Storage Serviceの名前の違い

KeyStoneからServiceCatalogという、OpenStackコンポーネントの一覧のようなものが取れるのですが、StorageService(cinder)のtypeが、RackSpaceは"volume"で、ConoHaは"volumev2"となっています。これはvolumev2が正しいらしいですが、私はよく知りませんw ともかく、この違いに対応しています。


admin_passパラメータへの対応

ConoHaのAPIはインスタンス作成時にrootパスワードを指定する機能があります。これはConoHa独自のパラメータです。これに対応しています。


おわりに

やっぱり、いちいちAPI叩くのも面倒なのでVagrantから扱えると楽ですな( ´ ω ` )

バグレポートやPull Requestお待ちしています。