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です。
[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お待ちしています。