こんばんは。 現在12月8日の33時です。 今日の記事は「OpenStack (2枚目) Advent Calendar 2014」12/8 分です
OpenStackのJuno版から入ったデータ処理サービス「Sahara」に興味があったので、DevStackでSaharaを動かすまでの軌跡を書いております。
ドキュメントを見ると、DevStackのlocal.conf
に以下の行を追加するだけで動きそうです。
# Enable Sahara enable_service sahara
あとはstack.sh
を叩くだけ!
% ./stack.sh
何だ簡単じゃん!
そんなわけなかった。。。
1. Horizonのテストでコケる
VagrantでUbuntuのBoxを拾ってきて構築したものの、gettextパッケージがないと言ってテストがコケる。
2014-11-28 02:13:29.288 | HEAD is now at d9f336b Merge "Make status in instance details screen translatable" into stable/juno 2014-11-28 02:13:29.290 | + cd /opt/stack/horizon 2014-11-28 02:13:29.290 | + ./run_tests.sh -N --compilemessages 2014-11-28 02:13:29.613 | WARNING:root:No local_settings file found. 2014-11-28 02:13:29.744 | CommandError: Can't find msgfmt. Make sure you have GNU gettext tools 0.15 or newer installed. 2014-11-28 02:13:29.780 | + exit_trap 2014-11-28 02:13:29.780 | + local r=1 2014-11-28 02:13:29.781 | ++ jobs -p 2014-11-28 02:13:29.781 | + jobs= 2014-11-28 02:13:29.782 | + [[ -n '' ]] 2014-11-28 02:13:29.782 | + kill_spinner 2014-11-28 02:13:29.782 | + '[' '!' -z '' ']' 2014-11-28 02:13:29.782 | + [[ 1 -ne 0 ]] 2014-11-28 02:13:29.782 | + echo 'Error on exit' 2014-11-28 02:13:29.783 | Error on exit 2014-11-28 02:13:29.783 | + [[ -z /opt/stack/logs ]] 2014-11-28 02:13:29.783 | + /home/vagrant/devstack/tools/worlddump.py -d /opt/stack/logs 2014-11-28 02:13:29.819 | + exit 1
horizon/install.rst at master · openstack/horizon · GitHub
Installの手順を見ると思いっきりgettext
が必要なんですが、DevStackのHorizonが必要とするパッケージには書かれていない。
devstack/horizon at stable/juno · openstack-dev/devstack · GitHub
よってfiles/apts/horizon
にgettext
を追加。
apache2 # NOPRIME gettext # 追加 libapache2-mod-wsgi # NOPRIME python-beautifulsoup python-dateutil
2. requirementsが最新じゃない
インストールの最中にライブラリが足りないみたいなエラーで落ちる。
2014-12-09 00:49:51.052 | Syncing /opt/stack/sahara/requirements.txt 2014-12-09 00:49:51.052 | 'oslo.middleware' is not in global-requirements.txt 2014-12-09 00:49:51.072 | + exit_trap 2014-12-09 00:49:51.072 | + local r=1 2014-12-09 00:49:51.073 | ++ jobs -p 2014-12-09 00:49:51.074 | + jobs= 2014-12-09 00:49:51.074 | + [[ -n '' ]] 2014-12-09 00:49:51.074 | + kill_spinner 2014-12-09 00:49:51.074 | + '[' '!' -z '' ']' 2014-12-09 00:49:51.074 | + [[ 1 -ne 0 ]] 2014-12-09 00:49:51.074 | + echo 'Error on exit' 2014-12-09 00:49:51.075 | Error on exit 2014-12-09 00:49:51.075 | + [[ -z /opt/stack/logs ]] 2014-12-09 00:49:51.076 | + /home/vagrant/devstack/tools/worlddump.py -d /opt/stack/logs 2014-12-09 00:49:51.117 | + exit 1
よく見るとstable/juno版にはないライブラリが必要らしく、requirementsの最新版に入ってることを確認。
local.conf
に以下の行を追加。
REQUIREMENTS_BRANCH=${REQUIREMENTS_BRANCH:-master}
3. Internal Server Error
これでようやくHorizonのダッシュボードからSaharaの画面が見えた。 ということでSahara触ってみようとすると500 Internal Server Errorをもらう。 ログを見ると以下のとおり。
2014-11-26 08:10:22.602 ERROR sahara.utils.api [-] Request aborted with status code 500 and message 'Internal Server Error' 2014-11-26 08:10:22.602 ERROR sahara.utils.api [-] Traceback (most recent call last): File "/opt/stack/sahara/sahara/utils/api.py", line 89, in handler return func(**kwargs) File "/opt/stack/sahara/sahara/api/acl.py", line 46, in handler exc=exceptions.Forbidden) File "/opt/stack/sahara/sahara/openstack/common/policy.py", line 314, in enforce self.load_rules() File "/opt/stack/sahara/sahara/openstack/common/policy.py", line 241, in load_rules self.policy_path = self._get_policy_path(self.policy_file) File "/opt/stack/sahara/sahara/openstack/common/policy.py", line 287, in _get_policy_path raise cfg.ConfigFilesNotFoundError((path,)) ConfigFilesNotFoundError: Failed to read some config files: policy.json
policyを見に行こうとするのだが、policyがないというのでいろいろ考えるものの動かない。 いろいろ調べた結果、これstable/junoじゃないのでは・・・
というわけで、devstackのstable/junoブランチのstackrc
を見に行くと。
devstack/stackrc at stable/juno · openstack-dev/devstack · GitHub
# compute service NOVA_REPO=${NOVA_REPO:-${GIT_BASE}/openstack/nova.git} NOVA_BRANCH=${NOVA_BRANCH:-stable/juno} # data processing service SAHARA_REPO=${SAHARA_REPO:-${GIT_BASE}/openstack/sahara.git} SAHARA_BRANCH=${SAHARA_BRANCH:-master} # object storage service SWIFT_REPO=${SWIFT_REPO:-${GIT_BASE}/openstack/swift.git} SWIFT_BRANCH=${SWIFT_BRANCH:-stable/juno}
なんでmaster見に行ってんの・・・ねえ・・・ stable/junoって言ったじゃないの・・・
というわけで、Saharaのブランチをlocal.conf
でstable/junoに切り替え。
ついでにさっきmasterにしたrequirementsの設定は削除
SAHARA_BRANCH=${SAHARA_BRANCH:-stable/juno}
これで無事にSaharaが動いてInternal Server Errorをもらうこともなくなりました。
結論
- 2014/12/08 33時段階でのDevStack(stable/juno)のHorizonは動かない環境がある。
gettext
がない場合は入れる。- 2014/12/08 35時段階でのDevStack(stable/juno)のSaharaはデフォルトでは動かない。
- DevStackでstable/juno版のSaharaを動かすときは
local.conf
にSaharaのブランチにstable/juno
を指定する local.conf
は以下のとおり
# Enable Sahara SAHARA_BRANCH=${SAHARA_BRANCH:-stable/juno} enable_service sahara
おまけ
gettext
がない件と、DevStackのstable/juno版のSaharaがstable/junoを使っていない件をプルリクエストにして投げたら速攻クローズされた。
理由はgerrit使えだそうです。
これからgerritの設定して再度修正投げます。。。