事象について

OpenStack のブロックストレージである Cinder 構築後、動作確認のために cinder コマンドを実行したら以下のエラーで失敗。

The v1 api is deprecated and will be removed after the Juno release. You should set enable_v1_api=false and enable_v2_api=true in your cinder.conf file

「API v1 は、非推奨なので、v2 を使ってください」というエラーメッセージでした。

コントローラノード : Cinder API バージョン関連警告Raw Code(S)Raw Code(T)
# rm -f /var/log/cinder/*.log

# service cinder-scheduler restart
# service cinder-api restart

# grep "ERROR\|WARNING" /var/log/cinder/*.log
/var/log/cinder/cinder-api.log:2015-02-17 17:36:11.586 25024 WARNING cinder.api [-] The v1 api is deprecated and will be removed after the Juno release. You should set enable_v1_api=false and enable_v2_api=true in your cinder.conf file

API v1 を無効化し、v2 を有効化後、再度サービス再起動を実施。

コントローラノード : Cinder API v2 のみ有効化Raw Code(S)Raw Code(T)
# vi /etc/cinder/cinder.conf
[DEFAULT]
・・・
enable_v1_api = false
enable_v2_api = true


# rm -f /var/log/cinder/*.log

# service cinder-scheduler restart
# service cinder-api restart

# grep "ERROR\|WARNING" /var/log/cinder/*.log

これで警告メッセージは出なくなりましたが、cinder コマンドを実行すると以下のようなエラーで失敗します。

ブロックストレージ構築後のコントローラノード : cinder コマンド実行エラーRaw Code(S)Raw Code(T)
$ source demo-openrc.sh

$ cinder service-list
ERROR: 'services'

$ cinder create --display-name demo-volume 1
ERROR: The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)

$ cinder list
ERROR: 'volumes'

原因と対策

最初は、ブロックストレージノードの設定を疑っていましたが、何回も見直して、チェックして問題なさそうだったので、もしかすると v1 と v2 が同居しているので、明示的に指定してあげないと行けないのかな? と思って試しにやってみたら問題なく実行できるようになりました。

恐らくデフォルトで API v1 が使われているみたいなので、対策として、明示的に v2 を使うように cinder コマンドのオプションとして指定するかクレデンシャルに定義して使うようにします。

コマンド実行時に API v2 を使うように明示的に指定

cinder コマンド実行時に明示的に v2 を指定Raw Code(S)Raw Code(T)
$ cinder --os-volume-api-version 2 service-list
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |     Host     | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller01 | nova | enabled |   up  | 2015-02-24T04:34:45.000000 |       None      |
|  cinder-volume   | cinder01     | nova | enabled |   up  | 2015-02-24T04:34:41.000000 |       None      |
+------------------+--------------+------+---------+-------+----------------------------+-----------------+

クレデンシャルに API v2 を使うように登録して使う

クレデンシャルに API v2 を使うように環境変数として登録Raw Code(S)Raw Code(T)
$ echo "export OS_VOLUME_API_VERSION=2" >> ~/admin-openrc.sh
$ echo "export OS_VOLUME_API_VERSION=2" >> ~/demo-openrc.sh

$ source ~/admin-openrc.sh
$ cinder service-list
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |     Host     | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+--------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller01 | nova | enabled |   up  | 2015-02-24T04:34:45.000000 |       None      |
|  cinder-volume   | cinder01     | nova | enabled |   up  | 2015-02-24T04:34:41.000000 |       None      |
+------------------+--------------+------+---------+-------+----------------------------+-----------------+

以上、OpenStack : Cinder API v1 を無効にすると cinder コマンドがエラーで失敗する でした。