2017-05-15 10 views
1

OpenStackには<OS> <version>:<build no>という名前の画像があります(例:CentOS 7.2.0:160708.0)。 the Python novaclientで、私はclient.glance.find_imageをMitakaの前のリリースで使用できます。三鷹でなぜコロンはnovaclientのglance.find_imageを破損しますか?

$ python3 test.py "CentOS 7.2.0:170210.0" 
<Image: CentOS 7.2.0:170210.0> 

:その名前の画像が存在しないエラーが異なること

$ python3 test.py "CentOS 7.2.0:170210.0" 
Traceback (most recent call last): 
    File "test.py", line 11, in <module> 
    print(nova.glance.find_image(sys.argv[1])) 
    File "/usr/local/lib/python3.6/site-packages/novaclient/v2/images.py", line 53, in find_image 
    "images") 
    File "/usr/local/lib/python3.6/site-packages/novaclient/base.py", line 254, in _list 
    resp, body = self.api.client.get(url) 
    File "/usr/local/lib/python3.6/site-packages/keystoneauth1/adapter.py", line 223, in get 
    return self.request(url, 'GET', **kwargs) 
    File "/usr/local/lib/python3.6/site-packages/novaclient/client.py", line 80, in request 
    raise exceptions.from_response(resp, body, url, method) 
novaclient.exceptions.BadRequest: Unable to filter by unknown operator 'CentOS 7.2.0'.<br /><br /> 


(HTTP 400) 

$ python3 test.py "CentOS 7.2.0" 
Traceback (most recent call last): 
    File "test.py", line 11, in <module> 
    print(nova.glance.find_image(sys.argv[1])) 
    File "/usr/local/lib/python3.6/site-packages/novaclient/v2/images.py", line 58, in find_image 
    raise exceptions.NotFound(404, msg) 
novaclient.exceptions.NotFound: No Image matching CentOS 7.2.0. (HTTP 404) 

リバティで

$ cat test.py 
#! /usr/bin/env python3 
import os 
import sys 
from novaclient import client 
nova = client.Client("2", 
        os.environ["OS_USERNAME"], 
        os.environ["OS_PASSWORD"], 
        os.environ["OS_TENANT_ID"], 
        os.environ["OS_AUTH_URL"], 
        cacert=os.environ["OS_CACERT"]) 
print(nova.glance.find_image(sys.argv[1])) 

あたかもfind_imageと同じですフォームoperator: valueの文字列を期待するが、the documentation has only this to say about find_image

find_imagename_or_id
名前またはID(ユーザ提供の入力)によって画像を検索します。

三鷹を使用しているときに名前にコロンが含まれる画像を見つけるにはどうすればよいですか?


$ nova --version 
8.0.0 

答えて

1

誤差は、画像サービス(概要)から来ています。 Glanceの新しいバージョンでは、GET API構文に変更があります.Get APIの構文では、フィルタリングに「in:」演算子を指定できます。あなたは、あなたのコードが動作するために

https://developer.openstack.org/api-ref/image/v2/index.html?expanded=show-images-detail#show-images

でこれについての詳細を読むことができます「に:」引用符でイメージ名を囲み、を前に付けできる文字列:

print(nova.glance.find_image('in:"' + sys.argv[1] + '"')) 

なお概要引用符についてはかなり厳しいです。イメージ名は二重引用符で囲む必要があります。一重引用符は機能しません。したがって、私は上記のコマンドで文字列の一重引用符を使用しました。

もうかなり非効率的かつ機能オプションがnova.imagesにリスト()関数を使用して、明示的に名前sys.argvので画像を探すことである[1]:

ilist = nova.images.list() 
for image in ilist: 
    if image.name == sys.argv[1]: 
     print image 
     break 
+0

リストをフィルタリングすることは非効率的であるかもしれません、正確なイメージ名が必要な 'find_image'よりはるかに柔軟です。そして、 "in:" ... "の方法は古いリリースではうまくいかないので、それほど有用ではありません。情報のおかげで! – muru

関連する問題