OpenStackのPluginもあるようなので試してみました。
クライアント環境をセットアップする
Ubuntu 14.04で試しました。
Vagrantをダウンロードする
こちらのURLからダウンロードできます。https://www.vagrantup.com/downloads.html
UbuntuはDEBIAN系なのでDEBIANの64-bitを使用します。
ダウンロードURLをコピーして次のコマンドを実行します。
curl -L -O <URL>
Vagrantをインストールする
次のコマンドでインストールできます。sudo dpkg -i <FILE>
(Opt1) OpenStack Providerをインストールする
"OpenStack Provider"をGoogleで検索すると次の2つがヒットします。
https://github.com/ggiamarchi/vagrant-openstack-provider
https://github.com/cloudbau/vagrant-openstack-plugin
まずは、OpenStack Providerの方を試してみようと思います。
READMEを見ると、次のコマンドでインストールできると記載されていたので実行します。
vagrant plugin install vagrant-openstack-provider
makeコマンドが見つからないといわれました。
Ubuntuはデフォルトではmakeコマンドが導入されていないんですね。
Ubuntu日本語フォーラムを見ると導入方法がかかれていました。
https://forums.ubuntulinux.jp/viewtopic.php?pid=9343
Makeをインストールする
次の2つのコマンドで導入できるようです。
$ sudo apt-get update
$ sudo apt-get install build-essential
一つ目のコマンドは成功しました。
2つ目のコマンドも成功したようです。
(途中省略)
もう一度OpenStack Providerのインストールを試みます。
しかし、まだエラーが出ています。
gem install json -v '1.7.7'を試せとあります。
このコマンドは成功したようです。
でもまだエラーが出ました。
Googleで"openstack-provider rb_str_new(FBUFFER_PAIR(fb)"を検索してみると、以下の記事がヒットしました。
https://github.com/ggiamarchi/vagrant-openstack-provider/issues/233
これをたどっていくと、次の記事が見つかるのですが、
https://github.com/flori/json/issues/229
jsonとRubyのバージョン互換の問題のようです。
Vagrantのバージョンを少し下げてリトライしてみます。
2015/12/27現在の最新バージョンは1.8.1ですが、少し前の1.7.4を試してみようと思います。
古いバージョンのVagrantは以下のURLからダウンロードできます。
https://releases.hashicorp.com/vagrant/
同様の手順で、Curlコマンドでダウンロードして、dpkgでインストールしました。
そして、plugin installを行うと、、、
難なくインストールに成功しました。
導入したら、OpenStack互換のBOXを作成する必要があるとのこと。
以下のコマンドを入力するとあるのでその通り実行します(dummyは好きな名前で良いようです)。
$ vagrant box add dummy https://github.com/cloudbau/vagrant-openstack-plugin/raw/master/dummy.box
Vagrantfileを作成する
OpenStack ProviderのREADMEを見ながら作業を進めます。
READMEのサンプルは次のようになっています。
require 'vagrant-openstack-provider'
Vagrant.configure('2') do |config|
config.vm.box = 'openstack'
config.ssh.username = 'stack'
config.vm.provider :openstack do |os|
os.openstack_auth_url = 'http://keystone-server.net/v2.0/tokens'
os.username = 'openstackUser'
os.password = 'openstackPassword'
os.tenant_name = 'myTenant'
os.flavor = 'm1.small'
os.image = 'ubuntu'
os.floating_ip_pool = 'publicNetwork'
end
end
私の環境では次のように作成しました。
require 'vagrant-openstack-provider'
Vagrant.configure('2') do |config|
config.vm.box = 'openstack'
config.ssh.username = 'stack'
config.vm.provider :openstack do |os|
os.openstack_auth_url = 'https://icos-sea.openstack.blueboxgrid.com:5001/v2.0'
os.username = 'matsuos'
os.password = '<PASSWORD>'
os.tenant_name = 'demo project'
os.flavor = 'm1.tiny'
os.image = 'ubuntu-14.04'
os.networks = [
'internal'
]
os.floating_ip_pool = 'external'
end
end
os.networksはネットワークが1つしかなければ指定しなくてもエラーにはならないようです。
フローティングIPが不要な場合はos.floating_ip_poolも指定しなくてよさそうです。
それでは、インスタンスを作成してみましょう。
Vagrantfileが置かれているディレクトリで以下のコマンドを実行します。
$ vagrant up --provider=openstack
エラーが出て失敗してしまいました。
デバッグモードにする環境変数を設定するようガイドがありましたので従います。
$ export VAGRANT_OPENSTACK_LOG=debug
もう一度コマンドを実行してみます。
$ vagrant up --provider=openstack
ネットワーク情報の取得に失敗しているようです。
エラーメッセージをGithubで検索してみると、次の記事が見つかりました。
https://github.com/ggiamarchi/vagrant-openstack-provider/issues/235
この記事によると、OpenStackのKeystone(認証モジュール)が返すNeutron(Networkモジュール)へのエンドポイント(APIコール用URL)が間違っている場合に発生するとあります。
同記事に解決策がありましたので見習ってみます。
os.openstack_network_urlに正しいAPI用URLを指定すればよさそうです。
Vagrantfileにこの記述を追加します。下図の赤色部分が新たに追加した設定です。require 'vagrant-openstack-provider'
Vagrant.configure('2') do |config|
config.vm.box = 'openstack'
config.ssh.username = 'stack'
config.vm.provider :openstack do |os|
os.openstack_auth_url = 'https://icos-sea.openstack.blueboxgrid.com:5001/v2.0'
os.openstack_network_url = 'https://icos-sea.openstack.blueboxgrid.com:9797/v2.0' os.username = 'matsuos'
os.password = 'change7Me'
os.tenant_name = 'demo project'
os.flavor = 'm1.tiny'
os.image = 'ubuntu-14.04'
os.networks = [
'internal'
]
os.floating_ip_pool = 'external'
end
end
HorizonポータルからInstance一覧を確認すると確かに「default」という名前でインスタンスが作成されていました。
SSHでログインできるようにする
このままでは、OpenStackのセキュリティグループ(Port Filter)を何も定義していないので、外からアクセスできません。また、Ubuntuイメージはデフォルトではリモートからのログインを許していないので、それも設定してあげる必要があります。さらにSSHのキーペアも作成しておく必要があります。これらを加味したVagrantfileは次のようになります。赤字の部分が前項との違いです。
require 'vagrant-openstack-provider'
Vagrant.configure('2') do |config|
config.vm.box = 'openstack'
config.ssh.username = 'ubuntu'
config.ssh.private_key_path = '~/.ssh/matsuos-vagrant-key.pem'
config.vm.provider :openstack do |os|
# OpenStack Authentication
os.openstack_auth_url =
'https://icos-sea.openstack.blueboxgrid.com:5001/v2.0'
os.openstack_network_url =
'https://icos-sea.openstack.blueboxgrid.com:9797/v2.0'
os.username = 'matsuos'
os.password = 'change7Me'
os.tenant_name = 'demo project'
# Instance definition
os.flavor = 'm1.tiny'
os.image = 'ubuntu-14.04'
os.networks = ['internal']
os.floating_ip_pool = 'external'
os.keypair_name = 'matsuos-vagrant-key'
os.security_groups = ['matsuos-sg-ssh']
os.user_data = '
#cloud-config
password: zaq12wsx
chpasswd: { expire: False }
ssh_pwauth: True
'
end
end
赤字部分をひとつづつ説明します。
config.ssh.username = 'ubuntu'
ログインIDです。
config.ssh.private_key_path = '~/.ssh/matsuos-vagrant-key.pem'
OpenStackで作成した秘密鍵をこのパスに保管します。
os.keypair_name = 'matsuos-vagrant-key'
OpenStackで作成したキーペア名です。
os.security_groups = ['matsuos-sg-ssh']
OpenStackで作成したセキュリティグループです。
最低限SSHで外からアクセスできるようなセキュリティグループを作っておく必要があります。
os.user_data = '
#cloud-config
password: zaq12wsx
chpasswd: { expire: False }
ssh_pwauth: True
'
インスタンスをブートする際に指定するスクリプトです。
ubuntuアカウントのパスワードを設定し、期限を無期限にしています。またsshのパスワード認証を許可しています。
キーペアはOpenStackのダッシュボードから作成します。
キーペアの名前は os.keypair_name = 'matsuos-vagrant-key' で指定したものと同じにします。
作成したら秘密鍵をダウンロードします。
ダウンロードしたら config.ssh.private_key_path = '~/.ssh/matsuos-vagrant-key.pem' で指定したパスに保存します。
先ほど作成した区画はvagrant destroyコマンドで削除し、再びvagrant upコマンドを実行します。
なお、--provider=openstack は指定しなくても動きます。
最後の方で5行くらいConnection refusedが表示されています。ここはSSHのキー認証によるログインを試みているフェーズです。インスタンスが起動し終わるとログインができてプロンプトが返ってきます。
SSHのキー認証の設定がうまくいっていないと、ずーっと試行ループに入ってしまいます。
停止したい場合はpsコマンドを実行し、rubyプロセスのIDを確認し、killコマンドで終了させます。
0 件のコメント:
コメントを投稿