Reading OpenStackユーザー本: glance image-list --name centos-base が実行できなくて悩んだ

OpenStackユーザー本を読んでる

経緯はこの前書きました → 要望から3日後には本番環境で動いているサンプルプログラムを見せたい - Mitsuyuki.Shiiba

5章からがハンズオンなんだけど、その3個目のコマンドでつまづいたー!楽しかった。

そして、まだ本題に入ってない!(∩´∀`)∩ワーイ

glance image-list --name centos-base が実行できない!

glance っていうコマンドがあって、それはOpenStackのImage Service関係のコマンドなんだけど。

本に書いてある通りに実行しても怒られる。

$ glance image-list --name centos-base
usage: glance [--version] [-d] [-v] [--get-schema] [--timeout TIMEOUT]
              [--no-ssl-compression] [-f] [--os-image-url OS_IMAGE_URL]
              [--os-image-api-version OS_IMAGE_API_VERSION] [-k]
              [--os-cert OS_CERT] [--cert-file OS_CERT] [--os-key OS_KEY]
              [--key-file OS_KEY] [--os-cacert <ca-certificate-file>]
              [--ca-file OS_CACERT] [--os-username OS_USERNAME]
              [--os-user-id OS_USER_ID]
              [--os-user-domain-id OS_USER_DOMAIN_ID]
              [--os-user-domain-name OS_USER_DOMAIN_NAME]
              [--os-project-id OS_PROJECT_ID]
              [--os-project-name OS_PROJECT_NAME]
              [--os-project-domain-id OS_PROJECT_DOMAIN_ID]
              [--os-project-domain-name OS_PROJECT_DOMAIN_NAME]
              [--os-password OS_PASSWORD] [--os-tenant-id OS_TENANT_ID]
              [--os-tenant-name OS_TENANT_NAME] [--os-auth-url OS_AUTH_URL]
              [--os-region-name OS_REGION_NAME]
              [--os-auth-token OS_AUTH_TOKEN]
              [--os-service-type OS_SERVICE_TYPE]
              [--os-endpoint-type OS_ENDPOINT_TYPE]
              <subcommand> ...

ちなみにバージョンは

$ glance --version
1.1.0

「"--name"オプションなんか知らぬよ!」ってことっぽい。

実は、これ環境構築の章でも同じエラー出てたんだけど、あんまり考えずに↓みたいにして進めてしまってた。

$ glance image-list | grep centos-base

まぁ、こういうところそのままにしといて後で詰まったら嫌だなと思って。ちゃんと原因を調べてみることにした。

nameオプションなしだと実行できる

$ glance image-list
WARNING: The client is falling back to v1 because the accessing to v2 failed. This behavior will be removed in future versions
+--------------------------------------+----------------------------------------------------------------------------------------------------+-------------+------------------+-------------+--------+
| ID                                   | Name                                                                                               | Disk Format | Container Format | Size        | Status |
+--------------------------------------+----------------------------------------------------------------------------------------------------+-------------+------------------+-------------+--------+
| b469f989-fa2e-49d8-8459-67a4c1f4172b | ActiveState Stackato v3.2.1 (deprecated)                                                           | qcow2       | bare             | 5662310400  | active |
| 49197785-9f34-460a-8b77-a22866d370e2 | ActiveState Stackato v3.4.1 (deprecated)                                                           | qcow2       | bare             | 6022692864  | active |
| f2f83e48-6c52-4734-91ba-d515b77a4b98 | ActiveState Stackato v3.4.2 (deprecated)                                                           | qcow2       | bare             | 2396195328  | active |
| 0c3a661a-4adb-4e35-ba61-b07fa9718e48 | ActiveState Stackato v3.6.0 - Partner Image                                                        | qcow2       | bare             | 3186360320  | active |

(略)

そもそもバージョンの警告がでてる

なんだろうなぁこれ。 nova コマンドとかじゃたぶん出てなかったなぁ。

WARNING: The client is falling back to v1 because the accessing to v2 failed. This behavior will be removed in future versions

v2のAPIを叩こうとしたけどだめやったから、v1叩くよ。ってことだよね。

この時点でしばらく悩む。んー。ま、それは警告だからいっか。nameオプションの方調べよっと。

てことで、うろうろ

nameオプション。本には書いてあるのに、どうして使えないんだろうかなー?ってよく分からずにぐぐってたら、公式ドキュメントっぽいところにたどり着いて。つか、最初からそこチェックしろよ←俺。と突っ込みつつ。

Chapter 12. Image service command-line client - OpenStack Command-Line Interface Reference - current

v1の方にもv2の方にもnameオプションないなー。

 glance image-list

usage: glance image-list [--limit <LIMIT>] [--page-size <SIZE>]
                         [--visibility <VISIBILITY>]
                         [--member-status <MEMBER_STATUS>] [--owner <OWNER>]
                         [--property-filter <KEY=VALUE>]
                         [--checksum <CHECKSUM>] [--tag <TAG>]
                         [--sort-key {name,status,container_format,disk_format,size,id,created_at,updated_at}]
                         [--sort-dir {asc,desc}] [--sort <key>[:<direction>]]
 glance image-list (v2)

usage: glance --os-image-api-version 2 image-list [--limit <LIMIT>] [--page-size <SIZE>]
                         [--visibility <VISIBILITY>]
                         [--member-status <MEMBER_STATUS>] [--owner <OWNER>]
                         [--property-filter <KEY=VALUE>]
                         [--checksum <CHECKSUM>] [--tag <TAG>]
                         [--sort-key {name,status,container_format,disk_format,size,id,created_at,updated_at}]
                         [--sort-dir {asc,desc}] [--sort <key>[:<direction>]]

でもAPI(glanceのCLIは実際にはAPIを叩いているらしいです)にはフィルタリング機能あるっぽいなぁ。むーん。

Using Glance’s Image Public APIs — glance 12.0.0.dev7 documentation

Both the GET /v1/images and GET /v1/images/detail requests take query parameters that serve to filter the returned list of images. The following list details these query parameters.

name=NAME

Filters images having a name attribute matching NAME.

分からんなぁ。

HP Cloud の Horizon(Web GUI)を見てみる

なんとなくダッシュボードを見てみたら、Imageのエンドポイントにv1.0って書いてある。

Image https://region-b.geo-1.images.hpcloudsvc.com:443/v1.0

あぁ、Imageサービスはv1だってことか。ふむふむ。なぞが一つとけた。

つーか、いっかいv2に接続しようとするから遅いし、オプション探してみよっと。

v1指定のオプション発見

$glance --os-image-api-version 1 image-list

うん。警告でなくなったや。わーい。あとでopenrcファイルに OS_IMAGE_API_VERSION=1 って書いとこ。

ソース読むか

Pythonよく分からんけど。読んでみた。ら、あれ?それっぽいのがあるぞ?

glanceclient/v1/shell.py

@utils.arg('--name', metavar='<NAME>',
           help='Filter images to those that have this name.')
@utils.arg('--status', metavar='<STATUS>',
           help='Filter images to those that have this status.')

( ゚д゚)ハッ!

こうか!

$ glance --os-image-api-version 1 image-list --name centos-base
+--------------------------------------+-------------+-------------+------------------+------------+--------+
| ID                                   | Name        | Disk Format | Container Format | Size       | Status |
+--------------------------------------+-------------+-------------+------------------+------------+--------+
| 5460fabb-df34-42f0-b3fc-5d12875e240e | centos-base | qcow2       | bare             | 1864826880 | active |
+--------------------------------------+-------------+-------------+------------------+------------+--------+

実行できたー!(∩´∀`)∩ワーイ

v1にはあるけど、v2にはないってことか。 --os-image-api-version 指定なしだと、v2でパースされるから、エラーになるのかー。すっきり。

明日は本題に入るぞー。