mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

DevStackでSahara(Juno版)を動かしてみよう

こんばんは。 現在12月8日の33時です。 今日の記事は「OpenStack (2枚目) Advent Calendar 2014」12/8 分です

OpenStackのJuno版から入ったデータ処理サービス「Sahara」に興味があったので、DevStackでSaharaを動かすまでの軌跡を書いております。

Setup DevStack — Sahara

ドキュメントを見ると、DevStackのlocal.confに以下の行を追加するだけで動きそうです。

# Enable Sahara
enable_service sahara

あとはstack.shを叩くだけ!

%  ./stack.sh

何だ簡単じゃん!

そんなわけなかった。。。

1. Horizonのテストでコケる

VagrantUbuntuの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/horizongettextを追加。

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の設定して再度修正投げます。。。